我是靠谱客的博主 无语钢笔,最近开发中收集的这篇文章主要介绍hbase--Hbase与Hive集成1、SQL on Hbase2、Hive与Hbase集成,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Hbase与Hive集成

  • 1、SQL on Hbase
    • HiveSQL处理Hbase中的数据?
      • 常见的SQL on Hbase
  • 2、Hive与Hbase集成

1、SQL on Hbase

  • Hive:可以用SQL,底层是MapReduce
  • Hbase:不能用SQL,可以用MapReduce

HiveSQL处理Hbase中的数据?

  • MapReduce
  • |
  • SQL on Hbase
    • 使用SQL来操作Hbase

常见的SQL on Hbase

  • Hive:通过MapReduce实现与Hbase的关联
    • 比较慢
    • 主要应用于数据仓库中
      • 利用Hbase的按列存储来存储半结构化的数据
        • 将Hbase的半结构化数据变成Hive中的结构化数据
      • 利用hbase的多版本来存储一个数据不同的状态
        • 昨天:订单是成功的订单
        • 今天:订单是退款的订单
        • 订单id是不变的
        • 需要记录一个订单在不同时间的多个状态?
          • Hbase多版本
  • Phoenix:专门用于为Hbase提供SQL操作的工具
    • 这个工具直接调用Hbase的API来实现,非常快
    • 这个工具的性能是所有SQL on Hbase中最快的
    • 基于Hbase构建二级索引

2、Hive与Hbase集成

  • 将HBASE中的jar包拷贝到Hive的lib目录
ln -s /export/servers/hbase-1.2.0-cdh5.14.0/lib/hbase-client-1.2.0-cdh5.14.0.jar  /export/servers/hive-1.1.0-cdh5.14.0/lib/hbase-client-1.2.0-cdh5.14.0.jar             
ln -s /export/servers/hbase-1.2.0-cdh5.14.0/lib/hbase-hadoop2-compat-1.2.0-cdh5.14.0.jar   /export/servers/hive-1.1.0-cdh5.14.0/lib/hbase-hadoop2-compat-1.2.0-cdh5.14.0.jar             
ln -s /export/servers/hbase-1.2.0-cdh5.14.0/lib/hbase-hadoop-compat-1.2.0-cdh5.14.0.jar   /export/servers/hive-1.1.0-cdh5.14.0/lib/hbase-hadoop-compat-1.2.0-cdh5.14.0.jar            
ln -s /export/servers/hbase-1.2.0-cdh5.14.0/lib/hbase-it-1.2.0-cdh5.14.0.jar     /export/servers/hive-1.1.0-cdh5.14.0/lib/hbase-it-1.2.0-cdh5.14.0.jar
ln -s /export/servers/hbase-1.2.0-cdh5.14.0/lib/hbase-server-1.2.0-cdh5.14.0.jar   /export/servers/hive-1.1.0-cdh5.14.0/lib/hbase-server-1.2.0-cdh5.14.0.jar  
  • 修改hive-site.xml:Hive通过SQL访问Hbase,就是Hbase的客户端,就要连接zookeeper
<property>
    <name>hive.zookeeper.quorum</name>
    <value>node-01,node-02,node-03</value>
</property>
 <property>
    <name>hbase.zookeeper.quorum</name>
    <value>node-01,node-02,node-03</value>
</property>
  • 修改hive-env.sh
export HBASE_HOME=/export/servers/hbase-1.2.0-cdh5.14.0
  • 启动Hive
#先启动metastore服务
start-metastore.sh 
#然后启动hiveserver
start-hiveserver2.sh
#然后启动beeline
start-beeline.sh
  • 在Hive中创建关联Hbase的表
  • 如果Hbase中表不存在:【用的比较少】
    • 创建测试数据文件
vim /export/datas/hive-hbase.txt
1,zhangsan,80
2,lisi,60
3,wangwu,30
4,zhaoliu,70
  • 创建测试表
--创建测试数据库
create database course;
--切换数据库
use course;
--创建原始数据表
create external table if not exists course.score(
id int,
cname string,
score int
) row format delimited fields terminated by ',' stored as textfile ;
--加载数据文件
load data local inpath '/export/datas/hive-hbase.txt' into table score;
  • 创建一张Hive与HBASE的映射表
create table course.hbase_score(
id int,
cname string,
score int
)  
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'  
with serdeproperties("hbase.columns.mapping" = "cf:name,cf:score") 
tblproperties("hbase.table.name" = "hbase_score");
  • 将测试表的数据写入映射表
 insert overwrite table course.hbase_score select id,cname,score from course.score;
  • 如果Hbase中表已存在,只能创建外部表比较常用的方式
 create external table course.stu(
  key string,
  name string,
  age  string,
  phone string
  )  
row format serde 'org.apache.hadoop.hive.hbase.HBaseSerDe' 
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'  
  with serdeproperties("hbase.columns.mapping" = ":key,basic:name,basic:age,other:phone") 
  tblproperties("hbase.table.name" = "student:stu");




-- count计数
hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'student:stu'

-- 查看数据
scan 'student:stu',{LIMIT=>5}
get 'student:stu',1


  • 注意事项:
  • Hive关联时
    • 如果Hbase表不存在,默认以hive表的第一列作为Hbase的rowkey
    • 如果表已存在,使用:key来标识rowkey
  • Hive与Hbase的关联表
    • 是不能通过load命令加载数据进去的
    • Hbase中的数据是特殊的存储,内存和Storefile存储,必须经过程序写入
    • load命令是直接将文件放入目录的方式实现的,所以不能用于加载数据到hbase
    • ==只能用insert命令==

最后

以上就是无语钢笔为你收集整理的hbase--Hbase与Hive集成1、SQL on Hbase2、Hive与Hbase集成的全部内容,希望文章能够帮你解决hbase--Hbase与Hive集成1、SQL on Hbase2、Hive与Hbase集成所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部