数据如何从HBase读到MR
TableMapReduceUtil.initTableMapperJob是用来对内输入的,传递的参数之一,就是输入格式化类TableInputFormat.class,且会进行set操作:
job.setInputFormatClass(inputFormatClass);
TableInputFormat的父类TableInputFormatBase会创建TableRecordReader:
if (trr == null) {trr = new TableRecordReader();
}
Scan sc = new Scan(this.scan);
sc.setStartRow(tSplit.getStartRow());
sc.setStopRow(tSplit.getEndRow());
trr.setScan(sc);
trr.setHTable(table);
return trr;
所以记录读取器用的就是TableRecordReader。它会不断往下读:
@Override
public boolean nextKeyValue() throws IOException, InterruptedException {return this.recordReaderImpl.nextKeyValue();
}
查看实现类,说明K-V就是rowkey-Result对象:
public boolean nextKeyValue() throws IOException, InterruptedException {if (key == null) key = new ImmutableBytesWritable();//这里说明value就是Result对象if (value == null) value = new Result();try {try {//读取下一行内容value = this.scanner.next();if (logScannerActivity) {rowcount ++;if (rowcount >= logPerRowCount) {long now = System.currentTimeMillis();LOG.info("Mapper took " + (now-timestamp)+ "ms to process " + rowcount + " rows");timestamp = now;rowcount = 0;}}} catch (IOException e) {// do not retry if the exception tells us not to do soif (e instanceof DoNotRetryIOException) {throw e;}// try to handle all other IOExceptions by restarting// the scanner, if the second call fails, it will be rethrownLOG.info("recovered from " + StringUtils.stringifyException(e));if (lastSuccessfulRow == null) {LOG.warn("We are restarting the first next() invocation," +" if your mapper has restarted a few other times like this" +" then you should consider killing this job and investigate" +" why it's taking so long.");}if (lastSuccessfulRow == null) {restart(scan.getStartRow());} else {restart(lastSuccessfulRow);scanner.next(); // skip presumed already mapped row}value = scanner.next();numRestarts++;}if (value != null && value.size() > 0) {//这里getRow得到的就是RowKeykey.set(value.getRow());lastSuccessfulRow = key.get();return true;}updateCounters();return false;} catch (IOException ioe) {if (logScannerActivity) {long now = System.currentTimeMillis();LOG.info("Mapper took " + (now-timestamp)+ "ms to process " + rowcount + " rows");LOG.info(ioe);String lastRow = lastSuccessfulRow == null ?"null" : Bytes.toStringBinary(lastSuccessfulRow);LOG.info("lastSuccessfulRow=" + lastRow);}throw ioe;}
}
nextKeyValue()方法用来不断往下读,value就是Result对象。往下读取,调用的是this.scanner.next()。这里的K set的就是得到的Row Key。说明数据会以Row Key作为K,以Result对象作为V。
当我们在Mapper中进行如下操作,就能拿到单元格中的信息:
Cell cell = value.getColumnLatestCell("cf".getBytes(), "line".getBytes());
数据如何从HBase读到MR相关推荐
- 大数据学习之HBase入门笔记
文章目录 一.HBase简介 1.1.HBase定义 1.2.HBase数据模型 1.2.1.HBase逻辑结构 1.2.2.物理存储结构 1.2.3.数据模型 1.3.HBase基础架构(入门版) ...
- 大数据最佳实践-hbase
目录 概述 架构 MemStore WAL HMaster 读流程 写流程 Memstore Flush Flush过程 StoreFile Compaction Region Split 优化 re ...
- 【学习笔记】大数据技术之HBase
大数据技术之HBase 思考? 1. RegionServer和Master的区别? 2. Hbase端口 3. HBase写流程中,为什么要和zk进行交互? 第 1 章 HBase 简介 1.1 H ...
- 大数据技术之HBase(超级详细)
大数据技术之HBase 第1章 HBase简介 1.1 什么是HBase HBase的原型是Google的BigTable论文,受到了该论文思想的启发,目前作为Hadoop的子项目来开发维护,用于支持 ...
- 分布式爬虫系统设计、实现与实战:爬取京东、苏宁易购全网手机商品数据+MySQL、HBase存储...
http://blog.51cto.com/xpleaf/2093952 1 概述 在不用爬虫框架的情况,经过多方学习,尝试实现了一个分布式爬虫系统,并且可以将数据保存到不同地方,类似MySQL.HB ...
- 大数据面试题Hbase篇
目录 1.Hbase是什么? 2.HBase 的特点是什么? 3.HBase 和 Hive 的区别? 4.描述 HBase 的 rowKey 的设计原则? 5.请详细描述 HBase 中一个 cell ...
- 分布式爬虫系统设计、实现与实战:爬取京东、苏宁易购全网手机商品数据+MySQL、HBase存储
1 概述 在不用爬虫框架的情况,经过多方学习,尝试实现了一个分布式爬虫系统,并且可以将数据保存到不同地方,类似MySQL.HBase等. 基于面向接口的编码思想来开发,因此这个系统具有一定的扩展性,有 ...
- 大数据-NoSQL数据库-HBase操作框架:Phoenix【Java写的基于JDBC API的操作HBase数据库的SQL引擎框架;低延迟、事务性、可使用sql语句、提供JDBC接口】
一.Phoenix概述 1.Phoenix 定义 Phoenix 最早是 saleforce 的一个开源项目,后来成为 Apache 的顶级项目. Phoenix 构建在 HBase 之上的开源 SQ ...
- 大数据技术之HBase(二)HBase原理简介
一.HBase定义 1.1 HBase定义 HBase 是一种分布式.可扩展.支持海量数据存储的 NoSQL 数据库非结构化数据存储的数据库,基于列的模式存储.利用Hadoop HDFS作为其文件存储 ...
最新文章
- !! 机器学习常用工具
- 产品经理必了解的3个app技术框架
- 语言取10的整数倍_C语言结构体用法很多,坑也很多
- 三星Galaxy S22售价曝光:国行可能4999元起
- 系统测试与端到端测试:哪一个更适合选择?
- 【优化算法】水基湍流优化算法(TFWO) 【含Matlab源码 1585期】
- 一键备份服务器文件夹权限,教大家一键设置局域网共享文件夹权限
- Word 插入参考文献 通过尾注插入并更改尾注罗马数字为阿拉伯数字
- Python项目分析:预测双色球福利彩票中奖号码(随便玩玩,不要当真)
- python罗盘时钟代码_jQuery css3创意的罗盘时钟代码
- linux的命令解释器-----shell
- casio计算机隐藏游戏fx-82ES,CASIOlowbar;fx-82ES计算器隐藏功能
- electron打开文件的几种实现方式
- 令人拍案叫绝的Wasserstein GAN(转载)
- 蒙纳士大学 英伟达发布 2021 年医疗视觉问答
- 我自己很喜欢的几款文案编辑软件
- springboot整合mybatis (三) 一对多配置
- 远程桌面瘦客户机的优点和缺点
- 基于springboot的小区社区物业管理系统
- Google 的怪异域名大全
热门文章
- Python技巧之函数拆包裹
- apache重定向无效
- DevExpress的DateEdit设置显示日期和时间
- 百度推出飓风算法,严厉打击恶劣采集
- 快要普通话考试了,急需最后一题的根据话题自由讲话的演讲稿!(不要那些已经被用过...
- [技术速递]MSDN在线改版,新风格新体验
- Cassandra使用 —— 一个气象站的例子
- phpstorm设置的快捷键突然失效了,提示: IdeaVim ...
- MySQL时间增加、字符串拼接
- Android OpenGL ES 入门系列(一) --- 了解OpenGL ES的前世今生