使用Impala客户端
Impala是用于处理存储在Hadoop集群中的大量数据的MPP(大规模并行处理)SQL查询引擎。 它是一个用C++和Java编写的开源软件。 与其他Hadoop的SQL引擎相比,它拥有高性能和低延迟的特点。
背景信息
假定用户开发一个应用程序,用于管理企业中的使用A业务的用户信息,使用Impala客户端实现A业务操作流程如下:
普通表的操作:
- 创建用户信息表user_info。
- 在用户信息中新增用户的学历、职称信息。
- 根据用户编号查询用户姓名和地址。
- A业务结束后,删除用户信息表。
详见下表:用户信息
编号 | 姓名 | 性别 | 年龄 | 地址 |
---|---|---|---|---|
12005000201 | A | 男 | 19 | A城市 |
12005000202 | B | 女 | 23 | B城市 |
12005000203 | C | 男 | 26 | C城市 |
12005000204 | D | 男 | 18 | D城市 |
12005000205 | E | 女 | 21 | E城市 |
12005000206 | F | 男 | 32 | F城市 |
12005000207 | G | 女 | 29 | G城市 |
12005000208 | H | 女 | 30 | H城市 |
12005000209 | I | 男 | 26 | I城市 |
12005000210 | J | 女 | 25 | J城市 |
前提条件
已安装客户端,例如安装目录为“/opt/hadoopclient”,以下操作的客户端目录只是举例,请根据实际安装目录修改。
操作步骤
- 以客户端安装用户,登录安装客户端的节点。
- 执行以下命令,切换到客户端安装目录。
cd /opt/hadoopclient
- 执行以下命令配置环境变量。
source bigdata_env
- 运行Impala客户端命令,实现A业务。
直接执行Impala组件的客户端命令:
impala-shell
说明默认情况下,impala-shell尝试连接到localhost的21000端口上的Impala守护程序。如需连接到其他主机,请使用 -i host:port 选项,例如:impala-shell -i xxx.xxx.xxx.xxx:21000。要自动连接到特定的Impala数据库,请使用 -d 选项。例如,如果您的所有Kudu表都位于数据库“impala_kudu”中,则-d impala_kudu可以使用此数据库。要退出ImpalaShell,请使用quit命令。
内部表的操作:
- 根据表创建用户信息表user_info并添加相关数据。
createtable user_info(id string,name string,gender string,age int,addr string);
insert into table user_info(id,name,gender,age,addr)values("12005000201","A","男",19,"A城市");
......(其他语句相同)
- 在用户信息表user_info中新增用户的学历、职称信息。
以增加编号为12005000201的用户的学历、职称信息为例,其他用户类似。
alter table user_info add columns(education string,technical string);
- 根据用户编号查询用户姓名和地址。
以查询编号为12005000201的用户姓名和地址为例,其他用户类似。
select name,addr from user_info where id='12005000201';
- 删除用户信息表。
drop table user_info;
外部分区表的操作:
创建外部分区表并导入数据
- 创建外部表数据存储路径。
- 安全模式(集群开启了Kerberos认证):
cd /opt/hadoopclient
source bigdata_env
kinit hive
说明用户hive需要具有Hive管理员权限。
impala-shell
hdfs dfs -mkdir /hive
hdfs dfs -mkdir /hive/user_info
- 普通模式(集群关闭了Kerberos认证):
su - omm
cd /opt/hadoopclient
source bigdata_env
impala-shell
hdfs dfs -mkdir /hive
hdfs dfs -mkdir /hive/user_info
- 建表。
create
external table user_info(id string,name string,gender string,age int,addr
string) partitioned by(year string) row format delimited fields terminated by '
' lines terminated by '\n' stored as textfile location '/hive/user_info';
说明fields terminated指明分隔的字符,如按空格分隔,' '。
lines terminated 指明分行的字符,如按换行分隔,'\n'。
/hive/user_info为数据文件的路径。
- 导入数据。
a. 使用insert语句插入数据。
insert into user_info partition(year="2018") values
("12005000201","A","男",19,"A城市");
b. 使用load data命令导入文件数据。
i.根据下表数据创建文件。如,文件名为txt.log,以空格拆分字段,以换行符作为行分隔符。
ii. 上传文件至hdfs。
hdfs dfs -put txt.log /tmp
iii. 加载数据到表中。
load data inpath '/tmp/txt.log' into table user_info partition
(year='2018');
- 查询导入数据。
select * from user_info;
- 删除用户信息表。
drop table user_info;