设为首页 收藏本站
查看: 761|回复: 0

[经验分享] Hadoop Hive与Hbase整合

[复制链接]

尚未签到

发表于 2016-12-6 08:29:07 | 显示全部楼层 |阅读模式
Hadoop Hive与Hbase整合 
一 、简介
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

Hive与HBase的整合功能的实现是利用两者本身对外的API接口互相进行通信,相互通信主要是依靠hive_hbase-handler.jar工具类, 大致意思如图所示: DSC0000.gif

 

 

二、安装步骤:
1 .Hadoop和Hbase都已经成功安装了
Hadoop集群配置:http://blog.csdn.net/hguisu/article/details/723739

hbase安装配置:http://blog.csdn.net/hguisu/article/details/7244413

2 . 拷贝hbase-0.90.4.jar和zookeeper-3.3.2.jar到hive/lib下。
注意:如果hive/lib下已经存在这两个文件的其他版本(例如zookeeper-3.3.2.jar),建议删除后使用hbase下的相关版本。

3. 修改hive/conf下hive-site.xml文件,在底部添加如下内容:

  • <!--    
  • <property>    
  •   <name>hive.exec.scratchdir</name>     
  •   <value>/usr/local/hive/tmp</value>     
  •   
  • </property>     
  • -->    
  •     
  • <property>     
  •   <name>hive.querylog.location</name>     
  •   <value>/usr/local/hive/logs</value>     
  • </property>     
  •     
  • <property>    
  •   <name>hive.aux.jars.path</name>     
  •   <value>file:///usr/local/hive/lib/hive-hbase-handler-0.8.0.jar,file:///usr/local/hive/lib/hbase-0.90.4.jar,file:///usr/local/hive/lib/zookeeper-3.3.2.jar</value>    
  •   
  • </property>    

 

注意:如果hive-site.xml不存在则自行创建,或者把hive-default.xml.template文件改名后使用。

4. 拷贝hbase-0.90.4.jar到所有hadoop节点(包括master)的hadoop/lib下。
5. 拷贝hbase/conf下的hbase-site.xml文件到所有hadoop节点(包括master)的hadoop/conf下。

注意,如果3,4两步跳过的话,运行hive时很可能出现如下错误:

 


  • [html] view plaincopy  
  • org.apache.hadoop.hbase.ZooKeeperConnectionException: HBase is able to connect to ZooKeeper but the connection closes immediately.     
  • This could be a sign that the server has too many connections (30 is the default). Consider inspecting your ZK server logs for that error and     
  • then make sure you are reusing HBaseConfiguration as often as you can. See HTable's javadoc for more information. at org.apache.hadoop.    
  • hbase.zookeeper.ZooKeeperWatcher.   

三、启动Hive
1.单节点启动
#bin/hive -hiveconf hbase.master=master:490001

2 集群启动:
#bin/hive -hiveconf hbase.zookeeper.quorum=node1,node2,node3

如何hive-site.xml文件中没有配置hive.aux.jars.path,则可以按照如下方式启动。

bin/hive --auxpath /usr/local/hive/lib/hive-hbase-handler-0.8.0.jar, /usr/local/hive/lib/hbase-0.90.5.jar, /usr/local/hive/lib/zookeeper-3.3.2.jar -hiveconf hbase.zookeeper.quorum=node1,node2,node3

四、测试:
1.创建hbase识别的数据库:

  • CREATE TABLE hbase_table_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名称

  
hbase.columns.mapping 定义在hbase的列族 

2.使用sql导入数据
1) 新建hive的数据表:

CREATE TABLE pokes (foo INT, bar STRING);
2)批量插入数据:

hive> LOAD DATA LOCAL INPATH './examples/files/kv1.txt' OVERWRITE INTO TABLE

3)使用sql导入hbase_table_1:

hive> INSERT OVERWRITE TABLE hbase_table_1 SELECT * FROM pokes WHERE foo=86;

3. 查看数据

hive> select * from  hbase_table_1;  

这时可以登录Hbase去查看数据了
#bin/hbase shell
hbase(main):001:0> describe 'xyz'  
hbase(main):002:0> scan 'xyz'  
hbase(main):003:0> put 'xyz','100','cf1:val','www.360buy.com'


这时在Hive中可以看到刚才在Hbase中插入的数据了。

4 hive访问已经存在的hbase

使用CREATE EXTERNAL TABLE:


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



   <value>file:///usr/local/hive-0.8.0-bin/lib/hive_contrib.jar,file:///usr/local/hive-0.8.0-bin/lib/hive-hbase-handler-0.8.0.jar,file:///usr/local/hive-0.8.0-bin/lib/hbase-0.90.4.jar,file:///usr/local/hive-0.8.0-bin/lib/zookeeper-3.4.2.jar
</value>




<value>file:///usr/local/hive/lib/hive-hbase-handler-0.8.0.jar,file:///usr/local/hive/lib/hbase-0.90.4.jar,file:///usr/local/hive/lib/zookeeper-3.3.2.jar</value> 




-hiveconf hbase.zookeeper.quorum=master,slave1,slave2


HADOOP_HOME=/usr/local/hadoop-0.20.203.0




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




 INSERT OVERWRITE TABLE hbase_table_2 SELECT * FROM pokes WHERE foo=86; 




LOAD DATA LOCAL INPATH '/usr/local/hive-0.8.0-bin/examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;



https://cwiki.apache.org/confluence/display/Hive/HBaseIntegration

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-310221-1-1.html 上篇帖子: hadoop配置文件详解 下篇帖子: Apache Hadoop生态系统
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表