作者 | 广   责编 | 张文

头图 | CSDN 下载自视觉中国

HBase 虽然可以存储数亿或数十亿行数据,但是对于数据分析来说不太友好,它只提供了简单的基于 Key 值的快速查询能力,没法进行大量的条件查询。

现有 HBase 的查询工具有很多如:Hive、Tez、Impala、Shark/Spark、Phoenix 等。今天主要说 Hive。

Hive 方便地提供了 Hive QL 的接口来简化 MapReduce 的使用, 而 HBase 提供了低延迟的数据库访问。如果两者结合,可以利用 MapReduce 的优势针对 HBase 存储的大量内容进行离线的计算和分析。

Hive 和 HBase 通信原理

Hive 与 HBase 整合的实现是利用两者本身对外的 API 接口互相通信来完成的。这种相互通信是通过 $HIVE_HOME/lib/hive-hbase-handler-{hive.version}.jar 工具类实现的。

通过 HBaseStorageHandler,Hive 可以获取到 Hive 表所对应的 HBase 表名、列簇和列、InputFormat、OutputFormat 类、创建和删除 HBase 表等。

Hive 访问 HBase 中表数据,实质上是通过 MapReduce 读取 HBase 表数据,其实现是在 MR 中,使用 HiveHBaseTableInputFormat 完成对 HBase 表的切分,获取 RecordReader 对象来读取数据。

对 HBase 表的切分原则是一个 Region 切分成一个 Split,即表中有多少个 Regions,MR 中就有多少个 Map;读取 HBase 表数据都是通过构建 Scanner,对表进行全表扫描,如果有过滤条件,则转化为 Filter。当过滤条件为 rowkey 时,则转化为对 rowkey 的过滤;Scanner 通过 RPC 调用 RegionServer 的 next()来获取数据;

基本通信原理如下:

Hive-HBase

具体步骤

新建 HBase 表:

create 'test', 'f1'

插入数据:

put 'test','1','f1:c1','name1'put 'test','1','f1:c2','name2'put 'test','2','f1:c1','name1'put 'test','2','f1:c2','name2'put 'test','3','f1:c1','name1'put 'test','3','f1:c2','name2'

这里 HBase 有个列簇 f1,有两个列 c1 和 c2,新建 Hive 表关联 HBase 的这两列:

SET hbase.zookeeper.quorum=zkNode1,zkNode2,zkNode3;SET zookeeper.znode.parent=/hbase;ADD jar hive-hbase-handler-{hive.version}.jar;CREATE EXTERNAL TABLE test.test (rowkey string,c1 string,c2 string) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,f1:c1,f1:c2")TBLPROPERTIES ("hbase.table.name" = "test");

这里使用外部表映射到 HBase 中的表,Hive 对应的 hdfs 目录是空的,数据仍然在 HBase 中,这样在 Hive 中删除表,并不会删除 HBase 中的表,否则,就会删除。

另外,除了 rowkey,其他三个字段使用 Map 结构来保存 HBase 中的每一个列族。

其中,参数解释如下:

  • hbase.zookeeper.quorum:

指定 HBase 使用的 zookeeper 集群,默认端口是 2181,可以不指定;如果指定,格式为 zkNode1:2222,zkNode2:2222,zkNode3:2222

  • zookeeper.znode.parent

指定 HBase 在 zookeeper 中使用的根目录

  • hbase.columns.mapping

Hive 表和 HBase 表的字段一一映射,分别为:Hive 表中第一个字段映射:key(rowkey),第二个字段映射列族 f1:c1,第三个字段映射列族 f1:c2。

  • hbase.table.name

HBase 中表的名字

也可以直接在 Hive 中创建表的同时,完成在 HBase 中创建表。
在 Hive 中查询 HBase 表:

hive> select * from test.test;OK1    name1   name22    name1   name23    name1   name2

也可以插入数据:

insert into test.test select '4', 'name4', 'name4';

查看 HBase 的数据:

hive> select * from test.test;OK1    name1   name22    name1   name23    name1   name24    name4   name4

Spark 读取提升速度

Hive 关联 HBase 实际是底层是 MR,速度较慢,此时可以使用 spark sql 读取 Hive 表,进行查询操作,从而访问 HBase 数据。

程序员如何避免陷入“内卷”、选择什么技术最有前景,中国开发者现状与技术趋势究竟是什么样?快来参与「2020 中国开发者大调查」,更有丰富奖品送不停!

☞我们差点就用不上 Java 了!☞印度永久封禁了微信、百度、TikTok 等 59 款中国 App……
☞RISC-V 正在成为芯片世界中的 Linux

