`
刘小小尘
  • 浏览: 67538 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

MapReduce 中如何处理HBase中的数据?如何读取HBase数据给Map?如何将结果存储到HBase中?

 
阅读更多
MapReduce 中如何处理HBase中的数据?如何读取HBase数据给Map?如何将结果存储到HBase中?


Mapper类:包括一个内部类(Context)和四个方法(setup,map,cleanup,run);
setup,cleanup用于管理Mapper生命周期中的资源。setup -> map -> cleanup , run方法执行了这个过程;
map方法用于对一次输入的key/value对进行map动作,对应HBase操作也就是一行的处理;


job的配置:
1. TableInputFormat完成了什么功能?
(1)通过设置conf.set(TableInputFormat.INPUT_TABLE,"udc_sell");设定HBase的输入表;
设置conf.set(TableInputFormat.SCAN, TableMRUtil.convertScanToString(scan));设定对HBase输入表的scan方式;


(2)通过TableInputFormat.setConf(Configration conf)方法初始化scan对象;
scan对象是从job中设置的对象,以字符串的形式传给TableInputFormat,在TableInputFormat内部将scan字符创转换为scan对象

* TableMapReduceUtily有两个方法:convertScanToString和convertStringToScan作用?
将scan实例转换为Base64字符串 和将Base64字符串还原为scan实例;
Q:为什么不直接穿Scan对象而是费尽周折地转换来转换去呢?
A:
(3)TableInputFormat继承了TableInputFormatBase实现了InputFormat抽象类的两个抽象方法:
getSplits()和createRecordReader()方法:
A:getSplits()断定输入对象的切分原则:对于TableInputFormatBase,会遍历HBase相应表的所有HRegion,每一个HRegion都会被分成一个split,所以切分的块数是 与表中HRegion的数目是相同的;
InputSplit split = new TableSplit(table.getTableName(),splitStart, splitStop, regionLocation); 在split中只会记载HRegion的其实rowkey和终止rowkey,具体的去读取 这篇区域的数据是createRecordReader()实现的。
计算出来的每一个分块都将被作为一个map Task的输入;http://
Q:但是分出的块分给那台机器的那个task去执行Map,即jobTracker如何调度任务给taskTracker?
A: 需要进一步了解Map的本地化运行机制和jobTracker的调度算法;(可能是就近原则)
对于一个map任务,jobtracker会考虑tasktracker的网络位置,并选取一个距离其输入分片文件最近的tasktracker。在最理想 的情况下,任务是数据本地化的(data- local),也就是任务运行在输入分片所在的节点上。同样,任务也可能是机器本地化的:任务和输入分片在同一个机架,但不在同 一个节点上。
reduce任务,jobtracker简单滴从待运行的reduce任务列表中选取下一个来运行,用不着考虑数据段饿本地化。
B:createRecordReader()按照必然格式读取响应数据:
接收split块,返回读取记录的结果;
public RecordReader<ImmutableBytesWritable, Result> createRecordReader(InputSplit split, TaskAttemptContext context){

}
trr.init()返回的是这个分块的起始rowkey的记录;
RecordReader将一个split解析成<key,value>对的形式提供给map函数,key就是rowkey,value就是对应的一行数据;
RecordReader用于在划分中读取<Key,Value>对。RecordReader有五个虚方法,分别是:
initialize:初始化,输入参数包括该Reader工作的数据划分InputSplit和Job的上下文context;
nextKey:得到输入的下一个Key,如果数据划分已经没有新的记录,返回空;
nextValue:得到Key对应的Value,必须在调用nextKey后调用;
getProgress:得到现在的进度;
close:来自java.io的Closeable接口,用于清理RecordReader。
2. job.setInputFormatClass(TableInputFormat.class);

3. TableMapReduceUtil.initTableReducerJob("daily_result", DailyReduce.class, job);
使用了该方法就不需要再单独定义
initTableReducerJob()方法完成了一系列操作:
(1). job.setOutputFormatClass(TableOutputFormat.class); 设置输出格式;
(2). conf.set(TableOutputFormat.OUTPUT_TABLE, table); 设置输出表;
(3). 初始化partition
分享到:
评论

相关推荐

    基于MapReduce和HBase的海量网络数据处理.pdf

    数据解析部分使用MapReduce来对二进制数据进行解析,并将解析后的数据存储在HBase中。数据存储部分使用HBase来存储解析后的文本数据,并提供了一个基于PHP的数据查询界面。 系统的优点是可以实现对海量网络数据的...

    mapreduce方式入库hbase hive hdfs

    mapreduce方式入库hbase hive hdfs,速度很快,里面详细讲述了代码的编写过程,值得下载

    MapReduce on Hbase

    这使得开发者可以在Hadoop集群上运行MapReduce作业,以批量处理存储在HBase中的大量数据。由于HBase和Hadoop都是基于HDFS(Hadoop文件系统)构建的,所以它们之间的这种集成是无缝的。 HBase提供了一些特定的类和...

    HBase MapReduce完整实例.rar

    在数据分析阶段,可以读取HBase中的数据进行复杂计算,然后将结果写回HBase或其他存储系统。这种结合使得HBase能够支持大规模的数据处理,同时也保留了其强大的实时查询能力。 在"**HBase MapReduce完整实例.zip**...

    java操作Hbase之从Hbase中读取数据写入hdfs中源码

    在Java编程环境中,操作HBase并将其数据写入HDFS(Hadoop Distributed File System)是一项常见的任务,特别是在大数据处理和分析的场景下。本篇将详细介绍如何使用Java API实现这一功能,以及涉及到的关键技术和...

    HBase MapReduce完整实例

    1. 数据导入:使用MapReduce将数据批量导入HBase,这在处理大量历史数据时非常有用。 2. 数据查询:通过MapReduce实现对HBase表的查询,可以在Map阶段进行过滤,Reduce阶段进行聚合操作。 3. 数据更新:在Map阶段...

    HDFS 通过mapreduce 进行 HBase 导入导出

    - **Map阶段**:Map 函数读取 HBase 表的每个Region,将数据转化为键值对,键通常包含行键和时间戳,值为原始数据。 - **Reduce阶段**:Reduce 函数将接收到的所有键值对写入到 HDFS 上的新文件中,形成一个或多个...

    MapReduce输出至hbase共16页.pdf.zip

    4. 写入HBase:在Reduce阶段,每个Reduce任务会创建一个HBase连接,然后将Map阶段产生的键值对转换成Put对象,最终通过HBase的API将数据写入到相应的表中。 5. 错误处理和容错机制:为了保证数据的完整性和一致性,...

    hbase和hadoop数据块损坏处理

    * hbase org.apache.hadoop.hbase.mapreduce.Import &lt;outputdir&gt; &lt;tablename&gt;:将 HDFS 文件插入到 HBase 表中 * snapshot 'test', 'snap_test':创建名为 snap_test 的快照 * hbase org.apache.hadoop.hbase....

    hadoop的mapreduce把oracle/mysq导入到hbase和hdfs中的程序

    标题中的“hadoop的mapreduce把oracle/mysq导入到hbase和hdfs中的程序”指的是一项数据处理任务,利用Hadoop的MapReduce框架,将关系型数据库(如Oracle和MySQL)中的数据高效地迁移至分布式存储系统HDFS(Hadoop ...

    hbase备份和数据恢复

    2. HBase到Hive:通过MapReduce任务,将HBase中的数据导入到Hive,创建Hive表并加载数据。也可以使用HBaseSerDe来解析HBase数据。 三、HBase和HDFS互导 1. HBase到HDFS:可以通过HBase的Export工具,将HBase表的...

    java解决hive快速导数据到Hbase代码

    4. **批量加载到HBase**:HBase提供了Bulk Load功能,可以将数据批量导入到HBase表中,从而提高导入效率。使用HBase的Admin API创建表或检查表是否存在,然后使用HFileOutputFormat将处理后的数据写入HDFS的临时目录...

    结合MapReduce和HBase的遥感图像并行分布式查询.pdf

    通过“分层分块”的瓦片金字塔模型,该技术不仅优化了数据存储结构,而且借助于MapReduce框架的并行计算优势和HBase分布式数据库的快速检索性能,显著提升了处理速度和查询效率。 传统集中式存储和检索系统在面对...

    (源码)基于Hadoop和HBase的日志数据处理系统.zip

    本项目是一个基于Hadoop和HBase的日志数据处理系统,旨在通过Hadoop的MapReduce框架处理大规模日志数据,并将处理后的数据存储到HBase中。项目涵盖了日志数据的清洗、转换、存储和查询等多个环节,适用于需要处理...

    Hadoop数据迁移--从Hadoop向HBase载入数据

    载入数据的操作本质上是将数据从HDFS移动到HBase表中。HBase表中的数据是按照行键(row key)、列族(column family)和列(column qualifier)来组织的。载入数据时,可以根据需要创建相应的HBase表结构,如表名、...

    hbase导入话单数据mapreduce函数实现执行过程实例(博客附件)

    标题中的“hbase导入话单数据mapreduce函数实现执行过程实例”揭示了本文将探讨如何使用MapReduce在HBase中导入大数据,特别是话单记录。HBase是一个分布式、版本化的NoSQL数据库,常用于处理大规模的数据。...

    Hbase 表设计与操作

    HBase – Hadoop Database,是一...Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用 Chubby作为协同服务,HBase利用Zookeeper作为对应。

    可视化毕业设计:数据处理(MapReduce)+数据展示(hbase+java+echarts).zip

    在本项目中,HBase作为数据存储平台,用于保存经过MapReduce处理后的结果。HBase以行键、列族、列和时间戳为四维存储模式,支持实时读写,能够提供高并发访问和快速的数据检索,适用于大数据实时分析场景。 3. **...

    【Java毕业设计】可视化毕业设计:数据处理(MapReduce)+数据展示(hbase+java+echarts).zip

    3. **数据存储**:将MapReduce处理后的结果存储到HBase数据库中,以支持高效的查询操作。 4. **数据查询**:编写Java程序,通过HBase API进行数据查询和检索。 5. **数据展示**:使用ECharts库,根据从HBase中获取的...

Global site tag (gtag.js) - Google Analytics