* HBase框架基础(四)

上一节我们介绍了如何使用HBase搞一些MapReduce小程序,其主要作用呢是可以做一些数据清洗和分析或者导入数据的工作,这一节我们来介绍如何使用HBase与其他框架进行搭配使用。

* HBase与Hive

在开始HBase与Hive搭配使用前,我们复习一下这两个框架的特点:

Hive:

** 数据仓库

** 用于数据分析,数据清洗等等

** 基于MapReduce

** 延迟高,离线使用

HBase:

** 面向列存储的非关系型数据库

** 存储数据

** 基于HDFS中的文件

** 低延迟,接入在线业务使用

HBase与Hive的部署:

提前工作:

1、拷贝Hive所需的一些Jar包,使用ln做软连接也是可以的,比如:

$ export HBASE_HOME=/opt/modules/cdh/hbase-0.98.6-cdh5.3.6/

$ export HIVE_HOME=/opt/modules/cdh/hive-0.13.1-cdh5.3.6/

$ ln -s $HBASE_HOME/lib/hbase-common-0.98.6-cdh5.3.6.jar  $HIVE_HOME/lib/hbase-common-0.98.6-cdh5.3.6.jar

$ ln -s $HBASE_HOME/lib/hbase-server-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-server-0.98.6-cdh5.3.6.jar

$ ln -s $HBASE_HOME/lib/hbase-client-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-client-0.98.6-cdh5.3.6.jar

$ ln -s $HBASE_HOME/lib/hbase-protocol-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-protocol-0.98.6-cdh5.3.6.jar

$ ln -s $HBASE_HOME/lib/hbase-it-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-it-0.98.6-cdh5.3.6.jar

$ ln -s $HBASE_HOME/lib/htrace-core-2.04.jar $HIVE_HOME/lib/htrace-core-2.04.jar

$ ln -s $HBASE_HOME/libhbase-hadoop2-compat-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-hadoop2-compat-0.98.6-cdh5.3.6.jar

$ ln -s $HBASE_HOME/lib/hbase-hadoop-compat-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-hadoop-compat-0.98.6-cdh5.3.6.jar

$ ln -s $HBASE_HOME/lib/high-scale-lib-1.1.1.jar $HIVE_HOME/lib/high-scale-lib-1.1.1.jar

2、修改hive-site.xml文件,添加如下内容:

 
 

案例一:通过建立Hive可以关联的HBase表,使之在操作Hive同时也能操作HBase表,比如数据的导入。

Step1、在Hive中创建表同时关联HBase

hive (default)> CREATE TABLE hive_hbase_emp_table(

empno int,

ename string,

job string,

mgr int,

hiredate string,

sal double,

comm double,

deptno int)

STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:ename,info:job,info:mgr,info:hiredate,info:sal,info:comm,info:deptno")

TBLPROPERTIES ("hbase.table.name" = "hbase_emp_table");

完成之后,可以分别进入Hive和HBase查看,都生成了对应的表

Hive中:

 
 

HBase中:

 
 

Step2、想要向hive_hbase_emp_table表载入数据,需要再创建一个管理表作为中转,因为你不能够直接将本地的数据load到刚才的那个表。

hive (default)> create table emp(

empno int,

ename string,

job string,

mgr int,

hiredate string,

sal double,

comm double,

deptno int)

row format delimited fields terminated by '\t';

Step3、向emp这个管理表中load数据

hive> load data local inpath '/home/z/Desktop/emp.txt' into table emp;

Step4、通过insert命令将emp中的数据导入到hive_hbase_emp_table和hbase_emp_table表中

hive> insert into table hive_hbase_emp_table select * from emp;

Step5、测试,查看Hive和HBase对应的表中是否已经成功的同步的插入了数据

Hive中的hive_hbase_emp_table表:

 
对应HDFS的文件数据路径:/user/hive/warehouse/hive_hbase_emp_table

HBase中的hbase_emp_table表:

 
对应HDFS的文件数据路径:/hbase/data/default/hbase_emp_table

案例二:比如在HBase中已经存储了某一张表hbase_emp_table,然后在Hive中创建一个外部表来关联HBase中的hbase_emp_table这张表,使之可以借助Hive来分析HBase这张表中的数据。

Step1、在Hive中创建外部表

hive> CREATE EXTERNAL TABLE hive_hbase_emp_ex_table(

empno int,

ename string,

job string,

mgr int,

hiredate string,

sal double,

comm double,

deptno int)

STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:ename,info:job,info:mgr,info:hiredate,info:sal,info:comm,info:deptno")

TBLPROPERTIES ("hbase.table.name" = "hbase_emp_table");

Step2、关联后就可以使用Hive函数进行一些分析操作了,在此我们玩个简单的?比如在Hive的这个外部关联表中查询所有数据吧!

hive> select * from hive_hbase_emp_ex_table;

如图所示,即成功:

 
 

* HBase与Sqoop

我们之前使用Sqoop做了在Hive和Mysql之间的数据传输操作,当然它也可以在HBase和Mysql之间操作,比如,每天都有10万人注册你的网站,你的Mysql数据库每天都有大量的数据注入,那么能不能每天都定时的将Mysql数据库中的数据抽取到HBase呢?当然可以,比如:

注意:如果对应的数据库和表没有,请查看前文内容,因为本系列教程的内容是连续的。内容如下:

 
 

Sqoop的sqoop-evn.sh配置如下:

 
 

执行Sqoop操作:

$ bin/sqoop import \

--connect jdbc:mysql://z01:3306/db_demo \

--username root \

--password 123456 \

--table user \

--columns "id,name,sex" \

--column-family "info" \

--hbase-create-table \

--hbase-row-key "id" \

--hbase-table "hbase_user_sqoop_table" \

