登 录
注 册
< 大 数 据
Flink
Hadoop
Spark
Hive
HBase
Kafka
其他框架
HBase读写流程
多租户环境
HBase HA
HBase预分区
RowKey设计
HBase优化
HBase数据删除与Split
HBase PythonAPI
HBase存储结构
HBased对接Hive
热门推荐>>>
中台架构
中台建设与架构
Hadoop
源码分析-NN启动(三)
Linux
Nginx高可用
Python
数据导出工具
Flink
3分钟搭建Flink SQL测试环境
Kafka
Kafka对接Flume
深度学习
卷积神经网络
数据结构与算法
选择合适的算法
MySQL
数据备份恢复
计算机系统
信号量同步线程
Hive
Hive调优参数大全
其他框架
Azkaban Flow1.0与2.0
ClickHouse
表引擎-其他类型
技术成长
最好的职业建议
精选书单
技术成长书单—机器学习
技术资讯
数据在线:计算将成为公共服务
开发工具
IntelliJ IDEA 20年发展回顾(二)
系统工具
Mac命令行工具
虚拟化
内存虚拟化概述
云原生
云原生构建现代化应用
云服务
一文搞懂公有云、私有云...
Java
Spring Boot依赖注入与Runners
Go
Go函数与方法
SQL
SQL模板
安全常识
一文读懂SSO
当前位置:
首页
>>
HBase
>>
HBased对接Hive
HBased对接Hive
2021-12-25 13:47:44 星期六 阅读:1043
因为Hive要读取HBase数据,其实是作为HBase的一个客户端去读取的,而HBase的客户端需要知道ZK链接才能连接。 所以需要在Hive的配置文件hive-site.xml里添加zk信息 ```xml <property> <name>hive.zookeeper.quorum</name> <value>zkhost1,zkhost2,zkhost3</value> <description>The list of ZooKeeper servers to talk to. This is only needed for read/write locks.</description> </property> <property> <name>hive.zookeeper.client.port</name> <value>2181</value> <description>The port of ZooKeeper servers to talk to. This is only needed for read/write locks.</description> </property> ``` #### 创建Hive内部表并关联HBase 如果需要关联表在Hive和HBase中都不存在,则可以使用Hive内部表的方式进行关联 ```sql #Hive建表语句 CREATE TABLE hive_hbase_emp_table( empno int, ename string, job string, mgr int, hiredate string, sal double, comm double, deptno int) STORED BY "org.apache.hadoop.hive.hbase.HBaseStorageHandler" WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:ename,info:job,info:mgr,info:hiredate,info:sal,info:co mm,info:deptno") TBLPROPERTIES ("hbase.table.name" = "hbase_emp_table"); ``` 创建完后,可以分别进入 Hive 和 HBase 查看,都生成了对应的表。 注意:如果创建失败,报如下错误 *FAILED: Execution Error, reutrn code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org.apache.hadoop.hbase.HTableDescriptor.addFamily* 可能原因是HBase版本与Hive版本不兼容,需要重新编译Hive自带的Jar包:hive-hbase-handler-1.2.2.jar。 ##### 往Hive表里插入数据 注意:不能使用load的方式往表里插入数据。因为load是直接将orc或者text文件放到hdfs目录下,而hbase能识别的文件格式是HFile。所以只能使用insert的方式往hive表里插入数据。插入的数据不是放到hive数仓目录下,而是存储到了hbase的region下。 `INSERT INTO hive_hbase_emp_table select * from emp;` #### 创建Hive外部表并关联HBase hbase已经存在表,且已经有历史数据。hive需要关联hbase表时,必须是hive外部表才可以。 ``` CREATE EXTERNAL TABLE relevance_hbase_emp( empno int, ename string, job string, mgr int, hiredate string, sal double, comm double, deptno int) STORED BY "org.apache.hadoop.hive.hbase.HBaseStorageHandler" WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:ename,info:job,info:mgr,info:hiredate,info:sal,info:comm,info:deptno") TBLPROPERTIES ("hbase.table.name" = "hbase_emp_table"); ```