Impala Shell
Posted Hadoop学习之路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Impala Shell相关的知识,希望对你有一定的参考价值。
1.更新元数据
invalidate metadata;
对于通过Hive加载,插入,改变的数据操作,或者通过hdfs命令对数据文件进行的变更操作,
Impala都无法自动识别数据的变更情况.如果想让Impala识别到这些变化,
在连接到impala-shell后,首先要做的操作就是REFRESH table_name,该语句会让lmpala识别到数据的变更情况.
2.对查询结果去格式化
> impala-shell -B
3.查询结果存储到文件
使用 -o 将查询结果保存到txt文件中后会提示编码问题,如下
[impala@test101 ~]$ impala-shell -o 0502.txt -q ' select * from sina_weibo limit 1;'
Starting Impala Shell without Kerberos authentication
Connected to test101:21000
Server version: impalad version 2.11.0-cdh5.14.0 RELEASE (build d68206561bce6b26762d62c01a78e6cd27aa7690)
Query: select * from sina_weibo limit 1
Query submitted at: 2018-05-02 17:19:30 (Coordinator: http://test101:25000)
Query progress can be monitored at: http://test101:25000/query_plan?query_id=2e4528016c46ebfa:4ce8e72a00000000
Unknown Exception : 'ascii' codec can't encode characters in position 1834-1835: ordinal not in range(128)
Could not execute command: select * from sina_weibo limit 1
解决方案
1. 查找我们执行的impala-shell具体内容
[root@test101 impala]# whereis impala-shell
impala-shell: /usr/bin/impala-shell
[root@test101 impala]# vim /usr/bin/impala-shell
2. 我们发现impala-shell会执行 impala_shell.py
PYTHONPATH="${EGG_PATH}${SHELL_HOME}/gen-py:${SHELL_HOME}/lib:${PYTHONPATH}" \
exec python ${SHELL_HOME}/impala_shell.py "$@"
3. 查找impala_shell.py ,设置编码为utf-8
[root@test101 impala]# find / -name 'impala_shell.py'
/opt/cloudera/parcels/CDH-5.14.0-1.cdh5.14.0.p0.24/lib/impala-shell/impala_shell.py
> import sys
> reload(sys)
> sys.setdefaultencoding('utf-8')
4. 再次执行结果出来
4.去格式化后指定分隔符
--output delimiter-:该选项对使用-B选项去格式化输出的查询结果指定各字段间的分,隔符.默认的分隔符为制表键('\t'),如果输出字段中包含了分隔符字符,这个字段将使用/进行 转义.
[test101:21000] > select uid,gender,city from offline_user2 limit 5;
Query: select uid,gender,city from offline_user2 limit 5
Query submitted at: 2018-05-04 20:23:52 (Coordinator: http://test101:25000)
Query progress can be monitored at: http://test101:25000/query_plan?query_id=254620554e7f3de7:3b47e8e600000000
5887898482,女,海口
6013580396,男,NULL
3485070663,男,NULL
6081748563,男,深圳
5903926726,男,商丘
Fetched 5 row(s) in 0.19s
5.-p或者--show-profiles:显示查询的执行计划(与EXPLAIN语句输出相同)和每个查询语句底层的执行步骤的详细信息.
6.指定主机名连接 (-i)
-i或者-imapad-:后面接主机名用来指定连接到指定的impalad节点.
默认的连接端口为21000,我们可以使用该命令连接到集群中任何一台impalad节点上.
如果Impala启动时使用了备用端口,则需要使用--fe-port选项标识.
7.执行查询语句
-q或者-query-:该选项用于执行一个查询语句或者shell命令.
Impala不必等待查询或者shell执行结束即可返回.这里的查询仅限于像SELECT, CREATE TABLE, SHOW TABLES等单条的语句.
因为USE语句是一条单独的SQL语句,而这个选项只能指定单条语句,
所以如果对象没有前缀只能访问default数据库,如果要访问其他数据库就必须指定数据库名称作为前缀.
8.指定脚本文件执行SQL
-f或者-query-file-:这个选项后面可以跟一个SQL查询脚本文件,
脚本文件中的SQL必须使用";"来分隔.
> cat query.sql
use default;
select from student;
select mf, count (*) from student group by mf;
> impala-shell -f query.sql
9.-r或者--refreshafterconnect
连接后刷新Impala元数据信息.效果和连接之后执行REFRESH语句相同.
10 -k或者-kerberos
该选项用来指定当shell连接到impalad节点时使用kerberos身份验证.但是如果impalad节点本身没有启用kerberos,连接将会报错.
11.-s或者-kerberosservicename
该选项后面跟kerberos服务名称让impala-shell验证一个特定的impalad服务.如果没有指定kerberos服务名称,将使用impala作为默认的名称.如果
该选项用于一个不支持kerberos的连接,将会返回错误.
12.-V或者-verbose
启用详细信息输出.
13.-quiet
禁用详细信息输出.
14.-v或者-version
显示版本信息.
15.-c:
如果查询失败继续执行.
16.-d或者--database-
该选项后面跟上数据库的名称用于连接到指定的数据库.该选项的效果和连接上之后执行USE的效果相同.如果不指定该选项,将连接到系统默认的default数据库.
以上是关于Impala Shell的主要内容,如果未能解决你的问题,请参考以下文章
第1节 IMPALA:8impala的shell交互窗口使用