[Hive]HBaseIntegration:通过Hive读写HBase
业务背景
unmatch_oppon_pro是一张Hive表,现在需要将其导入到HBase中。
Hive中的unmatch_oppon_pro的表结构如下:
字段 | 类型 |
---|---|
id | bigint |
site_id | int |
product_code | string |
product_name | string |
product_url | string |
update_time | string |
product_price | double |
appraisal_num | int |
sold_num | int |
导入到HBase时,将 product_code 作为HBase表的 row_key
业务分析
利用Hive和HBase整合,可以实现通过Hive,读写HBase表,详细可以参考HBaseIntegration
实现方式
全量覆盖导入
代码如下:
create table unmatch_oppon_pro_hbase
(row_key string,id bigint,site_id int,product_code string,product_name string,product_url string,update_time string,product_price double,appraisal_num int,sold_num int
) STORED BY "org.apache.hadoop.hive.hbase.HBaseStorageHandler" WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:id,info:site_id,info:product_code,info:product_name,info:product_url,info:update_time,info:product_price,info:appraisal_num,info:sold_num") TBLPROPERTIES ("hbase.table.name"="unmatch_oppon_pro");insert overwrite table unmatch_oppon_pro_hbase
select product_code as row_key,id,site_id,product_code,product_name,product_url,update_time,product_price,appraisal_num,sold_num
from pms.unmatch_oppon_pro;
上面的代码是建立Hive内部表,为了让这张Hive内部表可以读写HBase表,需要如下操作:
- create table时设置存储方式
STORED BY "org.apache.hadoop.hive.hbase.HBaseStorageHandler"
- 设置Hive列名和HBase表的列对应
"hbase.columns.mapping" = ":key,info:id,info:site_id,info:product_code,info:product_name,info:product_url,info:update_time,info:product_price,info:appraisal_num,info:sold_num
其中":key"
表示HBase的row_key,对应Hive表的第一个字段row_key string
;
"info:id,info:site_id,info:product_code,info:product_name,info:product_url,info:update_time,info:product_price,info:appraisal_num,info:sold_num"
表示HBase的列族和列,其中info是HBase表的列族,id、site_id、product_code等作为info的列
- 可选:设置HBase的表名
"hbase.table.name"="unmatch_oppon_pro"
,这个如果不指定的话,最终生成的HBase表与Hive表同名
执行以后结果如下
hbase(main):001:0> describe 'unmatch_oppon_pro'
DESCRIPTION ENABLED
'unmatch_oppon_pro', {NAME => 'info', DATA_BLOCK_ENCODING => 'NONE',
BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => true
'1', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL => 'FOREVER',
KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536',
IN_MEMORY=> 'false', BLOCKCACHE => 'true'}
1 row(s) in 2.4440 secondshbase(main):002:0> scan 'unmatch_oppon_pro',{LIMIT=>1}
ROW COLUMN+CELL
1000001232 column=info:appraisal_num, timestamp=1432528332998, value=4
1000001232 column=info:id, timestamp=1432528332998, value=112932511
1000001232 column=info:product_code, timestamp=1432528332998, value=1000001232
1000001232 column=info:product_name, timestamp=1432528332998, value=\xE4\xB8\x80\xE7
1000001232 column=info:product_price, timestamp=1432528332998, value=318.0
1000001232 column=info:product_url, timestamp=1432528332998, value=http://item.jd.com/1000001232.html
1000001232 column=info:site_id, timestamp=1432528332998, value=1001
1000001232 column=info:update_time, timestamp=1432528332998, value=2015-05-22 01:58:57.0
1 row(s) in 0.1530 seconds
增量覆盖导入
代码如下:
create external table unmatch_oppon_pro_hbase
(row_key string,id bigint,site_id int,product_code string,product_name string,product_url string,update_time string,product_price double,appraisal_num int,sold_num int
) STORED BY "org.apache.hadoop.hive.hbase.HBaseStorageHandler" WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:id,info:site_id,info:product_code,info:product_name,info:product_url,info:update_time,info:product_price,info:appraisal_num,info:sold_num") TBLPROPERTIES ("hbase.table.name"="unmatch_oppon_pro");insert overwrite table unmatch_oppon_pro_hbase
select product_code as row_key,id,site_id,product_code,product_name,product_url,update_time,product_price,appraisal_num,sold_num
from pms.unmatch_oppon_pro;
实际上,增量更新与全量覆盖更新的区别,在于增量更新建立的是Hive的外表
全量覆盖和增量更新的区别
区别如下
- 增量更新,建立的是Hive外表;而全量覆盖建立的是Hive内部表;
- 增量更新,必须先创建HBase表;而全量覆盖不需要事先建立HBase表;
- 增量更新,是在原有的HBase表的基础上新增数据,不改变原有数据;而全量覆盖则会覆盖原有数据
[Hive]HBaseIntegration:通过Hive读写HBase相关推荐
- 【原创】大叔经验分享(25)hive通过外部表读写hbase数据
在hive中创建外部表: CREATE EXTERNAL TABLE hive_hbase_table( key string, name string, desc string ) STORED B ...
- Hive 0.13.1 和HBase 0.98.6.1整合
A:安装hadoop和HBase 参考:http://blog.csdn.net/wind520/article/details/39856353 B:安装Hive 1:下载:wget http:// ...
- hive删除hbase数据_Hive进阶:Hive通过外部表操作Hbase数据
概述: HBase: 查询效率比较高,常为实时业务提供服务,但是其查询方式比较单一,只能通过row方式get单条数据,或者通过scan加过滤器的方式扫描数据表获取数据. Hive: hive用来存储结 ...
- hive建表映射到hbase
1. 进入Hbase shell sz280328:cloudera-scm@/home/cloudera-scm>hbase shell 2. 建表,插入一行数据 hbase(main): ...
- java hive和hbase整合,Hive入门3–Hive与HBase的整合
开场白: Hive与HBase的整合功能的实现是利用两者本身对外的API接口互相进行通信,相互通信主要是依靠hive_hbase-handler.jar工具类 (Hive Storage Handle ...
- Spark读写HBase(主要讲解SHC的使用)
前言 Spark读写HBase本身来说是没啥可以讲的,最早之前都是基于RDD的,网上的资料就太多了,可以参考: 参考链接1 参考链接2 其实都一样,后来有了Hortonworks公司的研发人员研发了一 ...
- [hive学习翻译]Hive - Introduction
术语"大数据"用于大数据集的集合,包括大量,高速度和各种日益增加的数据.使用传统的数据管理系统,很难处理大数据.因此,Apache Software Foundation引入了一个 ...
- Hive大数据-Hive的安装与启动---大数据之Hive工作笔记0005
然后我们再去看这个hive的安装,其实正确的学习路径应该是,首先去看 一下hadoop,因为大数据中,很多知识都是基于hadoop的,然后再去看hive,然后再去 看hbase,spark,flink ...
- Hive学习——单机版Hive的安装
目录 一.基本概念 (一)Hive概念 (二)优势和特点 (三)Hive元数据管理 (四)Hive架构 (五)Hive Interface – 其他使用环境 二.Hive环境搭建 1.自动安装脚本 2 ...
最新文章
- IOSday01 连线和程序标识
- SQL Server:查看数据库用户权限
- Jenkins Job Buidler
- python中isinstance用法_Python内置isinstance函数详细介绍
- ABAP Modification browser SE95
- 【博客园2018总结帖】21天,在Github上获取 6300 star
- monterey系统怎么降级?macOS Monterey系统降回Big Sur的详细教程
- 对PHP输入输出流学习和认识
- 解决php中json_decode的异常JSON_ERROR_CTRL_CHAR
- 0-1总体分布下的参数假设检验示例一(SPSS实现)
- 2:url有规律的多页面爬取
- start-dfs.sh\stop-dfs.sh启动失败
- Win10 SAS9.4缺少增强型编辑器
- Google Chrome旧版本下载
- 可以联机的的单机游戏
- n1盒子当无线打印服务器,n1下ubuntu安装cups配置airprint网络打印服务器
- 区块链关键技术研究进展
- 手机VBUS OVP电路介绍
- 北京小客车摇号数据的一点质疑
- c语言中的字母占位符,C语言专题-基本数据类和占位符