HBase框架基础(三)

* HBase框架基础(三)

本节我们继续讨论HBase的一些开发常识,以及HBase与其他框架协调使用的方式。在开始之前,为了框架之间更好的适配,以及复习之前HBase的配置操作,请使用cdh版本的HBase开启动相关服务,记得,配置HMaster的HA。

为了方便,cdh版本hbase下载传送门:

链接:http://pan.baidu.com/s/1dFsyakT 密码:xji7,相关配置请参考HBase框架基础(一)

* HBase的数据迁移

原因:我们需要问一个问题,何时,HBase的数据需要被迁移?例如:集群架构变更,服务器硬件,或者软件升级等等。

方案:

1、将整个HBase目录迁移到另一个集群

distcp方式:

尖叫提示:以下NameNode为两个独立的物理集群,不是HA

$ bin/hadoop distcp hdfs://NameNode1:8020/hbase hdfs://NameNode2:8020/hbase

 hftp方式:

$ bin/hadoop distcp -i hftp://sourceFS:50070/hbase hdfs://dstFS:8020/hbase

当完成了整个迁移后,可以使用hbck来恢复一下hbase的元数据,因为元数据也有可能在迁移的过程中出现问题。

hbck修复:

$ bin/hbase hbck -fixMeta

2、自定义MapReduce程序

这种方式主要是自己写一个MapReduce程序,自行的读取集群中的某一个HBase表中的数据,然后写入到另一个集群的HBase的表中。稍后我们做一个实现。

* BulkLoad加载文件到HBase表

功能:将本地文件数据导入到HBase当中

原理:BulkLoad会将tsv/csv格式的文件编程hfile文件,然后再进行数据的导入,这样可以避免大量数据导入时造成的集群写入压力过大。

作用:

1、减小HBase集群插入数据的压力

2、提高了Job运行速度,降低Job执行时间

BulkLoad举例测试:

Step1、配置临时环境变量,与上一节一样

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

$ export HADOOP_HOME=/opt/modules/cdh/hadoop-2.5.0-cdh5.3.6

