使用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;