在Hive表中支持HBase操作

本文介绍如何在非Kerberos及Kerberos环境下进行HBase与Hive的集成部署,包括必要的jar包复制、配置文件修改步骤,并提供具体实例说明。

非Kerberos环境

环境部署

  1. 将HBase Master/lib下的一下jar包复制到到hiveserver/lib下:
root@hzadg-mammut-platform7:/usr/ndp/current/hive_server2/lib/hive-jars# ls -alh
total 14M
drwxr-xr-x 2 root root   4.0K Apr 20 10:38 .
drwxr-xr-x 5 hive hadoop  12K Apr 20 10:40 ..
-rw-r--r-- 1 root root   1.3M Apr 20 10:09 hbase-client-1.2.6.jar
-rw-r--r-- 1 root root   568K Apr 20 10:09 hbase-common-1.2.6.jar
-rw-r--r-- 1 root root    99K Apr 20 10:09 hbase-hadoop2-compat-1.2.6.jar
-rw-r--r-- 1 root root    37K Apr 20 10:09 hbase-hadoop-compat-1.2.6.jar
-rw-r--r-- 1 root root   4.2M Apr 20 10:09 hbase-protocol-1.2.6.jar
-rw-r--r-- 1 root root   4.0M Apr 20 10:09 hbase-server-1.2.6.jar
-rw-r--r-- 1 root root   1.5M Apr 20 10:10 htrace-core-3.1.0-incubating.jar
-rw-r--r-- 1 root root    81K Apr 20 10:10 metrics-core-2.2.0.jar
-rw-r--r-- 1 root root   1.7M Apr 20 10:10 netty-all-4.0.23.Final.jar
  1. 在hiveserver的hive-site.xml中添加如下配置:
    <property>
      <name>hbase.zookeeper.quorum</name>
      <value>hzadg-mammut-platform5.server.163.org,hzadg-mammut-platform7.server.163.org,hzadg-mammut-platform8.server.163.org</value>
    </property>
    <property>
      <name>zookeeper.znode.parent</name>
      <value>/hbase-unsecure</value>
    </property>
  1. 重启hiveserver;

在Hive中创建HBase识别的表

CREATE TABLE hbase_table_1(key int, value string) 
  STORED BY'org.apache.hadoop.hive.hbase.HBaseStorageHandler' 
WITH SERDEPROPERTIES("hbase.columns.mapping" = ":key,cf1:val") 
TBLPROPERTIES ("hbase.table.name"= "test_hive", "hbase.mapred.output.outputtable" ="test_hive");

use test;
CREATE TABLE t1 (x INT, y STRING);
INSERT INTO t1 VALUES (1, 'one'), (2, 'two'), (3, 'three');
INSERT OVERWRITE TABLE hbase_table_1  SELECT * FROM test.t1 WHERE x=1;


hbase(main):007:0> scan 'test_hive'
ROW                                                          COLUMN+CELL
 1                                                           column=cf1:val, timestamp=1524193916424, value=one
 2                                                           column=cf1:val, timestamp=1524193916424, value=two
 3                                                           column=cf1:val, timestamp=1524193916424, value=three
3 row(s) in 0.0950 seconds

注意:
* hbase.table.name参数是可选的,是Hbase可识别的名字,如果不设置则和Hive表名一致;
* 在Hive中创建的和Hbase整合的表不支持load data导入数据,需要在Hive中创建中间表导入数据后采用insert方式导入数据。

Kerberos环境

部署

  1. 复制hbasemater中的jar至hiveserver/lib下;
  2. 在hiveserver的hive-site中修改如下:
# 更改配置项
hbase.coprocessor.region.classes=org.apache.hadoop.hbase.security.token.TokenProvider,org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint


# 删除配置项
<property>
    <name>hbase.coprocessor.master.classes</name>
    <value>org.apache.hadoop.hbase.security.access.AccessController</value>
</property>
<property>
    <name>hbase.coprocessor.regionserver.classes</name>
    <value>org.apache.hadoop.hbase.security.access.AccessController</value>
</property>
  1. 重启hiveserver;

参考:
* https://blog.youkuaiyun.com/hqwang4/article/details/77892683?utm_source=5ibc.net&utm_medium=referral
* https://www.cnblogs.com/skyl/p/4849163.html

### Flink 中 Hive 维度HBase 维度的区别及使用场景 #### 1. 数据存储结构差异 Hive 是一种基于 Hadoop 的数据仓库工具,主要用于批量处理大规模静态数据集。其维度通常以文件形式存储在分布式文件系统(如 HDFS)上,并通过 SQL 查询接口访问[^1]。而 HBase 是一个分布式的 NoSQL 数据库,专为高并发、低延迟的随机读写设计,适合用于频繁更新的小规模记录存储[^2]。 #### 2. 实时性支持能力 由于 Hive 基于批处理架构,在实时查询方面存在一定的延时瓶颈。当 Kafka 流数据需要与最新的 Hive 动态维信息关联时,早期版本的 Flink 可能无法及时获取最新更新的数据[^3]。相比之下,HBase 提供了更强的实时性和一致性保障,能够快速响应流式计算的需求,尤其是在涉及高频次修改的操作场景下现优异[^4]。 #### 3. 开发复杂度对比 对于熟悉传统关系型数据库或者大数据生态系统的开发者而言,利用 Flink-SQL 对接 Hive 更加直观简便,因为它延续了标准 SQL 的语法风格。然而,如果业务逻辑较为复杂,比如涉及到多种不同类型的转换规则定义,则可能需要用到像 Scala 这样的编程语言来编写自定义函数或类,此时对接 HBase 就显得稍微繁琐一些。 #### 4. 应用案例分析 - **Hive 维度适用场合** - 当前大部分离线数据分析任务都可以采用这种方式完成; - 如果源数据量较大且变动频率较低的话,那么选择 Hive 作为外部依赖会更加经济高效。 - **HBase 维度推荐领域** - 需求侧重于毫秒级反馈速度的应用程序; - 用户行为跟踪、广告精准投放等领域经常要用到这种即时性强的技术方案。 ```python from pyflink.dataset import ExecutionEnvironment from pyflink.table import StreamTableEnvironment, DataTypes from pyflink.table.descriptors import Schema, OldCsv, FileSystem env = ExecutionEnvironment.get_execution_environment() t_env = StreamTableEnvironment.create(env) # Example of connecting to a Hive table using PyFlink t_env.connect(FileSystem().path('/path/to/hive/table')) \ .with_format(OldCsv() \ .field('column_name', DataTypes.STRING())) \ .with_schema(Schema() \ .field('column_name', DataTypes.STRING())) \ .create_temporary_table('hive_table') result = t_env.sql_query("SELECT * FROM hive_table") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值