$ export HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase mapredcp`

Step2、创建一个新的HBase表

$ bin/hbase shell

hbase(main):001:0> create ‘fruit_bulkload‘,‘info‘

Step3、将tsv/csv文件转化为HFile (别忘了要确保你的fruit格式的文件fruit.txt在input目录下)

$ /opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/bin/yarn jar \

/opt/modules/cdh/hbase-0.98.6-cdh5.3.6/lib/hbase-server-0.98.6-cdh5.3.6.jar importtsv \

-Dimporttsv.bulk.output=/output_file \

-Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:color \

fruit hdfs://mycluster/input

完成之后,你会发现在HDFS的根目录下出现了一个output_file文件夹,里面存放的就是HFile文件

Step4、把HFile导入到HBase表fruit_bulkload

$ /opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/bin/yarn jar \

/opt/modules/cdh/hbase-0.98.6-cdh5.3.6/lib/hbase-server-0.98.6-cdh5.3.6.jar \

completebulkload /output_file fruit_bulkload

Step5、查看使用bulkLoad方式导入的数据,如图:

* HBase中的自定义MapReduce

在Hadoop的学习阶段,我们了解了如何编写MapReduce代码,那么HBase中自定义MapReduce也是大同小异。接下来我们就看看应该如何操作,实现将文件中的数据或HBase表中的数据通过自定义MapReduce导入到HBase。

案例一:HBase表数据到表数据的导入

Hadoop中:

我们分别继承了Mapper和Reducer两个类,然后编写mapreduce代码

而HTable(HBase)中:

我们要继承的是TableMapper和TableReducer从而编写mapreduce代码

我们依照Hadoop中WordCount的示例,分为3个步骤走:

目标:将fruit表中的一部分数据,通过MapReduce迁入到fruit_mr表中(fruit_mr表是个新的空的表)
Step1、自行建立项目,以来不再赘述请参考上一节内容

Step2、构建ReadFruitMapper类,用于读取fruit表中的数据

Step3、构建WriteFruitMRReducer类,用于将读取到的fruit表中的数据写入到fruit_mr表中

Step4、构建Fruit2FruitMRJob类,用于组装运行Job任务

Step5、主函数中调用运行该Job任务

尖叫提示:导入数据前请确保fruit_mr表是存在的,运行后如图:

当然,以上步骤操作完成之后,你也可以打出一个Jar包然后再CRT中尝试执行,在此不再赘述了

案例二:文件数据到HBase表数据的导入

与案例一不同的是,本次是将数据从源文件读取出来,解析后,写入到HBase的某张表中。而此时Mapper不再继承自TableMapper,而是直接继承自Mapper了。

目标:将文件中的数据导入到fruit_mr_from_txt表中

Step1、自行建立项目,以来不再赘述请参考案例一的内容(不新建项目也可以,这个阶段你应该已经懂得怎么弄)

Step2、构建ReadFruitFromHDFSMapper类,用于读取tsv格式的fruit.txt文件中的数据

Step3、构建WriteFruitMRFromTxtReducer类

Step4、组装Job

 

Step5、运行测试

尖叫提示:测试前确保fruit_mr_from_txt表已经创建,测试后scan一下这个表如图:

* 总结

Congratulations!你已经掌握了如何使用MapReduce来操作HBase,这将有助于你在工作中更加灵活的操作数据。



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

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


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

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

时间: 2024-10-06 04:54:40

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的读写流程及3个机制 HBase的读数据流程: 1.HRegionServer保存着meta表以及表数据,要访问表数据,首先Client先去访问zookeeper,从zookeeper里面获取meta表所在的位置信息,即找到这个meta表在哪个HRegionServer上保存着. 2.接着Client通过刚才获取到的HRegionServer的IP来访问M

HBase框架基础(四)

* HBase框架基础(四) 上一节我们介绍了如何使用HBase搞一些MapReduce小程序,其主要作用呢是可以做一些数据清洗和分析或者导入数据的工作,这一节我们来介绍如何使用HBase与其他框架进行搭配使用. * HBase与Hive 在开始HBase与Hive搭配使用前,我们复习一下这两个框架的特点: Hive: ** 数据仓库 ** 用于数据分析,数据清洗等等 ** 基于MapReduce ** 延迟高,离线使用 HBase: ** 面向列存储的非关系型数据库 ** 存储数据 ** 基于

框架基础:关于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的

(C/C++)基于SharpUI控件库的插件式框架开发--第三篇框架基础服务库

一个框架基础的东西,一般也是操作的最基础的类,比如char.int.bool等,有时出现内存泄露的问题导致错误的抛出,但是C++开发有的时候就算是抛出异常,那也是靠经验来积累才能非常快速准确的找出错误所在,这就需要在框架中需要添加日志管理的接口,日志管理的好处就是开发者自身在找异常时提供参考,另一个就是如果用户操作时出现问题,也可将日志反馈,帮助快速解决问题:总之了为了更好的扩展完善我的框架,我详细列一下这个基础服务库(XPCore)包含内容: 虽说sharpui控件库内封闭好string类,但

深入浅出ExtJS(第三版) Ext框架基础

1 1.准备工作 2 >.深入浅出Ext JS(第3版) 3 >.随书代码(图灵社区) 4 >.ExtJS 4.1.1a 5 6 第2章 Ext框架基础 7 2.1 面向对象的基础架构 8 2.1.1 创建类 9 >.定义一个类: 10 Ext.define('demo.Demo',{ 11 name:'Lingo', 12 hello:function () { 13 return 'Hello'+this.name; 14 } 15 }); 16 //第一个参数是字符串类型的类

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

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

(转)Hibernate框架基础——一对多关联关系映射

http://blog.csdn.net/yerenyuan_pku/article/details/52746413 上一篇文章Hibernate框架基础——映射集合属性详细讲解的是值类型的集合(即集合元素是普通类型).现在从本文开始我们就要介绍实体类型的集合(即集合元素是另一个实体)了. 一对多关联关系映射 我们还是以一个活生生的例子来详解一对多关联关系映射吧!就以部门和员工的关系为例. 单向关联:仅仅建立从Employee到Department的多对一关联,即仅仅在Employee类中定义