Hive 整合 HBase相关推荐

  1. hive整合HBase:HBase table xsg:test05 doesn't exist while the table is declared as an external table

    版本 虚拟机centOS7 hive 1.2.1 hbase 1.2.6 1,在hive-site.xml中添加配置 <property><name>hbase.zookeep ...

  2. Hive 整合Hbase(来自学习资料--博学谷)

    1.摘要 Hive提供了与HBase的集成,使得能够在HBase表上使用HQL语句进行查询 插入操作以及进行Join和Union等复杂查询.同时也可以将hive表中的数据映射到Hbase中. 2.应用 ...

  3. Hive整合HBase,操作HBase表

    Hive over HBase原理 Hive与HBase利用两者本身对外的API来实现整合,主要是靠HBaseStorageHandler进行通信,利用 HBaseStorageHandler,Hiv ...

  4. hive整合hbase

    实验环境准备  Hive-2.3.3 Hbase-1.3.1 launcher start start-dfs.sh start-yarn.sh zkServer.sh start (3) ./mr- ...

  5. 2.4-2.5、Hive整合(整合Spark、整合Hbase)、连接方式Cli、HiveServer和hivemetastore、Squirrel SQL Client等

    2.4其它整合 2.4.1Hive整合Spark Spark整合hive,需要将hive_home下的conf下的hive_site.xml放到spark_home下的conf目录下.(3台服务器都做 ...

  6. 【华为云技术分享】如何整合hive和hbase

    引言  为什么要集成Hive和HBase Hive和Hbase在大数据架构中处在不同位置,Hive是一个构建在Hadoop基础之上的数据仓库,主要解决分布式存储的大数据处理和计算问题,Hive提供了类 ...

  7. HBase:Hive与HBase的整合

    hive与HBase的整合 hive与我们的HBase各有千秋,各自有着不同的功能,但是归根接地,hive与hbase的数据最终都是存储在hdfs上面的,一般的我们为了存储磁盘的空间,不会将一份数据存 ...

  8. hive安装及整合hbase

    hive安装及整合hbase (1). 上传hive安装包并解压 tar -zxvf apache-hive-3.1.3-bin.tar.gz -C /export/server/ (2). 配置hi ...

  9. hive整合phoenix

    2019独角兽企业重金招聘Python工程师标准>>> 版本: hbase-0.98.21-hadoop2-bin.tar.gz phoenix-4.8.0-HBase-0.98-b ...

最新文章

  1. BZOJ 1801 [Ahoi2009]中国象棋(线性动规)(洛谷P2051)
  2. 使用 git 管理 portage tree
  3. Go对Python产生的冲击
  4. R3Query 大数据分析系统2017将发布免费个人版
  5. 机器学习(3.文本数据的特征抽取(第一种))
  6. GDCM:gdcm::Dict的测试程序
  7. 更改tomcat的request编码方式
  8. [转载] python学习笔记2--操作符,数据类型和内置功能
  9. redolog switch会发生完全检查点还是增量检查点?
  10. 【转】ASPNET程序中常用的三十三种代码
  11. 一起学习x86/x64知识
  12. excel如何把顺序倒过来_如何在筛选后的表里复制粘贴数据到同行
  13. 解决shardingsphere 4.1.1 SQLFeatureNotSupportedException: isValid sharding-jdbc
  14. Excel如何将二维表转成数据列
  15. DongDong数颜色 树上启发式合并 牛客
  16. 中国齿科粘接剂行业发展趋势及前景动态预测报告2022-2027年
  17. TFN系列超声波探伤仪使用评价怎么样?好不好用?
  18. 天马G6二期、腾龙光谷数据中心 落户武汉东湖高新区
  19. 职场情商训练 - 下属的工作技巧
  20. C3P0,Proxool,BoneCP,Druid等连接池的断开自动重联功能

热门文章

  1. [bzoj1552][Cerc2007]robotic sort[bzoj3506][Cqoi2014]排序机械臂
  2. Windows Thrift安装及HelloWorld
  3. Linux下android开发环境 遇到的问题
  4. Javascript是实现HTML5强大功能的重要语言
  5. 深度学习各场景评估指标总结
  6. [论文阅读] iCaRL: Incremental Classifier and Representation Learning
  7. [论文阅读] BCNet: Bidirectional collaboration network for edge-guided salient object detection
  8. Python Matplotlib画图中文乱码、负号无法显示问题解决
  9. c语言1234为什么不是常量,C语言学习1
  10. 矩池云上复现论文 Neural Graph Collaborative Filtering 环境复现