--num-mappers 1  \

--split-by id

执行如图:

 
后面还有很长的内容,就不截图展示了

任务完成后查看HBase对应表中的数据如图:

 
Bingo!

什么?没有定时?定时任务你懂得,当然要用Oozie(一般不用Crontab),不明白的请参考Oozie的对应章节

* HBase与Hue

HBase与Hue整合当然是为了更好的体验,可以使用带有用户界面的操作去管理HBase~

部署姿势:

Step1、修改hue.ini配置,如下图:

 
 

 

Step2、启用HBase的thrift(想要了解thrift是什么请自行百度简单了解下即可)

$ bin/hbase-daemon.sh start thrift

Step3、启动Hue进程访问测试

$ build/env/bin/supervisor

通过z01:8888登录Hue之后,点击Data Browser中的HBase,如下图:

 
 

随便点击一个表进去看看?比如点击刚才创建的红框内的表,如图:

 
Bingo!

* 总结

本节主要结合之前的框架知识,对HBase的结合使用进行了一个简单的拓展,希望大家能够理解其中的原理,灵活使用之。


个人微博:http://weibo.com/seal13

QQ大数据技术交流群(广告勿入):476966007


作者:Z尽际
链接:https://www.jianshu.com/p/7eedea1e620b
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

HBase框架基础(四)的更多相关文章

  1. HBase框架基础(五)

    * HBase框架基础(五) 本节主要介绍HBase中关于分区的一些知识. * HBase的RowKey设计 我们为什么要讨论rowKey的设计?或者说为什么很多工作岗位要求有rowKey的优化设计经 ...

  2. HBase框架基础(三)

    * HBase框架基础(三) 本节我们继续讨论HBase的一些开发常识,以及HBase与其他框架协调使用的方式.在开始之前,为了框架之间更好的适配,以及复习之前HBase的配置操作,请使用cdh版本的 ...

  3. HBase框架基础(一)

    * HBase框架基础(一) 官方网址:http://hbase.apache.org/ * HBase是什么妖怪? 要解释HBase,我们就先说一说经常接触到的RDBMS,即关系型数据库: ** m ...

  4. HBase框架基础(二)

    * HBase框架基础(二) 上一节我们了解了HBase的架构原理和模块组成,这一节我们先来聊一聊HBase的读写数据的过程. * HBase的读写流程及3个机制 HBase的读数据流程: 1.HRe ...

  5. Hadoop 框架基础(四)

    ** Hadoop 框架基础(四) 上一节虽然大概了解了一下 mapreduce,徒手抓了海胆,不对,徒手写了 mapreduce 代码,也运行了出来.但是没有做更深入的理解和探讨. 那么…… 本节目 ...

  6. HBase零基础高阶应用实战(CDH5、二级索引、实践、DBA)

    HBase是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”.就像Bigtable利用了Google文件 ...

  7. Storm框架基础(一)

    * Storm框架基础(一) Storm简述 如果你了解过SparkStreaming,那么Storm就可以类比着入门,在此我们可以先做一个简单的比较:  在SparkStreaming中: 我们曾尝 ...

  8. MVC系列——MVC源码学习:打造自己的MVC框架(四:了解神奇的视图引擎)

    前言:通过之前的三篇介绍,我们基本上完成了从请求发出到路由匹配.再到控制器的激活,再到Action的执行这些个过程.今天还是趁热打铁,将我们的View也来完善下,也让整个系列相对完整,博主不希望烂尾. ...

  9. JavaScript框架设计(四) 字符串选择器(选择器模块结束)

    JavaScript框架设计(四) 字符串选择器(选择器模块结束) 经过前面JavaScript框架设计(三) push兼容性和选择器上下文的铺垫,实现了在某一元素下寻找,现在终于进入了字符串选择器 ...

随机推荐

  1. C#高级编程五十八天----并行集合

    并行集合 对于并行任务,与其相关紧密的就是对一些共享资源,数据结构的并行訪问.常常要做的就是对一些队列进行加锁-解锁,然后运行类似插入,删除等等相互排斥操作. .NET4提供了一些封装好的支持并行操作 ...

  2. poj_1952最大下降子序列,统计个数

    其实不算难的一道题,但憋了我好久,嗯,很爽. #include<iostream> #include<cstdio> #include<string.h> #inc ...

  3. hdoj--4501--小明系列故事——买年货(三维背包)

    小明系列故事--买年货 Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Tota ...

  4. gpg 的使用

    GPG入门教程 GpG使用指南 1. 安装 源码编译安装:源码下载地址 ./configure make make install 直接安装编译好的二进制文件 # Debian / Ubuntu 环境 ...

  5. BZOJ 2127 二元关系

    题意: 思路: 先把所有的值加起来 最小割割哪儿 就代表那个地方不选 一减 剩下的就是 最大值了 //By SiriusRen #include <cstdio> #include < ...

  6. HD-ACM算法专攻系列(5)——N!

    题目描述: 源码: #include"iostream" using namespace std; int main() { int n, digit, carry, tmp; i ...

  7. POJ 3253 Fence Repair C++ STL multiset 可解 (同51nod 1117 聪明的木匠)

    Fence Repair Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 53106   Accepted: 17508 De ...

  8. JavaScript学习——JS对象和全局函数

    1. Array对象 数组的特点:长度可变!数组的长度=最大角标+1 2.Boolean对象 如果value 不写,那么默认创建的结果为false 3.Date对象 getTime()返回1970年1 ...

  9. solarwind之安装

      1.  安装组件   2.  安装组件sql   3.  安装   4.  接受协议   5.  安装路径   6.  安装状态   7.  继续   8.  激活     9.  完成安装

  10. LeetCode Golang实现 1. 两数之和

    1. 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这 ...