Impala与HBase整合测试
说明:
1、测试思路:
使用sqoop将测试数据从关系数据库mysql导入到hbase中;接着进行Impala与HBase的整合测试;最后,如果环境允许,对比关系型数据库进行性能测试。
2、测试环境:
Cloudera5.3.0版本
IP地址 | 主机名 | 说明 |
172.16.30.2 | h1 | 监控节点、mysql数据库 |
172.16.30.3 | h2 | NAMENODE、Hive、HBase等服务 |
172.16.30.4 | h3 | Sqoop、Impala服务 |
数据准备:
1、 创建数据库bigdata
2、 创建测试表
客户基本信息表:
客户交易明细表:
测试数据:
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
注意:
1、 如果没有操作hdfs的权限,添加环境变量HADOOP_USER_NAME=hdfs到/etc/profile
2、 Rowkey不能为null;如果rowkey有重复,加载到HBase中只有一条记录
整合过程:
使用HBase中已创建的表(custom_info、custom_trans)
1、 在Hive中创建外部表
WITHSERDEPROPERTIES选项中指定Hive外部表字段到HBase列的映射,其中“:key”对应于HBase中的RowKey,名称为“user_id”,其余的就是列簇info中的列名。最后在TBLPROPERTIES中指定了HBase中要进行映射的表名。
注意:由于在使用sqoop创建hbase表名为大写,创建外部表默认只识别小写表名,导致报错!包括列族的大小写!
2、 在Impala中同步元数据
Impala共享Hive的Metastore,这时需要同步元数据,可以通过在Impala Shell中执行同步命令。
3、 在Impala中查看HBase中表信息:
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
由于Mysql中数据库字符集的设置,导致这里的查询出现乱码。
OK,通过上面几步就可以使用Impala查询HBase中的表了。
性能测试
由于个人PC资源限制(8GB内存、128GB SSD),无法测试在数据量大的情况下,Impala与关系数据库的性能对比,以及Impala与Spark的性能对比。后续将简单给出测试思路。