HBase框架基础(四)

* 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來源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

原文地址:https://www.cnblogs.com/wzlbigdata/p/8277726.html

时间: 2024-08-28 20:06:22

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

HBase框架基础(五)

* HBase框架基础(五) 本节主要介绍HBase中关于分区的一些知识. * HBase的RowKey设计 我们为什么要讨论rowKey的设计?或者说为什么很多工作岗位要求有rowKey的优化设计经验?这个我们需要简单的谈一谈HBase的存储情景. 简单讨论: ** 一个Table表可以划分为多个Region ** 每个Regin维护着不同的范围的rowKey,如何维护呢?Region提供了StartKey和EndKey来表示某一个范围内的rowKey,比如,我们有3个Region,维护的ro

HBase框架基础(三)

* HBase框架基础(三) 本节我们继续讨论HBase的一些开发常识,以及HBase与其他框架协调使用的方式.在开始之前,为了框架之间更好的适配,以及复习之前HBase的配置操作,请使用cdh版本的HBase开启动相关服务,记得,配置HMaster的HA. 为了方便,cdh版本hbase下载传送门: 链接:http://pan.baidu.com/s/1dFsyakT 密码:xji7,相关配置请参考HBase框架基础(一) * HBase的数据迁移 原因:我们需要问一个问题,何时,HBase的

HBase框架基础(二)

* HBase框架基础(二) 上一节我们了解了HBase的架构原理和模块组成,这一节我们先来聊一聊HBase的读写数据的过程. * HBase的读写流程及3个机制 HBase的读数据流程: 1.HRegionServer保存着meta表以及表数据,要访问表数据,首先Client先去访问zookeeper,从zookeeper里面获取meta表所在的位置信息,即找到这个meta表在哪个HRegionServer上保存着. 2.接着Client通过刚才获取到的HRegionServer的IP来访问M

Hadoop 框架基础(四)

** Hadoop 框架基础(四) 上一节虽然大概了解了一下 mapreduce,徒手抓了海胆,不对,徒手写了 mapreduce 代码,也运行了出来.但是没有做更深入的理解和探讨. 那么-- 本节目标: * 深入了解 mapreduce 过程 * 成功部署 Hadoop 集群 ** mapreduce 原理 想要了解 mapreduce 原理,我们必须搞清楚处理数据时的每一个重要阶段,首先,贴上一张官方的图: 我们依次讨论每一个过程以及该过程对应的作用: 我先在这里假设一个情景,我现在有一个

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

HBase是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”.就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力.HBase是Apache的Hadoop项目的子项目.HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库.另一个不同的是HBase基于列的而不是基于行的模式.

Storm框架基础(一)

* Storm框架基础(一) Storm简述 如果你了解过SparkStreaming,那么Storm就可以类比着入门,在此我们可以先做一个简单的比较:  在SparkStreaming中: 我们曾尝试过每秒钟的实时数据处理,或者使用Window若干时间范围内的数据统一处理结果.亦或统计所有时间范围内的数据结果. 在Storm中: 我们可以根据进来的每一条数据进行实时处理,也就是说,Storm处理数据的速度,要小于1秒,也就是毫秒级别的. 如果你疑问,1秒处理1次数据,和进来1条数据处理1次有什

框架基础:关于ajax设计方案(三)---集成ajax上传技术

之前发布了ajax的通用解决方案,核心的ajax发布请求,以及集成了轮询.这次去外国网站逛逛,然后发现了ajax level2的上传文件,所以就有了把ajax的上传文件集成进去的想法,ajax方案的level2的改进就不介绍了,不清楚的可到前几篇博客去看看.我们直接切入主题. 概念介绍: 1. js的FormData:js中在新的版本中已经支持了FormData对象,可以初始化一个空的form,或者初始化已经存在的form,浏览器测试代码. 2. 浏览器的支持:浏览器已支持input=file的

框架基础:ajax设计方案(三)---集成ajax上传技术

之前发布了ajax的通用解决方案,核心的ajax发布请求,以及集成了轮询.这次去外国网站逛逛,然后发现了ajax level2的上传文件,所以就有了把ajax的上传文件集成进去的想法,ajax方案的level2的改进就不介绍了,不清楚的可到前几篇博客去看看.我们直接切入主题. 概念介绍: 1. js的FormData:js中在新的版本中已经支持了FormData对象,可以初始化一个空的form,或者初始化已经存在的form,浏览器测试代码. 2. 浏览器的支持:浏览器已支持input=file的

MVC系列——MVC源码学习:打造自己的MVC框架(四:自定义视图)

前言:通过之前的三篇介绍,我们基本上完成了从请求发出到路由匹配.再到控制器的激活,再到Action的执行这些个过程.今天还是趁热打铁,将我们的View也来完善下,也让整个系列相对完整,博主不希望烂尾.对于这个系列,通过学习源码,博主也学到了很多东西,在此还是把博主知道的先发出来,供大家参考. 本文原创地址:http://www.cnblogs.com/landeanfen/p/6019719.html MVC源码学习系列文章目录: MVC系列——MVC源码学习:打造自己的MVC框架(一) MVC