如何将现有/旧数据从hive外部表加载到新的Hbase表?

时间:2018-01-24 15:07:58

标签: hive hbase

我有一个使用以下属性创建的Hive表:

create external table statdata(uid int, user string, loc string, locweather int)
stored as textfile
row format delimited
fields terminated by ','
location '/hive/data/weatherstats’;

Hive表包含我手动插入的5行。

hive> select * from statdata;
OK
1 john newyork 33
2 rob london 32
3 stan delhi 45
4 fred tokyo 38
5 phil beijing 47

我创建了一个新的HBase表:只有一个列族的hbstat:天气如下:

create 'hbstat', 'weather'

我想从我的hive表中提取现有数据:statdata到新的hbase表中:hbstat 可以选择使用Hbase storagehandler将Hive的新插入映射到Hbase,如下所示:

CREATE TABLE foo(rowkey STRING, a STRING, b STRING)
STORED BY ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler’
WITH SERDEPROPERTIES (‘hbase.columns.mapping’ = ‘:key,f:c1,f:c2’)
TBLPROPERTIES (‘hbase.table.name’ = ‘bar’);

但这适用于插入hive表时的数据,并且同时也在hbase上反映在hbase中。 有没有办法将hive表中的旧/现有数据转换为新创建的Hbase表?

1 个答案:

答案 0 :(得分:0)

我将为您提供一个简单的解决方案,您可以分两步完成:

I- 首先:使用插入命令将表格'Hive'中的数据导出到HDFS

hive> INSERT OVERWRITE DIRECTORY '/path_to_hdfs_dir/hdfs_out' SELECT * FROM statdata;

您可以通过执行以下命令来可视化name_of_your_file:

hive> dfs -ls /path_to_hdfs_dir/hdfs_out/; 

注意: name_of_your_file必须是这样的:00000_0

II- :使用 Importtsv 命令将数据从HDFS导入Hbase表

/opt/ibm/biginsights/hbase/bin/hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=',' -Dimporttsv.columns=HBASE_ROW_KEY,weather:user,weather:loc,weather:locweather hbstat /path_to_hdfs_dir/hdfs_out/name_of_your_file

注意: '/ opt / ibm / biginsights / hbase / bin / hbase'路径在哪里是我的hbase shell。

相关问题