Hive操作Hbase(详细配置及操作) 您所在的位置:网站首页 天国游戏小说好看吗 Hive操作Hbase(详细配置及操作)

Hive操作Hbase(详细配置及操作)

2023-12-03 03:08| 来源: 网络整理| 查看: 265

Hive操作Hbase(详细配置及操作)

Guide Hive操作Hbase(详细配置及操作)前言版本:适用场景 开始配置操作1. 创建一张Hbase表2. 在Hive创建一张Hbase的映射表(外部表)3. 创建一张原始表来导入本地数据4. 将原始表数据插入到映射表5. 在Hive&Hbase查询数据6.使用Hive删除批量Hbase数据

前言

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

不过,Hive 与 HBase 的整合可以实现我们的这个目标。不仅如此,还能通过 Hive 将数据批量地导入到 HBase 中。

Hive 与 HBase 整合的实现是利用两者本身对外的 API 接口互相通信来完成的,其具体工作交由 Hive 的 lib 目录中的 hive-hbase-handler-xxx.jar 工具类来实现对 HBase 数据的读取。

版本: 组件版本号Hadoop3.2.0Hive3.1.1Hbase2.2.6 适用场景

Hive 与 HBase 整合的适用场景:

**1、**通过 Hive 与 HBase 整合,可以将 HBase 的数据通过 Hive 来分析,让 HBase 支持 JOIN、GROUP 等 SQL 查询语法。

**2、**实现将批量数据导入到 HBase 表中。

开始配置

把hive安装目录的lib文件夹下的hbase开头的jar包删除,然后hbase安装目录下lib下hbase开头的几个jar拷贝到hive的lib文件夹下

rm /usr/local/hive/lib/hbase* cp /usr/local/hbase/lib/hbase* /usr/local/hive/lib

添加hive/conf的hive-site.xml配置,value为你的集群节点

hbase.zookeeper.quorum hadoop2,hadoop3,hadoop4

启动Hbase hive

操作 1. 创建一张Hbase表 create 'hbase_game','lol','cf' 2. 在Hive创建一张Hbase的映射表(外部表) CREATE EXTERNAL TABLE hive_hbase_game (id int, lol_name string,level string,cf_name string,gun string) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,lol:name,lol:level,cf:name,cf:gun") TBLPROPERTIES ("hbase.table.name" = "hbase_game");

参数说明:

hbase.columns.mapping 是必须的,这将会和 HBase 表的列族进行验证。hbase.table.name 属性是可选的,默认指定 HBase 表名与 Hive 表名一致。 3. 创建一张原始表来导入本地数据

Hive外部表不能使用load加载数据,所以需要创建一张内部表把本地数据加载进去

CREATE TABLE game_original (id int, lol_name string,level string,cf_name string,gun string) row format delimited fields terminated by ',';

本地的数据game.txt

1,别动我辅助,青铜,打偏了,AK 2,别动我BUFF,黑铁,狙击手,AWM

加载本地数据到原始表

load data local inpath '/usr/local/hive/game.txt' overwrite into table game_original; 4. 将原始表数据插入到映射表 from game_original insert overwrite table hive_hbase_game select key,lol_name,level,cf_name,gun; 5. 在Hive&Hbase查询数据 hive> select * from hive_hbase_game; 1 别动我辅助 青铜 打偏了 AK 2 别动我BUFF 黑铁 狙击手 AWM hbase(main):013:0> scan 'game' ROW COLUMN+CELL 1 column=cf:gun, timestamp=1610613495247, value='AK' 1 column=cf:name, timestamp=1610613495247, value='\xE6\x89\x93\xE5\x81\x8F\xE4\xBA\x86' 1 column=lol:level, timestamp=1610613495247, value='\xE9\x9D\x92\xE9\x93\x9C' 1 column=lol:name, timestamp=1610613495247, value='\xE5\x88\xAB\xE5\x8A\xA8\xE6\x88\x91\xE8\xBE\x85\xE5\x8A\xA9' 2 column=cf:gun, timestamp=1610613495247, value='AWM' 2 column=cf:name, timestamp=1610613495247, value='\xE7\x8B\x99\xE5\x87\xBB\xE6\x89\x8B' 2 column=lol:level, timestamp=1610613495247, value='\xE9\xBB\x91\xE9\x93\x81' 2 column=lol:name, timestamp=1610613495247, value='\xE5\x88\xAB\xE5\x8A\xA8\xE6\x88\x91BUFF' 2 row(s)

在Hbase插入数据时,同样在Hive中也能查询到新数据

6.使用Hive删除批量Hbase数据

思路:

方法一:

通过建映射表,比如在 hive 建一个映射表,然后写 hql 查出需要删除的 rowkey ,拼成删除命令(deleteall ‘tablename’, rowkey),写到文本 del_temp.txt ;然后执行 hbase shell del_temp.txt

方法二:

通过建映射表,比如在 hive 建一个映射表,将需要保留的数据 通过 hql 查询出来,备份到 hive 的一张临时表 ;然后 在hbase shell 里面 执行 truncate ‘tablename’ ,清空 hbase 的数据; 最后 在将数据 从 hive 的备份表 读出来,插入 映射表,写回 hbase;

这种方法是需要利用Hive的mapreduce操作的

操作:

这里是方法一的操作 即 拼成Hbase命令执行

1.记录hive查询要删除的数据,拼成命令

hive -e "select concat('deleteall \'game\',\'',id,'\'') from hive_hbase_game where level = '青铜'" > /tmp/del_temp.txt && echo 'exit' >> /tmp/del_temp.txt

2.hbase shell 执行删除命令

hbase shell /tmp/del_temp.txt > del.log


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有