Impala介绍
Impala 号称在性能上比Hive高出3~30倍,甚至预言说在将来的某一天可能会超过Hive的使用率而成为Hadoop上最流行的实时计算平台(也许我这里有点曲解Impala专家的意思,但其诱惑的言辞足以令Hadoop迷不禁有蠢蠢欲试的激动)。毕竟Impala也是人写出来的,是否真的如想象中的快,还得靠客观数据来验证。下面就这两个星期对Impala的认识小记一下,供日后翻阅。(请原谅我没有告诉你Hadoop是个啥东东,因为我这里假设你已经听过这头在海量数据的世界驰骋几个岁月的大象,但不一定要求你是大牛)
以下内容是对Cloudera官网中关于Impala文档(主要是《Installing and Using Cloudera Impala》)一些内容的个人理解,欠妥之处还请不吝赐教:
Impala的目的不在于替换现有的MapReduce工具,如Hive,而是提供一个统一的平台用于实时查询。事实上Impala的运行也是依赖Hive的元数据。Impala与其它组件之间的关系如下:

与Hive类似,Impala也可以直接与HDFS和HBase库直接交互。只不过Hive和其它建立在MapReduce上的框架适合需要长时间运行的批处理任务。例如那些批量提取,转化,加载(ETL)类型的Job。而Impala主要用于实时查询。
1.1 Impala组成
1.1.1 State Store
- 对应进程为 statestored (笔者这里使用的Impala版本为0.4,有些版本的statestore进程名可能不是这样叫的)
- 用于协调各个运行impalad的实例之间的信息关系,Impala正是通过这些信息去定位查询请求所要的数据。换句话说,state store的作用主要为跟踪各个impalad实例的位置和状态,让各个impalad实例以集群的方式运行起来。
- 与 HDFS的NameNode不一样,虽然State Store一般只安装一份,但一旦State Store挂掉了,各个impalad实例却仍然会保持集群的方式处理查询请求,只是无法将各自的状态更新到State Store中,如果这个时候新加入一个impalad实例,则新加入的impalad实例不为现有集群中的其他impalad实例所识别(事实上,经笔者测试,如果impalad启动在statestored之后,根本无法正常启动,因为impalad启动时是需要指定statestored的主机信息的)。然而,State Store一旦重启,则所有State Store所服务的各个impalad实例(包括state store挂掉期间新加入的impalad实例)的信息(由impalad实例发给state store)都会进行重建。
1.1.2 Impalad
- 对应进程为 impalad(核心进程,数据的计算就靠这个进程来执行)
- 该进程应运行在DataNode机器上(建议每个DataNode机器运行一个impalad,官方的意思似乎这种建议是必须的),每个impalad实例会接收、规划并调节来自ODBC或Impala Shell等客户端的查询。每个impalad实例会充当一个Worker,处理由其它impalad实例分发出来的查询片段(query fragments)。客户端可以随便连接到任意一个impalad实例,被连接的impalad实例将充当本次查询的协调者(Ordinator),将查询分发给集群内的其它impalad实例进行并行计算。当所有计算完毕时,其它各个impalad实例将会把各自的计算结果发送给充当 Ordinator的impalad实例,由这个Ordinator实例把结果返回给客户端。每个impalad进程可以处理多个并发请求。
1.1.3 Impala shell
- 这是一个客户端工具
- 该客户端工具提供一个交互接口,供使用者发起数据查询或管理任务,比如连接到impalad。这些查询请求会传给ODBC这个标准查询接口。说白了,就是一个命令行客户端。日后你便是通过它来查询数据的。
[root@hadoop-2 ~]# impala-shell -h 查看有哪些参数
[root@hadoop-2 ~]# impala-shell -v 查看impala的版本号
[root@hadoop-2 ~]# impala-shell -i '192.168.56.121:21000' -r -q "select * from test.t1" -B --output_delimiter="\t" -o result.txt
---test代表数据库 t1代表数据库中的表;
使用impala导出数据;
impala数据的导入:
1.首先将源文件导入到hdfs上;
2.load该文件;
impala创建表语句:
CREATE TABLE MSA_HTTP_ERROR_ANAY (
HTTP_HOST STRING,
HTTP_REQ_RATE FLOAT,
HTTP_RESP_RATE FLOAT
) PARTITIONED BY (time BIGINT) STORED AS PARQUET LOCATION '/impalaTables/MSA_HTTP_ERROR_ANAY';
对于一件事情,往往超过我们的想象,自信、坚持,勇往直前!
参与者:Rainbow Gu
地址:南都
***********************************************
浙公网安备 33010602011771号