使用Impala和Hive查询HBase

Posted by Kaka Blog on July 23, 2019

准备HBase测试表

测试表如下:

hbase(main):003:0> scan 'student'
ROW                              COLUMN+CELL                                                                                
 001                             column=name:, timestamp=1539585704844, value=xiaomi                                        
 001                             column=name:history, timestamp=1540620866603, value=xiao                                   
 001                             column=number:, timestamp=1539585873280, value=1234566                                     
 001                             column=number:age, timestamp=1541039468016, value=13

将HBase表映射到Hive

输入hive命令后,创建一个指向HBase表的Hive表:

hive> CREATE EXTERNAL TABLE IF NOT EXISTS student(
id string,
name string,
age int) 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' 
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,name:,number:age")
TBLPROPERTIES("hbase.table.name" = "student");
  • 建表或映射表的时候如果没有指定:key则第一个列默认就是行键
  • 通过Hive的Map数据类型映射HBase表,这样每行都可以有不同的列组合,列名与map中的key对应,列值与map中的value对应

测试

使用Hive命令查询

hive> select * from student;
OK
001	NULL	13
Time taken: 0.897 seconds, Fetched: 1 row(s)

注意:不支持update、delete操作,会报Attempt to do update or delete using transaction manager that does not support these operations错误

使用Impala查询

使用Impala-shell查询:

[398.cdh.slave1:21000] > select * from student;
Query: select * from student
Query submitted at: 2019-07-23 14:44:14 (Coordinator: http://398.cdh.slave1:25000)
Query progress can be monitored at: http://398.cdh.slave1:25000/query_plan?query_id=7e4dd4f5bee2168e:3ed69b3100000000
+-----+------+-----+
| id  | name | age |
+-----+------+-----+
| 001 | NULL | 13  |
+-----+------+-----+
Fetched 1 row(s) in 0.98s

使用Hue的Impala界面查询:

img

  • Hue是cdh专门的一套web管理器,它包括3个部分hue ui,hue server,hue db。hue提供所有的cdh组件的shell界面的接口。

注意:支持insert操作,不支持update、delete操作,会报AnalysisException: Impala does not support modifying a non-Kudu table错误。

Impala与Hive的比较

Impala与Hive的关系

Impala与Hive都是构建在Hadoop之上的数据查询工具各有不同的侧重适应面,但从客户端使用来看Impala与Hive有很多的共同之处,如数据表元数据、ODBC/JDBC驱动、SQL语法、灵活的文件格式、存储资源池等。

区别

Hive: 依赖于MapReduce执行框架,执行计划分成map->shuffle->reduce->map->shuffle->reduce…的模型。如果一个Query会被编译成多轮MapReduce,则会有更多的写中间结果。由于MapReduce执行框架本身的特点,过多的中间过程会增加整个Query的执行时间。

Impala: 把执行计划表现为一棵完整的执行计划树,可以更自然地分发执行计划到各个Impalad执行查询,而不用像Hive那样把它组合成管道型的map->reduce模式,以此保证Impala有更好的并发性和避免不必要的中间sort与shuffle。

Hive适合于长时间的批处理查询分析,而Impala适合于实时交互式SQL查询,Impala给数据分析人员提供了快速实验、验证想法的大数据分析工具。可以先使用hive进行数据转换处理,之后使用Impala在Hive处理后的结果数据集上进行快速的数据分析。

参考