ImpalaHBase整合测试

说明:

1、测试思路:

使用sqoop将测试数据从关系数据库mysql导入到hbase中;接着进行ImpalaHBase的整合测试;最后,如果环境允许,对比关系型数据库进行性能测试。

2、测试环境:

    Cloudera5.3.0版本


IP地址 主机名 说明
172.16.30.2 h1 监控节点、mysql数据库
172.16.30.3 h2 NAMENODEHiveHBase等服务
172.16.30.4 h3 SqoopImpala服务


数据准备:


1、  创建数据库bigdata

wKioL1VNyVXD8oPQAAClQtWyfsc671.jpg


2、  创建测试表

    客户基本信息表:

wKioL1VNyYbgwpzEAADZKagxIgw306.jpg

    客户交易明细表:

wKiom1VNyDfAm6_5AACVvNdGMUI741.jpg

    测试数据:

Impala使用笔记(一)_第1张图片



3、  使用sqoop将数据从关系数据库(mysql)加载到HBase

sqoop import --connect jdbc:mysql://h1:3306/bigdata--username root --password mysql -m 1 --table custom_info --hbase-create-table--hbase-table custom_info --column-family customInfo --hbase-row-key custom_id

wKioL1VNyg3TxEBxAAD_wqUkl-k653.jpg注意:

    1、  如果没有操作hdfs的权限,添加环境变量HADOOP_USER_NAME=hdfs/etc/profile

    2、  Rowkey不能为null;如果rowkey有重复,加载到HBase中只有一条记录


整合过程:

使用HBase中已创建的表(custom_infocustom_trans

1、  Hive中创建外部表

wKioL1VNyomxRbwqAAGiKquNAdY800.jpg

WITHSERDEPROPERTIES选项中指定Hive外部表字段到HBase列的映射,其中“:key”对应于HBase中的RowKey,名称为“user_id”,其余的就是列簇info中的列名。最后在TBLPROPERTIES中指定了HBase中要进行映射的表名。

注意:由于在使用sqoop创建hbase表名为大写,创建外部表默认只识别小写表名,导致报错!包括列族的大小写!


2、  Impala中同步元数据

Impala共享HiveMetastore,这时需要同步元数据,可以通过在Impala Shell中执行同步命令。

wKioL1VNyuLS2Z9DAACOH60Mmws972.jpg


3、  Impala中查看HBase中表信息:

Impala使用笔记(一)_第2张图片

4、  查询HBase中的数据:

selectb.custom_id,b.custom_name,b.custom_code,b.sex,b.addr,sum(cast(a.trans_amt asDOUBLE)) from custom_trans a left join custom_info b on a.custom_id=b.custom_idgroup by b.custom_id,b.custom_name,b.custom_code,b.sex,b.addr;

注意:hive有隐式转换的功能,可以直接sum(string字段)(如果是数字型的值),impala的话需要手动cast

Impala使用笔记(一)_第3张图片

    由于Mysql中数据库字符集的设置,导致这里的查询出现乱码。


OK,通过上面几步就可以使用Impala查询HBase中的表了。


性能测试

由于个人PC资源限制(8GB内存、128GB SSD),无法测试在数据量大的情况下,Impala与关系数据库的性能对比,以及ImpalaSpark的性能对比。后续将简单给出测试思路。