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 pColumns = new Hashtable();
						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呢?后续我会通过实际测试来探究这个疑问。



你可能感兴趣的:(Impala)