淘先锋技术网

首页 1 2 3 4 5 6 7

hive数据导入到Hbase中有两种方式。

方式一 —— 内部表映射

适用于数据量不是特别大的场景。
首先说一下Hbase数据到hive内部表的映射,代码如下:

create table stu_info{
  key string comment '主键',
  name string comment '名字',
  age int comment'年龄'
}
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'   
WITH SERDEPROPERTIES ("hbase.columns.mapping" =":key,info:name,info:name")   
TBLPROPERTIES("hbase.table.name" = "stu"); 

这里解释一下每行代码的含义:

  1. 首先是创建hive的内部表,这个就不用多说了。
  2. stored by指定数据的存储方式
  3. SERDEPROPERTIES:表示字段映射,对应hive中的表字段的顺序,需要注意的是 :key指的是Hbase中的rowdy,hive表中要有一个key字段与之对应,否则会报错的。
  4. TBLPROPERTIES:表示表名映射,指定需要映射的Hbase表名。

具体的映射规则

  1. hbase中的空cell在hive中会补null
  2. hive和hbase中不匹配的字段会补null
  3. Bytes类型的数据,建hive表示加#b
  4. hive内部表的数据,由hive自己管理,因此删除hive表,则对应的Hbase表也会被删除。

方式二 —— 生成hfile,通过bulkload导入到hbase

适用于数据量较大的场景。
具体的操作步骤如下:

  1. 启动hive,添加需要的jar包
add jar /lib/hive-hbase-handler-2.3.3.jar;
add jar /lib/hbase-protocol-1.1.1.jar;
add jar /lib/hbase-common-1.1.1.jar;
add jar /lib/hbase-client-1.1.1.jar;
add jar /lib/hbase-server-1.1.1.jar;
  1. 创建hive表
create table stu_info{
  name string comment '名字',
  age int comment'年龄'
}
STORED AS
INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.hbase.HiveHFileOutputFormat'
TBLPROPERTIES ('hfile.family.path' = '/user/hive-hbase/info');

此处建表时需要注意,输出格式一定要为:HiveHFileOutputFormat。
/user/hive-hbase/info是生成的hfile在HDFS上的路径,其中info为Hbase的family。
可以向hive表中插入数据,然后查看HDFS的该目录下是否有文件

hdfs dfs -ls /user/hive-hbase/info
  1. 通过bulkload导入到hbase
    创建对应的hbase表,其中info为family,应和上一步对应

执行bulkhead,将数据导入到hbase中

可以连接Hbase,查看数据有没有同步过来。