开发者学堂课程【大数据Impala教程:Shell 命令行--内外部参数】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/722/detail/12891
Shell 命令行--内外部参数
内容介绍:
一、Impala-shell 外部命令
二、Impala-shell 内部命令
一、Impala-shell 外部命令
1.外部命令
Impala-shell 当中的命令参数,作为官方提供的交互方式,可以使用自带的 shell 命令。给 Impala 集群进行查询的交互,但 shell 功能比较强大,在启动的时候,如果不加任何的参数它是一个交互式的 shell 命令行。在启动的时候可以参添加一些参数,修改某些属性。这时候的参数,叫做外部命令,外部参数,所谓的外部命令指的是,在启动的时候添加的参数。比如说现在来到主节点 node-3,如果说现在不增加任何参数回车,这样相当于连接到 node-3的Impala 集群上,这时候查询各种语句,会检测出结果,但在启动的时候呢,面有哪些属性是看不到的。
2.常见外部命令
这时候看几个比较常见的外部命令,第一个叫 Impala-shell-h,可以帮助查看手册。退出用 exit ,退出之后加一个参数,这里面列举出来了,在启动的时候,可以添加到哪些参数。虽然说参数很多,但是常用的就那么几个。
(1) 第一个叫做 Impala-shell-r 翻译成单词是refresh 刷新元数据。之所以会有刷新的概念,在于Impala 是跟 hive 共用一套元数据,当 hive 元数据发生修改时,需要进行更新维护。如果 hive 添加一个表,表的数据增加变化,就可以更新过来, Impala-shell-r 可以同步更新,接下来做一个简单的操作。启动 Impala-shell-r 里面会显示连接 hive 做元数据的更新。
(2) 但有一个警告可以注意一下,当前的 Impala-shell-r 将被移除到未来版本中,这边会有一个命令,移除掉之后不意味着这 Impala 跟元数据同步。后面会提示一个命令叫做 invalidate metadata,这个方法相当于全量更新,是官方推荐,当下还是可用的。后面的有几个选项比较有意思。
(3) 首先看参数 Impala-shell-i ,Impala 集群当中任何一个服务都可以对外提供服务,如果说不增加任何参数启动,相当于连接到本地,比如说有一特殊需求,就想连接到 node-1 上面的 Impala server 进行查询。再用 shell 适合介绍一个参数叫 Impala-shell-i ,指定主机默认回车发现提示行前的端口和进行查询 show database 有一样的效果,只不过这时候的协调者与 node-1来充当。相当于客户端 shell 可以指定到集群的任何一台机器上,非常方便。
(3)往下看,下面有两个参数,一个是 Impala-shell-f 指定文件的路径,一个是 Impala-shell-o 保存结果到文件中去,类似于 hive 的命令行。准备好一个 Impala 语句,是否能帮助启动执行并且退出。 Impala-shell-f 就可以搞定,后面跟了文件路径,除了支持 Impala-shell-f ,还有 Impala-shell-q ,SQL语句非常类似于 hive 中的-e,-f。
(4)做一个简单的演示,比如说首先来一个-q,后面直接写上 SQL 语句叫 show database 回车,启动的时候会执行后面跟的 SQL 语句,后面执行完成后自动退出了,不会一直停留在交互式中,如果 SQL 比较长,写不下,可以自己编写一个 SQL 语句,var Impala_demo.sql,show database 保存。可以写 SQL 文件,意味着可以把很多条查询,sql 语句放在里面。再执行时不再用-q,而是用-f,指定文件路径,位于机器上能够识别到,也能够执行,非常类似于 hive,这些参数相当于启动 Impala shell 进行相关的添加。如果没有参数,就是原始启动,一个交互式的命令。加入参数可以在启动中变得更加强大,最后一个-o 指保存执行结果到文件当中去,因为在没有加参数的时候,把结果显示在屏幕上面,比如做了一个非常大量的查询,查询的结果之后想把它保留下来,可以用-o 指定一个文件路径,这样就可以搞定。
这是第一块叫做外部命令,外部命令,就是启动的时候添加的参数。
二、Impala-shell 内部命令
1.内部命令
指的是当进入到 shell 命令行之后,执行的语法。关于查询、insert 等属于 SQL 操作。针对 Impala shell 。
2.可执行的语法
(1)第一个,进去之后敲一个 help 会显示出来当前可用的命令有哪些。上面有一些跟 shell 命令行相关的执行计划、历史等等。连接到指定的机器上,下面都的语句叫 undocumented commands,修改表、删除等等。
(2)重点看上面跟 shell 命令行相关的,当不加任何参数连接到集成后会默认到本机 node-3,当登陆到 node-3 又想换一个机器。这时候可以用 connect 进行连接。后面跟上连接的主机名,前提是有 Impala 服务,比如说现在想连接到 node-2上,这时候注意,如果直接回车会出现到下一行,说明命令没有结束,在 shell 当中,一个命令结束的标志,是带上英文分号。回车就从 node-3跳到 node-2,相当于 node-2就是本次查询的协调者。
3.增量刷新和全量刷新
(1)Impala 和 hive 的结构
下面有两个查询的数据的元数据的更新非常重要,第一个叫做增量刷新数据,第二个项全量刷新数据。关于刷新元数据,不得不说 Impala 跟 hive 的结构,如果画成一张图,图右面是 hive metastore,左边是 Impala 自己的 Catalogd 这样的进程,虽然 Impala 自己维护的数据最终相当于将 hive 元数据复制一份,两个元数据共用一份,但这时候涉及到两边同步的问题,在 Impala 做一个数据的修改。这种更新读取到这个方向的更新可以维护到,反过来不可以。比如说在 hive 中发生更新,但是在 Impala 这边不会主动更新,在 hive 中添加一个表,发现这个表没有数据。
(2)解决问题
Impala 提供了两个命令,第一个针对增量刷新数据,表中数据发生变化,只想指定刷新表的数据,refresh 后面跟上数据库名和表名,相当于指定刷新表的数据。相当于 hive 中数据发生变化,但还没有同步过来,这个叫做增量刷新。
另外一个叫做全量刷新,全量刷新的性能消耗比较大,但是当数仓 hive 中涉及到新的数据库或新的数据表时,必须要使用这个命令进行刷新。再用 refresh 肯定不行,比如说那个新创一个数据库,这边没有显示过来,不能用 refresh ,这样就可以完成 Impala 跟元数据之间的同步。充当数据更新的角色,是 Impala Catalogd 服务,主要元数据维护的网关,维护 Impala 和 hive 元数据的同步,这两个刷新可以在适当的场合进行使用。
(4) 退出的时候,用 quit/exit ,后面需要加一个分号,如果不加分号,会认为命令没有结束,会自动换行,这是使用比较多的刷新。
(5)
(4)验证
验证 Impala 和 hive 元数据刷新一不一样,例如,Impala 和 hive ,现在使用默认库 use default,创建一个表 create table t_impala(id int),创建一个表,语法跟 hive 一样。创建表之后,impala 发生变化时,hue 自动更新。说明当 impala 数据发生变化的时候会直接更改 hive 中的元数据,相当于做了一个同步,在里面插入一条数据 insert into table t_impala values(12)。往 impala 表中做一个数据的插入,回车,显示正在执行。插入完成之后结束。录入 select *from,可以发现结果为12,同时 hive 做一个 select 查询也会有数据。因此 Impala 发生变化,hive 会自动同步。
但是反过来,在 hive 中创建一个表 create table t_hive(id int);在下方用 show tables 查看有一个表叫 t_hive,但在 Impala 下方,录入 show tables 发现表没有同步过来。对 invalidate metadata 做一个全量刷新。相当于新增一个表,在 Impala 中刷新,会同步 hive 元数据。如果有变化会更新过来。再写入 show tables 就会更新过来,可以从侧面感受到 Catalogd 服务是维护 Impala 和 hive 之间的元数据的关系。
4.两个结论选项
(1)一个叫 explain 命令,用于 SQL 语句的执行计划,查询计划,读取数据包括数据浏览之间的属性,执行的问题,也可以设定日志级别,因为日志数越高,打印的信息越全,相当于针对 SQL 做一个优化。
(2)另一个叫 profile 命令,打印出详细的执行步骤,执行完 SQL 语句后,显示出结果,什么时候开始的,什么时候结束的,里面是什么查询类型。这是内部命令,跟相关的表、数据库没有关系,是针对 shell 命令行做的,这当中要特别注意的是数据更新,因为在实际开发过程中,涉及到大量的跟 hive 数据同步的过程,如果不能同步,如何去增量更新,如何全量更新,要结合命令具体使用。