社论:

本文将Hive与HBase整合在一起,使Hive能够读取HBase中的数据,让Hadoop生态系统中最为经常使用的两大框架互相结合。相得益彰。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2wxMDF5ang=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

写在前面二:

使用软件说明

约定全部软件的存放文件夹:

/home/yujianxin

一、Hive整合HBase原理

Hive与HBase整合的实现是利用两者本身对外的API接口互相进行通信,相互通信主要是依靠hive-hbase-handler-0.9.0.jar工具类,例如以下图

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2wxMDF5ang=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

Hive与HBase通信示意图

二、详细步骤

安装前说明

1、关于Hadoop、HBase、Hive集群的搭建,请參考本人博文“基于Hadoop的数据分析综合管理平台之Hadoop、HBase全然分布式集群搭建

2、本文中Hadoop、HBase、Hive安装路径

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2wxMDF5ang=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

2.1、拷贝jar包

删除$HIVE_HOME/lib/下HBase、Zookeeper相关jar

rm -rf $HIVE_HOME/lib/zookeeper-*.jar
rm -rf $HIVE_HOME/lib/hbase*.jar

又一次拷贝

cp $HBASE_HOME/hbase-0.94.7-security.jar $HIVE_HOME/lib/
cp $HBASE_HOME/lib/zookeeper-3.4.5.jar $HIVE_HOME/lib/

2.2、改动$HIVE_HOME/conf/hive-site.xml

mkdir $HIVE_HOME/logs

在尾部加入

<property>
<name>hive.querylog.location</name>
<value>/home/yujianxin/hive/hive-0.9.0/logs</value>
</property>
<property>
<name>hive.aux.jars.path</name>
<value>
file:///home/yujianxin/hive/hive-0.9.0/lib/hive-hbase-handler-0.9.0.jar,
file:///home/yujianxin/hive/hive-0.9.0/lib/hbase-0.94.7-security.jar,
file:///home/yujianxin/hive/hive-0.9.0/lib/zookeeper-3.4.5.jar
</value>
</property>

改动

<property>
<name>hive.zookeeper.quorum</name>
<value>master,slave1,slave2</value>
</property>

2.3、拷贝hbase-0.94.7-security.jar到全部hadoop节点(包含master)的hadoop/lib下

cp $HBASE_HOME/hbase-0.94.7-security.jar $HADOOP_HOME/lib

2.4、拷贝hbase/conf下的hbase-site.xml文件到全部hadoop节点(包含master)的hadoop/conf下

cp $HBASE_HOME/conf/hbase-site.xml  $HADOOP_HOME/conf

三、启动、使用配置后Hive,測试是否配置成功

3.1、启动Hive

集群方式启动

hive --auxpath /home/yujianxin/hive/hive-0.9.0/lib/hive-hbase-handler-0.9.0.jar,/home/
yujianxin/hive/hive-0.9.0/lib/hbase-0.94.7-security.jar,/home/yujianxin/hive/hive-0.9.
0/lib/zookeeper-3.4.5.jar

能够将此启动Hive与HBase整合的命令写成Shell脚本,设置成开机启动

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2wxMDF5ang=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

3.2、在Hive中创建HBase识别的表

