hbase MapReduce程序样例入门
1、先看一个标准的hbase作为数据读取源和输出源的样例:
1 2 3 4 5 6 7 8 |
|
首先创建配置信息和作业对象,设置作业的类。这些和正常的mapreduce一样,唯一不一样的就是数据源的说明部分,TableMapReduceUtil的initTableMapperJob和initTableReducerJob方法来实现。
用如上代码:
数据输入源是hbase的inputTable表,执行mapper.class进行map过程,输出的key/value类型是 ImmutableBytesWritable和Put类型,最后一个参数是作业对象。需要指出的是需要声明一个扫描读入对象scan,进行表扫描读取数 据用,其中scan可以配置参数,这里为了例子简单不再详述。
数据输出目标是hbase的outputTable表,输出执行的reduce过程是reducer.class类,操作的作业目标是job。与map比 缺少输出类型的标注,因为他们不是必要的,看过源代码就知道mapreduce的TableRecordWriter中write(key,value) 方法中,key值是没有用到的。value只能是Put或者Delete两种类型,write方法会自行判断并不用用户指明。
接下来就是mapper类:
1 2 3 4 5 6 7 8 9 10 11 |
|
继承的是hbase中提供的TableMapper类,其实这个类也是继承的MapReduce类。后边跟的两个泛型参数指定类型是mapper输 出的数据类型,该类型必须继承自Writable类,例如可能用到的put和delete就可以。需要注意的是要和initTableMapperJob 方法指定的数据类型一直。该过程会自动从指定hbase表内一行一行读取数据进行处理。
然后reducer类:
1 2 3 4 5 6 7 8 |
|
reducer继承的是TableReducer类。后边指定三个泛型参数,前两个必须对应map过程的输出key/value类型,第三个必须是 put或者delete。write的时候可以把key写null,它是不必要的。这样reducer输出的数据会自动插入outputTable指定的 表内。
2、有时候我们需要数据源是hdfs的文本,输出对象是hbase。这时候变化也很简单:
1 2 3 4 5 6 7 8 9 10 11 |
|
你会发现只需要像平常的mapreduce的作业声明过程一样,指定mapper的执行类和输出key/value类型,指定 FileInputFormat.setInputPaths的数据源路径,输出声明不变。便完成了从hdfs文本读取数据输出到hbase的命令声明过 程。 mapper和reducer如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
mapper还依旧继承原来的MapReduce类中的Mapper即可。同样注意这前后数据类型的key/value一直性。
3、最后就是从hbase中的表作为数据源读取,hdfs作为数据输出,简单的如下:
1 2 3 4 5 6 7 8 9 10 |
|
mapper和reducer简单如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
最后说一下TableMapper和TableReducer的本质,其实这俩类就是为了简化一下书写代码,因为传入的4个泛型参数里都会有固定的参数类型,所以是Mapper和Reducer的简化版本,本质他们没有任何区别。源码如下:
1 2 3 4 5 6 7 |
|
好了,可以去写第一个wordcount的hbase mapreduce程序了。
ps:另外详细的读写优化可以看之后的一篇,更为详尽的内容看这里
hbase MapReduce程序样例入门相关推荐
- S7-200Smart 恒压供水程序样例+485通讯样例 + 触 摸屏样例子
S7-200Smart 恒压供水程序样例+485通讯样例 + 触 摸屏样例子. 1.此程序样例为一拖二恒压供水样例,采用S7-200Smart PLC和smart 700触摸屏人机与abb变频器485 ...
- S7-200Smart 恒压供水程序样例+485通讯样例 + 触摸屏样例子
S7-200Smart 恒压供水程序样例+485通讯样例 + 触摸屏样例子. 1.此程序样例为一拖二恒压供水样例,采用S7-200Smart PLC和smart 700触摸屏人机与abb变频器485通 ...
- 安川机器人DX200运输带同步程序样例
安川机器人DX200运输带同步程序样例,自己做的,在生产中.发电子邮箱 17100625757785033永***j
- 全套S7-1200一拖三恒压供水程序样例+PID样例+触摸屏样例
全套S7-1200一拖三恒压供水程序样例+PID样例+触摸屏样例 . 1.此程序采用S7-1200PLC和KTP1000PN触摸屏人机执行PID控制变频器实现恒压供水. 包括plc程序,触摸屏程序,项 ...
- 04-ABB工业机器人中断程序样例
前段时间一个项目需要机器人将自己的坐标定时发送给上位机,我师父随手写了一个中断样例,在这里分享一下: 首先介绍两个RAPID指令: 1.IDelete:删除中断,用于取消或者删除中断预定. 2.CON ...
- C语言必知-指针数组(附程序样例和详解)
指针数组 除了类型之外,指针变量和其他的变量很相似,只不过加上指针标识就行 例如int *api[10],由于下标引用的优先级高于间接访问(就是解引用),因此 api是一个数组,数组中的元素的类型就是 ...
- python运行代码示例_python程序样例
<Python和HDF 5大数据应用>--2.2 设置 本节书摘来自异步社区<Python和HDF 5大数据应用>一书中的第2章,第2.2节,作者[美]Andrew Colle ...
- C++基础教学(含程序样例)
解决闪现问题 在return 0; 的代码上方添加 system("PAUSE"); cout 代表"控制台输出"(console output),必须在代码行 ...
- 内存区划分;内存分配;堆、栈概念分析;动态内存管理数据结构及程序样例;核心态与用户态...
一. 在c中分为这几个存储区1.栈 - 由编译器自动分配释放 2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初 ...
- java程序样例_一个完整的java程序示例
一个完整的java程序示例 2020-08-15 05:22 阅读数 74 第一个java程序 package mypack; //相当于一个目录 public class HelloWorld{ p ...
最新文章
- [原]unity3d之http多线程异步资源下载
- 人月神话第一篇阅读笔记
- C++中有关queue常用函数的用法及其注意要项
- 怎样编写测试类测试分支_编写干净的测试-被认为有害的新内容
- 计算机配置界面在那,在哪里设置关机画面?设置为原来的经典界面?
- .net页面调用JS时出现乱码
- 使用VS2010的Database项目模板统一管理数“.NET研究”据库对象
- redirect与forward跳转的区别
- HTML5 开源游戏引擎 LayaAir
- Srs之Clion编译
- ZooKeeper分布式过程协同技术详解2——了解ZooKeeper
- linux+加载迅雷插件,linux下使用aria2c + chrome插件取代迅雷
- SpringBoot31 整合SpringJDBC、整合MyBatis、利用AOP实现多数据源
- SQLite3 数据库全文搜索 - SQL Server - 红黑联盟
- cpu倍频模式怎么调_BIOS:增加倍频比率调整选项
- 每个 iOS 开发者都应该关注的 5 个网站
- vue 禁止input输入框输入特殊字符和汉字
- 高新技术企业补助政策
- 200行Perl 语言实现 VCD 转ATE测试pattern ---pattern的解析
- GX Works2 SFC编程基础