Impala Shell

Posted Hadoop学习之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Impala Shell相关的知识,希望对你有一定的参考价值。

1.更新元数据

 
   
   
 
  1. invalidate metadata;

  2. 对于通过Hive加载,插入,改变的数据操作,或者通过hdfs命令对数据文件进行的变更操作,

  3. Impala都无法自动识别数据的变更情况.如果想让Impala识别到这些变化,

  4. 在连接到impala-shell后,首先要做的操作就是REFRESH table_name,该语句会让lmpala识别到数据的变更情况.

2.对查询结果去格式化

 
   
   
 
  1. > impala-shell -B

3.查询结果存储到文件

  • 使用 -o 将查询结果保存到txt文件中后会提示编码问题,如下

 
   
   
 
  1. [impala@test101 ~]$ impala-shell -o 0502.txt -q ' select * from sina_weibo limit 1;'

  2. Starting Impala Shell without Kerberos authentication

  3. Connected to test101:21000

  4. Server version: impalad version 2.11.0-cdh5.14.0 RELEASE (build d68206561bce6b26762d62c01a78e6cd27aa7690)

  5. Query: select * from sina_weibo limit 1

  6. Query submitted at: 2018-05-02 17:19:30 (Coordinator: http://test101:25000)

  7. Query progress can be monitored at: http://test101:25000/query_plan?query_id=2e4528016c46ebfa:4ce8e72a00000000

  8. Unknown Exception : 'ascii' codec can't encode characters in position 1834-1835: ordinal not in range(128)

  9. Could not execute command: select * from sina_weibo limit 1

  • 解决方案

 
   
   
 
  1. 1. 查找我们执行的impala-shell具体内容

  2. [root@test101 impala]# whereis impala-shell

  3. impala-shell: /usr/bin/impala-shell

  4. [root@test101 impala]# vim /usr/bin/impala-shell

  5. 2. 我们发现impala-shell会执行 impala_shell.py

  6. PYTHONPATH="${EGG_PATH}${SHELL_HOME}/gen-py:${SHELL_HOME}/lib:${PYTHONPATH}" \

  7.  exec python ${SHELL_HOME}/impala_shell.py "$@"

  8. 3. 查找impala_shell.py ,设置编码为utf-8

  9. [root@test101 impala]# find / -name 'impala_shell.py'

  10. /opt/cloudera/parcels/CDH-5.14.0-1.cdh5.14.0.p0.24/lib/impala-shell/impala_shell.py

  11. > import sys  

  12. > reload(sys)  

  13. > sys.setdefaultencoding('utf-8')  

  14. 4. 再次执行结果出来

4.去格式化后指定分隔符

--output delimiter-:该选项对使用-B选项去格式化输出的查询结果指定各字段间的分,隔符.默认的分隔符为制表键('\t'),如果输出字段中包含了分隔符字符,这个字段将使用/进行 转义.

 
   
   
 
  1. [test101:21000] > select uid,gender,city from offline_user2 limit 5;

  2. Query: select uid,gender,city from offline_user2 limit 5

  3. Query submitted at: 2018-05-04 20:23:52 (Coordinator: http://test101:25000)

  4. Query progress can be monitored at: http://test101:25000/query_plan?query_id=254620554e7f3de7:3b47e8e600000000

  5. 5887898482,女,海口

  6. 6013580396,男,NULL

  7. 3485070663,男,NULL

  8. 6081748563,男,深圳

  9. 5903926726,男,商丘

  10. Fetched 5 row(s) in 0.19s

5.-p或者--show-profiles:显示查询的执行计划(与EXPLAIN语句输出相同)和每个查询语句底层的执行步骤的详细信息.

6.指定主机名连接 (-i)

 
   
   
 
  1. -i或者-imapad-:后面接主机名用来指定连接到指定的impalad节点.

  2. 默认的连接端口为21000,我们可以使用该命令连接到集群中任何一台impalad节点上.

  3. 如果Impala启动时使用了备用端口,则需要使用--fe-port选项标识.

7.执行查询语句

 
   
   
 
  1. -q或者-query-:该选项用于执行一个查询语句或者shell命令.

  2. Impala不必等待查询或者shell执行结束即可返回.这里的查询仅限于像SELECT, CREATE TABLE, SHOW TABLES等单条的语句.

  3. 因为USE语句是一条单独的SQL语句,而这个选项只能指定单条语句,

  4. 所以如果对象没有前缀只能访问default数据库,如果要访问其他数据库就必须指定数据库名称作为前缀.

8.指定脚本文件执行SQL

 
   
   
 
  1. -f或者-query-file-:这个选项后面可以跟一个SQL查询脚本文件,

  2. 脚本文件中的SQL必须使用";"来分隔.

  3. > cat query.sql

  4. use default;

  5. select  from student;

  6. select mf, count (*) from student group by mf;

  7. > impala-shell -f query.sql

9.-r或者--refreshafterconnect

 
   
   
 
  1. 连接后刷新Impala元数据信息.效果和连接之后执行REFRESH语句相同.

10 -k或者-kerberos

 
   
   
 
  1. 该选项用来指定当shell连接到impalad节点时使用kerberos身份验证.但是如果impalad节点本身没有启用kerberos,连接将会报错.

11.-s或者-kerberosservicename

 
   
   
 
  1. 该选项后面跟kerberos服务名称让impala-shell验证一个特定的impalad服务.如果没有指定kerberos服务名称,将使用impala作为默认的名称.如果

  2. 该选项用于一个不支持kerberos的连接,将会返回错误.

12.-V或者-verbose

 
   
   
 
  1. 启用详细信息输出.

13.-quiet

 
   
   
 
  1. 禁用详细信息输出.

14.-v或者-version

显示版本信息.

15.-c:

如果查询失败继续执行.

16.-d或者--database-

 
   
   
 
  1. 该选项后面跟上数据库的名称用于连接到指定的数据库.该选项的效果和连接上之后执行USE的效果相同.如果不指定该选项,将连接到系统默认的default数据库.



以上是关于Impala Shell的主要内容,如果未能解决你的问题,请参考以下文章

impala基础使用

删除 impala shell 历史

Impala Shell

第1节 IMPALA:8impala的shell交互窗口使用

运算符 -i 在 `impala-shell -i localhost` 中做了啥

无法使用 impala-shell 在 kudu 中创建表