财神爷站:绿色安全的手机App下载平台
所在位置:首页 > 新闻资讯 > Hive和HBase通信原理讲解

Hive和HBase通信原理讲解

发布时间:2022-08-04 21:42来源:财神爷站

  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?的这两列:

  SEThbase.zookeeper.quorum=zkNode1,zkNode2,zkNode3;?SETzookeeper.znode.parent=/hbase;?ADD?jar?hive-hbase-?handler-{hive.version}.jar;?CREATEEXTERNALTABLEtest.test?(?rowkey?string,?c1?string,?c2?string?)?STOREDBY'org.apache.hadoop.hive.hbase.HBaseStorageHandler'?WITHSERDEPROPERTIES?(?"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;?OK?1name1?name2?2name1?name2?3name1?name2

  也可以插入数据:

  insertintotest.test?select'4',?'name4',?'name4';

  查看?HBase?的数据:

  hive>select?*?from?test.test;?OK?1name1?name2?2name1?name2?3name1?name2?4name4?name4

  Spark?读取提升速度

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

  • 热门资讯
  • 最新资讯
  • 下载排行榜
  • 热门排行榜