【问题标题】:How to load the existing/older data from hive external table to a new Hbase table?如何将现有/旧数据从 hive 外部表加载到新的 Hbase 表?
【发布时间】:2018-07-03 16:29:10
【问题描述】:

我创建了一个具有以下属性的 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,只有一个列族:weather,如下所示:

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 上。 有没有办法从 hive 表中获取旧的/现有的数据到新创建的 Hbase 表中?

【问题讨论】:

    标签: hive hbase


    【解决方案1】:

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

    I- first :使用 insert 命令将数据从表“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- second:使用 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 所在的路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-13
      • 2017-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-27
      • 1970-01-01
      相关资源
      最近更新 更多