从配置单元加载Hbase表

时间:2018-06-05 20:09:40

标签: hadoop hive hbase

我正在尝试从hive表加载hbase表,因为我使用以下方法,如果我在hbase表中只有单列系列,它可以正常工作,但是如果我有多个系列则会抛出错误。

方法

源表

CREATE EXTERNAL TABLE temp.employee_orc(id String, name String, Age int)
STORED AS ORC
LOCATION '/tmp/employee_orc/table';

使用Hbase Serde创建Hive表

CREATE TABLE temp.employee_hbase(id String, name String, age int)
    STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    WITH SERDEPROPERTIES ('hbase.columns.mapping' = ':key,emp:name,emp:Age')
    TBLPROPERTIES("hbase.table.name" = "bda:employee_hbase", "hfile.family.path"="/tmp/employee_hbase/emp", "hive.hbase.generatehfiles"="true");

导出hbase文件

SET hive.hbase.generatehfiles=true;
INSERT OVERWRITE TABLE temp.employee_hbase SELECT DISTINCT id, name, Age FROM temp.employee_orc CLUSTER BY id;

加载hbase表

export HADOOP_CLASSPATH=`hbase classpath`
hadoop jar /usr/hdp/current/hbase-client/lib/hbase-server.jar completebulkload /tmp/employee_hbase/ 'bda:employee_hbase'

错误 如果我在Hbase表中有多个列族,

,我会收到以下错误
  

java.lang.RuntimeException:关闭运算符时发生Hive运行时错误:java.io.IOException:在hdfs中找到多个系列目录:// hadoopdev/apps/hive/warehouse/temp.db/employee_hbase/_temporary/0/_temporary / attempt_1527799542731_1180_r_000000_0

如果没有这种方法,还有另一种加载Hbase表的方法吗?

2 个答案:

答案 0 :(得分:0)

从hive到hbase的批量加载,目标表只能有一个列族。

bulk load of hbase

答案 1 :(得分:0)

  1. 您可以使用支持多列族的 hbase bulkload hbase_bulkload
  2. 或者您可以为每个列族使用多个 hive 表