Hive 关联 HBase

创建 Hive 表时关联 Hive 存储

例:

  • Hive 创建测试 DB
1
2
-- 创建测试 DB
create database t_hbase_db;
  • HBase 创建同名 namespace
1
cd $HBASE_HOME && ./bin/hbase shell
1
create_namespace 't_hbase_db'
  • Hive 创建测试表
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
-- 切换 DB
use t_hbase_db;
-- 创建测试表
create table test_hive_user_info(
user_id string comment '用户id',
user_name string comment '用户名',
user_gender string comment '性别',
user_age int comment '年龄',
province string comment '省份',
city string comment '城市'
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,
base_info:user_name,
base_info:gender,
base_info:age,
extra_info:province,
extra_info:city")
TBLPROPERTIES ("hbase.table.name" = "t_hbase_db:test_hive_user_info",
"hbase.mapred.output.outputtable" = "t_hbase_db:test_hive_user_info");

说明

TBLPROPERTIES

  • hbase.table.name:声明 HBase 表名,为可选属性默认与 Hive 的表名相同
  • hbase.mapred.output.outputtable:指定插入数据时写入的表,如果以后需要往该表插入数据就需要指定该值

SERDEPROPERTIES

  • 建立 hive 和 hbase 的映射关系
hive hbase
user_id :key,对应 hbase 的 rwokey
user_name base_info:user_name,对应 hbase base_info 列族的 user_name 字段
user_gender base_info:gender
user_age base_info:age
province extra_info:province,对应 hbase extra_info 列族的 province,对应 字段
city extra_info:city

常见报错及处理

关联 hive insert 报错

报错信息

1
Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMa

处理

1
vi $HADOOP_HOME/etc/hadoop/mapred-site.xml
  • 增加如下配置
1
2
3
4
5
<property>
    <name>mapreduce.application.classpath</name>
    <!-- 路径注意需改为 hadoop 路径-->
    <value>/opt/hadoop/hadoop-3.1.0/share/hadoop/mapreduce/*,/opt/hadoop/hadoop-3.1.0/share/hadoop/mapreduce/lib/*,/opt/hadoop/hadoop-3.1.0/share/hadoop/common/*,/opt/hadoop/hadoop-3.1.0/share/hadoop/common/lib/*,/opt/hadoop/hadoop-3.1.0/share/hadoop/yarn/*,/opt/hadoop/hadoop-3.1.0/share/hadoop/yarn/lib/*,/opt/hadoop/hadoop-3.1.0/share/hadoop/hdfs/*,/opt/hadoop/hadoop-3.1.0/share/hadoop/hdfs/lib/*</value>
</property>

Hive(3.1.0) HBase(2.0.2) insert into select 报错

报错信息

1
Error: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.ObjectMapper

问题说明

  • jackson 包版本不一致,重写时报错

问题处理

  • Hive 更改配置,指定 Hive jackson 使用 HBase lib 下的包
1
vi $HIVE_HOME/conf/hive-site.xml
1
2
3
4
5
<!-- 增加配置,指定使用 hbase lib 下的 jackson 相关的jar 包 -->
<property>
  <name>hive.aux.jars.path</name>
  <value>file:///opt/hadoop/hbase-2.0.2/lib/jackson-core-2.9.2.jar,file:///opt/hadoop/hbase-2.0.2/lib/jackson-databind-2.9.2.jar,file:///opt/hadoop/hbase-2.0.2/lib/jackson-annotations-2.9.0.jar</value>
</property>