impala 相关

1.1 Hive 
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。但是在转换为MapReduce的计算过程中,计算速度比较慢,适合于非实时性的要求的计算。 
1.2 impala 
impala是Cloudera公司开发的一套大数据计算引擎,它在功能作用上类似hive,但是impala的内部计算模式并没有采用Hive+MapReduce批处理模式,而是通过使用与商用并行关系数据库中类似的分布式查询引擎,impala是基于内存计算,对内存的要求相比于hive+MapReduce模式会更高些。在对大数据量查询时,impala会比hive更能及时的响应返回结果。 据说Impala在性能上比Hive高出3~30倍。 
所以Hive适合于长时间的批处理查询分析,而Impala适合于实时交互式SQL查询,Impala给数据分析人员提供了快速实验、验证想法的大数据分析工具。 
1.3 Spark SQL 
sparkSQL 是spark处理结构化数据的库,它是一种新的计算引擎,它在功能作用上类似hive和impala。spark扩充了的MapReduce计算模型,MapReduce通常将中间结果放到磁盘上,所以与磁盘交互比较多,性能上相对于差些,而Spark是基于内存并行大数据框架,中间结果通常存放在内存,相比于MapReduce来说,迭代数据计算的Spark效率会更高些。 
据说在计算性能上比hive高出10~100倍。 
2. 流式计算组件

2.1 Strom 
Storm是一个流式计算处理框架,拥有低延迟、高性能、分布式、可扩展、容错等特性,可以保证消息不丢失,消息处理严格有序。通俗讲,storm是处理消息源,来一条消息数据,处理一条数据,实现实时响应计算结果,支持亚秒级响应,正真意义上流计算实时响应。 
2.2 Spark streaming 
Spark Streaming类似于 Storm,也是一个流式计算处理框架,用于流式数据的处理。有高吞吐量和容错能力强这两个特点。通俗讲,Spark Streaming是实时处理小批量数据, 
Spark Streaming接收消息源的一条消息,不像Strom一样及时处理了,而是当消息数据积累达到一定量的时候再一并处理消息数据,实现秒级响应。 
如果对实时性要求非常高的,例如需要亚秒级响应结果的场景 ,建议的使用Strom,而 
如果对于实时性不是非常严格,例如能在秒级内能响应结果的场景,可以使用Spark streaming。

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

impala 相关


2、  创建测试表

    客户基本信息表:

impala 相关

    客户交易明细表:

impala 相关

    测试数据:

impala 相关



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

impala 相关注意:

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

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


整合过程:

使用HBase中已创建的表(custom_infocustom_trans

1、  Hive中创建外部表

impala 相关

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

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


2、  Impala中同步元数据

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

impala 相关


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

impala 相关

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 相关

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


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