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表:
HBase中的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对应表中的数据如图:
什么?没有定时?定时任务你懂得,当然要用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,如下图:
随便点击一个表进去看看?比如点击刚才创建的红框内的表,如图:
* 总结
本节主要结合之前的框架知识,对HBase的结合使用进行了一个简单的拓展,希望大家能够理解其中的原理,灵活使用之。
个人微博:http://weibo.com/seal13
QQ大数据技术交流群(广告勿入):476966007
作者:Z尽际
链接:https://www.jianshu.com/p/7eedea1e620b
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
HBase框架基础(四)的更多相关文章
- HBase框架基础(五)
* HBase框架基础(五) 本节主要介绍HBase中关于分区的一些知识. * HBase的RowKey设计 我们为什么要讨论rowKey的设计?或者说为什么很多工作岗位要求有rowKey的优化设计经 ...
- HBase框架基础(三)
* HBase框架基础(三) 本节我们继续讨论HBase的一些开发常识,以及HBase与其他框架协调使用的方式.在开始之前,为了框架之间更好的适配,以及复习之前HBase的配置操作,请使用cdh版本的 ...
- HBase框架基础(一)
* HBase框架基础(一) 官方网址:http://hbase.apache.org/ * HBase是什么妖怪? 要解释HBase,我们就先说一说经常接触到的RDBMS,即关系型数据库: ** m ...
- HBase框架基础(二)
* HBase框架基础(二) 上一节我们了解了HBase的架构原理和模块组成,这一节我们先来聊一聊HBase的读写数据的过程. * HBase的读写流程及3个机制 HBase的读数据流程: 1.HRe ...
- Hadoop 框架基础(四)
** Hadoop 框架基础(四) 上一节虽然大概了解了一下 mapreduce,徒手抓了海胆,不对,徒手写了 mapreduce 代码,也运行了出来.但是没有做更深入的理解和探讨. 那么…… 本节目 ...
- HBase零基础高阶应用实战(CDH5、二级索引、实践、DBA)
HBase是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”.就像Bigtable利用了Google文件 ...
- Storm框架基础(一)
* Storm框架基础(一) Storm简述 如果你了解过SparkStreaming,那么Storm就可以类比着入门,在此我们可以先做一个简单的比较: 在SparkStreaming中: 我们曾尝 ...
- MVC系列——MVC源码学习:打造自己的MVC框架(四:了解神奇的视图引擎)
前言:通过之前的三篇介绍,我们基本上完成了从请求发出到路由匹配.再到控制器的激活,再到Action的执行这些个过程.今天还是趁热打铁,将我们的View也来完善下,也让整个系列相对完整,博主不希望烂尾. ...
- JavaScript框架设计(四) 字符串选择器(选择器模块结束)
JavaScript框架设计(四) 字符串选择器(选择器模块结束) 经过前面JavaScript框架设计(三) push兼容性和选择器上下文的铺垫,实现了在某一元素下寻找,现在终于进入了字符串选择器 ...
随机推荐
- C++链接和执行相关错误
http://blog.csdn.net/pipisorry/article/details/37610401 LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文 ...
- (转)<![CDATA[]]>和转义字符
被<![CDATA[]]>这个标记所包含的内容将表示为纯文本,比如<![CDATA[<]]>表示文本内容“<”. 此标记用于xml文档中,我们先来看看使用转义符的情 ...
- Android开发之AudioManager(音频管理器)具体解释
AudioManager简单介绍: AudioManager类提供了訪问音量和振铃器mode控制. 使用Context.getSystemService(Context.AUDIO_SERVICE)来 ...
- Maximum Bipartite Matching
算法旨在用尽可能简单的思路解决这个问题.理解算法也应该是一个越看越简单的过程,当你看到算法里的一串概念,或者一大坨代码,第一感觉是复杂,此时最好还是从样例入手.通过一个简单的样例,并编程实现,这个过程 ...
- HDU 5296 Annoying problem dfs序 lca set
Annoying problem Problem Description Coco has a tree, whose nodes are conveniently labeled by 1,2,…, ...
- android:异步任务asyncTask介绍及异步任务下载图片(带进度条)
为什么要用异步任务? 在android中仅仅有在主线程才干对ui进行更新操作.而其他线程不能直接对ui进行操作 android本身是一个多线程的操作系统,我们不能把全部的操作都放在主线程中操作 .比方 ...
- node12---mongodb
一.传统数据库技术回顾 数据库就是存储数据的,那么存储数据就用txt就行了啊,为什么要有数据库? 理由之1: 数据库有行.列的概念,数据有关系,数据不是散的. 老牌数据库,比如MySQL.SQL Se ...
- [jzoj NOIP2018模拟11.02]
嗯T1忘记取模了,100到20 嗯T2忘记了那啥定理,暴力也写炸了,这题我认 嗯T3线段树合并分裂没有写炸,考场上就知道妥妥的70分.但是,分数出的时候听到有人说暴力也是70分,我???脸黑,枉我敲了 ...
- cell的重用
cell的重用 简单来说,就是为了节省内存,系统通过一个重用的表示进行获取重用的控件 1 定义重用的标识 NSString * reuseId = @"hero" //这里的he ...
- C#调用Exe程序示例
在编写程序时经常会使用到调用可执行程序的情况,本文将简单介绍C#调用exe的方法.在C#中,通过Process类来进行进程操作. Process类在System.Diagnostics包中. 示例一 ...