Impala之加载HBase数据

        Impala如何加载HBase数据?本文将为大家进行详细介绍Impala加载HBase数据的步骤。


        第一步:HBase创建表(或选择已有表)

        HBase shell命令行执行命令:

create 'impala_hbase_test_table', {NAME => 'f', VERSION => 3, COMPRESSION => 'SNAPPY'}
        如图所示:


        第二步:HBase表存入数据

        利用Java API往HBase写入数据,示例代码如下:

					int j = 0;
					for (int i = 0; i < 10000; i++) {
						Random random = new Random();

						Hashtable<String, String> pColumns = new Hashtable<String, String>();
						pColumns.put("dn", "dn" + random.nextInt(100));
						pColumns.put("fn", "fn" + random.nextInt(100));

						try {
							HBaseUtil.postBasic("impala_hbase_test_table",
									this.getName() + j++, "f", pColumns, null);
						} catch (Exception e2) {
							// TODO Auto-generated catch block
							e2.printStackTrace();
						}
					}
        其中HBaseUtil的postBasic()方法为HBase Java API入库操作,写入的表为impala_hbase_test_table,rowkey为线程名加递增数,列簇为f,写入的列为dn、fn,值分别为列名加随机数。

        第三步:Hive创建Database,并使用

        在Hive Shell命令行,执行Database创建及使用命令,如下图所示:


        第四步:将HBase数据加载到Hive

        在Hive Shell命令行执行如下命令:

CREATE EXTERNAL TABLE impala_hbase(
rk string,
un tinyint,
dn string,
fn string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.hbase.HBaseSerDe'
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key, f:un, f:dn, f:fn")
TBLPROPERTIES("hbase.table.name" = "impala_hbase_test_table");
        如下图所示:


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

        第五步:Impala与Hive进行元数据同步

        在Impala Shell命令行,执行操作INVALIDATE METADATA;

        如下图所示:


        第六步:Impala切换到与Hive相同的DataBase,进行数据验证

        相关命令如下图所示:

        1、Impala切换DataBase


        2、Impala验证数据


        3、Hive验证数据


        最终,10000条数据在Hive与Impala中均能被查询到,证明Impala加载HBase数据成功!


        但是,这里有个问题,我们发现,即便是仅有1万条数据,Impala的count也比Hive的count耗时小的多,前者为1.28s,后者为81.055s,那么是不是意味着Impala性能远远好于Hive呢?后续我会通过实际测试来探究这个疑问。



  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值