用Hive、Impala查询Hbase数据
近期有项目需要向Hbase写入数据,为了测试数据写入是否正常,常用Hbase shell查询数据,但是用起来比较麻烦,看到Clouder官网有关于使用Impala查询Hbase的操作说明,做了简单的尝试,记录如下,供大家参考。
环境:
CDH 5.10.2、Impala 2.7.0、Hive 1.1.0、Hbase 1.2.0
原理:
Hive创建外部表,建立与Hbase表的映射关系,从而实现通过Hive查询Hbase的功能。而Impala与Hive公用元数据信息,因此用Impala也可以查询Hbase.
步骤:
1、修改Cloudera集群中 Impala和Hive配置。
2、新建Hbase表,并插入数据。
新建Hbase表有多种方法,如Java API、Python API、Hbase Shell等,以下是通过Hbase Shell新建Hbase表的命令。
create 'examuser_info_tag',{NAME => 'user_info', COMPRESSION => 'SNAPPY' },{NAME => 'tag_info', COMPRESSION => 'SNAPPY' },{NAME => 'ill_tag', COMPRESSION => 'SNAPPY' },{ NUMREGIONS => 10 , SPLITALGO => 'UniformSplit'}
这里不再对插入数据进行说明。
3、创建Hive外部表,建立与Hbase的关联关系。
以下SQL需要在Hive Shell中执行。如果使用Hue,注意选择Hive shell,不要使用Impala Shell。
Hive表中的列第一列对应Hbase表中的rowkey,其他列分别对应Hbase表中的列。
CREATE EXTERNAL TABLE hbase.user_info ( idcard STRING,checkcount INT, username STRING, useraddr STRING, userbirth STRING, usermarried TINYINT, usersex TINYINT, mincheckdate STRING, mobile STRING
)
STORED BY "org.apache.hadoop.hive.hbase.HBaseStorageHandler"
WITH SERDEPROPERTIES (
"hbase.columns.mapping"=":key,user_info:checkCount,user_info:userName,user_info:userAddr,user_info:userBirth,user_info:userMarried,user_info:userSex,user_info:minCheckDate,user_info:mobile
")
TBLPROPERTIES ("hbase.table.name"="user_info")
4、Impala同步Hive元数据信息。
在Impala Shell中执行 INVALIDATE METADATA hbase.user_info;
5、使用测试
插入数据:
insert into hbase.user_info(idcard,checkcount,username,useraddr,usersex,mobile)
values('12345678777',2,'测试','北京朝阳',1,'1234567890' );
查询:
-- 主键rowkey查询,效率较高
select * from hbase.user_info where idcard = '12345678777';-- 非主键查询,效率很低
select * from hbase.user_info where mobile = '1234567890';
删除和修改:
Impala或Hive不支持修改和删除Hbase数据,不过可以使用新插入数据代替Update。
-- 不支持Upate操作
update hbase.user_info set checkcount =3 where idcard = '12345678777';-- 可以使用如下操作代替Update,
insert into hbase.user_info(idcard,checkcount) values ('12345678777', 3);
批量导入数据:
insert into hbase.user_info( useridcard,checkcount,user,useraddr,userbirth,usermarried,usersex,mincheckdate,mobile)
select useridcard,check_count,user,useraddr,userbirth,usermarried,usersex,min_check_date,mobile
from test.user_info
上述操作可能会有如下错误信息:
RetriesExhaustedWithDetailsException: Failed 1024 actions: RegionTooBusyException: 1024 times,
这个问题是由于hbase在加载数据过程中产生了region split操作,会阻塞写入操作。可以尝试在创建hbase表时进行优化,如:预建分区。
用Hive、Impala查询Hbase数据相关推荐
- 建立HBase的集群和HDInsight在Hadoop中使用Hive来查询它们
建立HBase的集群和HDInsight在Hadoop中使用Hive来查询它们 在本教程中,您将学习如何创建和查询HDInsight使用HiveHadoop的HBase的表.下列步骤描述: •如何使用 ...
- 【原创】大叔经验分享(25)hive通过外部表读写hbase数据
在hive中创建外部表: CREATE EXTERNAL TABLE hive_hbase_table( key string, name string, desc string ) STORED B ...
- 查询hive表_大数据中Hive与HBase的区别与联系
二者区别 Hive:Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能. Hive本身不存储和计算数据,它完全依赖于HDFS和MapRe ...
- impala查询数据与hive的查询数据比对(数据的校验)
impala查询数据与hive的查询数据比对 先在cdh的hue中分别用impala和hive的查询数据对比 将impala的查询语句写入到shell脚本中 a=(`impala-shell -q ' ...
- Impala之加载HBase数据
Impala如何加载HBase数据?本文将为大家进行详细介绍Impala加载HBase数据的步骤. 第一步:HBase创建表(或选择已有表) HBase shell命令行执行命令: create 'i ...
- hive删除hbase数据_Hive进阶:Hive通过外部表操作Hbase数据
概述: HBase: 查询效率比较高,常为实时业务提供服务,但是其查询方式比较单一,只能通过row方式get单条数据,或者通过scan加过滤器的方式扫描数据表获取数据. Hive: hive用来存储结 ...
- hbase数据迁移到hive中
描述: 原先数据是存储在hbase中的,但是直接查询hbase速度慢(hbase是宽表结构),所以想把数据迁移到hive中: 1.先hbase 和 hive创建 外部表链接, 可以在hive直接查询: ...
- 企业级数据仓库:数据仓库概述;核心技术框架,数仓理论,数据通道Hive技术框架,HBase设计,系统调度,关系模式范式,ER图,维度建模,星型/雪花/星座模式,数据采集同步,业务数据埋点,数据仓库规范
文章目录 第一章 数据仓库概述 1.1 数据仓库简介 1.1.2 什么是数据仓库? 1.1.3 OLTP 与 OLAP 1.2 数据仓库技术架构 1.3 课程目标 第二章 核心技术框架 2.1 数据仓 ...
- 大数据案例——Hive、MySQL、HBase数据互导
本文是基于教程大数据案例--本地文件上传hive数据库,对数据在Hive,MySQL,HBase之间的互导进行进阶版的学习.数据集:淘宝用户点击商品操作数据集,共30万条记录.如果没有安装MySQL, ...
- hive和hbase数据迁移
数据迁移 文章目录 数据迁移 一.数据分析 1. Hive数据分析 2. Hbase数据分析 3. Kudu数据分析 二.数据迁移设 1. Hive数据迁移设计 2. Hbase数据迁移设计 3. K ...
最新文章
- 【deeplab】Semantic Image Segmentation with Deep Convolutional Nets and Fully
- fastJson反序列化异常,JSONException: expect ‘:‘ at 0, actual =
- 【Android RTMP】音频数据采集编码 ( FAAC 编码器编码 AAC 音频解码信息 | 封装 RTMP 音频数据头 | 设置 AAC 音频数据类型 | 封装 RTMP 数据包 )
- 五轮阿里面试题及答案
- 小米笔记本air无法充电_惠普笔记本电池无法充电问题的解决方法
- 工业仪器仪表 界面设计_如何设计时尚的仪表板界面
- linux下的驱动大小,(转)Linux驱动开发需要注意的点/KO大小/内存管理
- 内存位置访问无效 midas.dll_java并发之内存模型
- 基于NOPI的Execl模板转换类,直接将Execl模板转换对应的Entity
- 注意,Fastjson 最新高危漏洞来袭!
- Elasticsearch的javaAPI之percolator
- View Controller Programming Guide for iOS---(三)---Using View Controllers in Your App
- 【房卡棋牌教程】,制作进入房间小界面
- Amit Chadha出任LT Technology Services 首席执行官兼董事总经理
- e几个灯同时亮灭两次verilog_第7章Verilog设计的层次与风格.PPT.ppt
- js如何判断闰年?整除的符号是什么?
- 怎么区分linux分区,Linux硬盘如何区分
- idea下 git无法提交空的文件夹
- Node.js + Web Socket 打造即时聊天程序嗨聊(1)
- 穿越之我是码农 1024 篇