近期有项目需要向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数据相关推荐

  1. 建立HBase的集群和HDInsight在Hadoop中使用Hive来查询它们

    建立HBase的集群和HDInsight在Hadoop中使用Hive来查询它们 在本教程中,您将学习如何创建和查询HDInsight使用HiveHadoop的HBase的表.下列步骤描述: •如何使用 ...

  2. 【原创】大叔经验分享(25)hive通过外部表读写hbase数据

    在hive中创建外部表: CREATE EXTERNAL TABLE hive_hbase_table( key string, name string, desc string ) STORED B ...

  3. 查询hive表_大数据中Hive与HBase的区别与联系

    二者区别 Hive:Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能. Hive本身不存储和计算数据,它完全依赖于HDFS和MapRe ...

  4. impala查询数据与hive的查询数据比对(数据的校验)

    impala查询数据与hive的查询数据比对 先在cdh的hue中分别用impala和hive的查询数据对比 将impala的查询语句写入到shell脚本中 a=(`impala-shell -q ' ...

  5. Impala之加载HBase数据

    Impala如何加载HBase数据?本文将为大家进行详细介绍Impala加载HBase数据的步骤. 第一步:HBase创建表(或选择已有表) HBase shell命令行执行命令: create 'i ...

  6. hive删除hbase数据_Hive进阶:Hive通过外部表操作Hbase数据

    概述: HBase: 查询效率比较高,常为实时业务提供服务,但是其查询方式比较单一,只能通过row方式get单条数据,或者通过scan加过滤器的方式扫描数据表获取数据. Hive: hive用来存储结 ...

  7. hbase数据迁移到hive中

    描述: 原先数据是存储在hbase中的,但是直接查询hbase速度慢(hbase是宽表结构),所以想把数据迁移到hive中: 1.先hbase 和 hive创建 外部表链接, 可以在hive直接查询: ...

  8. 企业级数据仓库:数据仓库概述;核心技术框架,数仓理论,数据通道Hive技术框架,HBase设计,系统调度,关系模式范式,ER图,维度建模,星型/雪花/星座模式,数据采集同步,业务数据埋点,数据仓库规范

    文章目录 第一章 数据仓库概述 1.1 数据仓库简介 1.1.2 什么是数据仓库? 1.1.3 OLTP 与 OLAP 1.2 数据仓库技术架构 1.3 课程目标 第二章 核心技术框架 2.1 数据仓 ...

  9. 大数据案例——Hive、MySQL、HBase数据互导

    本文是基于教程大数据案例--本地文件上传hive数据库,对数据在Hive,MySQL,HBase之间的互导进行进阶版的学习.数据集:淘宝用户点击商品操作数据集,共30万条记录.如果没有安装MySQL, ...

  10. hive和hbase数据迁移

    数据迁移 文章目录 数据迁移 一.数据分析 1. Hive数据分析 2. Hbase数据分析 3. Kudu数据分析 二.数据迁移设 1. Hive数据迁移设计 2. Hbase数据迁移设计 3. K ...

最新文章

  1. 【deeplab】Semantic Image Segmentation with Deep Convolutional Nets and Fully
  2. fastJson反序列化异常,JSONException: expect ‘:‘ at 0, actual =
  3. 【Android RTMP】音频数据采集编码 ( FAAC 编码器编码 AAC 音频解码信息 | 封装 RTMP 音频数据头 | 设置 AAC 音频数据类型 | 封装 RTMP 数据包 )
  4. 五轮阿里面试题及答案
  5. 小米笔记本air无法充电_惠普笔记本电池无法充电问题的解决方法
  6. 工业仪器仪表 界面设计_如何设计时尚的仪表板界面
  7. linux下的驱动大小,(转)Linux驱动开发需要注意的点/KO大小/内存管理
  8. 内存位置访问无效 midas.dll_java并发之内存模型
  9. 基于NOPI的Execl模板转换类,直接将Execl模板转换对应的Entity
  10. 注意,Fastjson 最新高危漏洞来袭!
  11. Elasticsearch的javaAPI之percolator
  12. View Controller Programming Guide for iOS---(三)---Using View Controllers in Your App
  13. 【房卡棋牌教程】,制作进入房间小界面
  14. Amit Chadha出任LT Technology Services 首席执行官兼董事总经理
  15. e几个灯同时亮灭两次verilog_第7章Verilog设计的层次与风格.PPT.ppt
  16. js如何判断闰年?整除的符号是什么?
  17. 怎么区分linux分区,Linux硬盘如何区分
  18. idea下 git无法提交空的文件夹
  19. Node.js + Web Socket 打造即时聊天程序嗨聊(1)
  20. 穿越之我是码农 1024 篇

热门文章

  1. 震惊~~飞流android版使用体验!!
  2. wordpress themeforest
  3. ffmpeg音频格式转码(编码器)
  4. 物理卷、卷组与逻辑卷的关系及相关操作详述
  5. 赠书 001 | 人啊。认识你自己
  6. 通过fileProvider接收外部App传递文件路径的一些坑
  7. Linux OOM killer(转)
  8. X-Frame-Options
  9. java 定时取出一段时间,Java 实现定时任务的三种方法
  10. STM32F103 CubeMX:ETR外部脉冲计数器