CREATE TABLE hbase_hive_1(key int, value string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val")
TBLPROPERTIES ("hbase.table.name" = "xyz");

hbase.table.name 定义在hbase中的table名称

多列时,data:1,data:2

多列族时,data1:1,data2:1

hbase.columns.mapping 定义在hbase的列族,里面的:key 是固定值并且要保证在表pokes中的foo字段是唯一值

创建有分区的表

CREATE TABLE hbase_hive_2(key int, value string)
partitioned by (day string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val")
TBLPROPERTIES ("hbase.table.name" = "xyz2");

分别查看Hive、HBase中建立的表

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2wxMDF5ang=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">    

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2wxMDF5ang=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

3.3、导入数据

新建hive的数据表

create table pokes(foo int,bar string)

row format delimited fields terminated by ',';

批量导入数据



load data local inpath '/home/yujianxin/temp/data1.txt' overwrite into table pokes;

使用sql导入hbase_table_1

SET hive.hbase.bulk=true;

insert overwrite table hbase_hive_1 select * from pokes;

导入有分区的表

insert overwrite table hbase_hive_2  partition (day='2012-01-01') select * from pokes;

往Hive中插入数据同一时候会插入到HBase中

3.4、分别查看Hive、HBase中的数据



OK,到此Hive、HBase整合成功。

——————————————————————————————————————————————————————————————————

以下再给出较复杂的測试样例

情况一、对于在hbase已经存在的表,在hive中使用CREATE EXTERNAL TABLE来建立联系

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2wxMDF5ang=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

create external table hive_test (key int,gid map<string,string>,sid map<string,string>,uid map<string,string>)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" ="a:,b:,c:")
TBLPROPERTIES ("hbase.table.name" = "test1");

查询gid字段中value值

Hive成功读取到HBase中的数据

情况二、假设hbase表test2中的字段为user:gid,user:sid,info:uid,info:level

在hive中建表语句为

CREATE EXTERNAL TABLE hive_test_2(key int,user map<string,string>,info map<string,string>)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" ="user:,info:")
TBLPROPERTIES ("hbase.table.name" = "test2");

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2wxMDF5ang=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

Hive成功读取到HBase中的数据



版权声明:本文博主原创文章,博客,未经同意不得转载。

Hive综合HBase——经Hive阅读/书写 HBase桌子的更多相关文章

  1. hbase结合hive和sqoop实现数据指导mysql

    hive综合hbase两个优势表中的:     1.实现数据导入到MYSQL.     2.实现hbase表转换为另外一张hbase表.  三个操作环节:      1.hbase关联hive作为外部 ...

  2. Hbase与hive整合

    //hive与hbase整合create table lectrure.hbase_lecture10(sname string, score int) stored by 'org.apache.h ...

  3. apache-hadoop-1.2.1、hbase、hive、mahout、nutch、solr安装教程

    1 软件环境: VMware8.0 Ubuntu-12.10-desktop-i386 jdk-7u40-linux-i586.tar.gz hadoop-1.2.1.tar.gz eclipse-d ...

  4. Hbase总结(一)-hbase命令,hbase安装,与Hive的区别,与传统数据库的区别,Hbase数据模型

    Hbase总结(一)-hbase命令 下面我们看看HBase Shell的一些基本操作命令,我列出了几个常用的HBase Shell命令,如下: 名称 命令表达式 创建表 create '表名称', ...

  5. Hive over HBase和Hive over HDFS性能比较分析

    http://superlxw1234.iteye.com/blog/2008274 环境配置: hadoop-2.0.0-cdh4.3.0 (4 nodes, 24G mem/node) hbase ...

  6. Hadoop学习之HBase和Hive的区别

    Hive是为简化编写MapReduce程序而生的,使用MapReduce做过数据分析的人都知道,很多分析程序除业务逻辑不同外,程序流程基本一样.在这种情况下,就需要Hive这样的用户编程接口.Hive ...

  7. 大数据学习系列之八----- Hadoop、Spark、HBase、Hive搭建环境遇到的错误以及解决方法

    前言 在搭建大数据Hadoop相关的环境时候,遇到很多了很多错误.我是个喜欢做笔记的人,这些错误基本都记载,并且将解决办法也写上了.因此写成博客,希望能够帮助那些搭建大数据环境的人解决问题. 说明: ...

  8. Hbase 与Hive整合

    HBase与Hive的对比 25.1.Hive 25.1.1.数据仓库 Hive的本质其实就相当于将HDFS中已经存储的文件在Mysql中做了一个双射关系,以方便使用HQL去管理查询. 25.1.2. ...

  9. Hadoop+HBase+Spark+Hive环境搭建

    杨赟快跑 简书作者 2018-09-24 10:24 打开App 摘要:大数据门槛较高,仅仅环境的搭建可能就要耗费我们大量的精力,本文总结了作者是如何搭建大数据环境的(单机版和集群版),希望能帮助学弟 ...

随机推荐

  1. cuzysdk购物模块 36kr+本期背景图

    说好的剧透,虽然来的稍微晚不少 cuzysdk(www.cuzy.com) 是一个手机淘宝客sdk,通过使用cuzy,可以获取taobao平台的推广商品数据,移动开发者把推广的商品数据呈现给用户,用户 ...

  2. Oracle Tablespace Transportation

    前提:进行表空间传输需要用户有SYSDBA的系统权限,被移动的表空间是自包含的表空间,不应有依赖于表空间外部对象的对象存在.确定是否自包含可使用系统包DBMS_TTS中的TRANSPORT_SET_C ...

  3. 3D空间中射线与三角形的交叉检測算法

    引言 射线Ray,在3D图形学中有非常多重要的应用.比方,pick操作就是使用射线Ray来实现的,还有诸如子弹射线的碰撞检測等等都能够使用射线Ray来完毕. 所以,在本次博客中,将会简单的像大家介绍下 ...

  4. Linux编程实现守护进程

    Linux 守护程序 守护进程(Daemon)它是在一个特定的过程的背景进行.它独立于控制终端的和周期性地执行某些任务或待某些事件.是一种非常实用的进程. Linux的大多数server就是用守护进程 ...

  5. 谁说程序员都是苦逼的——看看兄弟连上海S2班的点点滴滴

    时间过的很快,上海校区第三期马上临近开班,第一期的学员也结束了自己第一个项目.         今天,2013.05.08日,我亲自参加了S01的第一个项目答辩,也为你们记录下了这样那样的一些时刻.其 ...

  6. UVa 11233 - Deli Deli

    题目:求所给单词的负数形式. 分析:模拟. 直接按章题意分情况求解就可以. 说明:按语法也能够(⊙_⊙). #include <iostream> #include <cstdlib ...

  7. Github上四种Lisp方言的流行度 | 肉山博客 (Wenshan's Blog)

    Github上四种Lisp方言的流行度 | 肉山博客 (Wenshan's Blog) Github上四种Lisp方言的流行度

  8. c语言实现动态指针数组Dynamic arrays

    c语言实现动态数组.其它c的数据结构实现,hashTable參考点击打开链接 treeStruct參考点击打开链接 基本原理:事先准备好一个固定长度的数组. 假设长度不够的时候.realloc一块区域 ...

  9. Java学习之道:jdk环境变量配置方法

    JDK(Java Development Kit)是整个Java的核心,包含了Java执行环境.Java工具和Java基础类库.JDK作为JAVA开发的环境,无论是做JAVA开发还是做安卓开发,都必须 ...

  10. Cocos2d-x 3.1.1 学习日志8--2分钟让你知道cocos2d-x3.1.1 文本类别

    实际上文本经常使用的三个,LabelTTF,LabelBMF和LabelAtlas.而他们使用非常相似.所以,你会只举一反三,非常快就能够掌握了. <span style="font- ...