- 浏览: 563134 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (270)
- Ask chenwq (10)
- JSF (2)
- ExtJS (5)
- Life (19)
- jQuery (5)
- ASP (7)
- JavaScript (5)
- SQL Server (1)
- MySQL (4)
- En (1)
- development tools (14)
- Data mining related (35)
- Hadoop (33)
- Oracle (13)
- To Do (2)
- SSO (2)
- work/study diary (10)
- SOA (6)
- Ubuntu (7)
- J2SE (18)
- NetWorks (1)
- Struts2 (2)
- algorithm (9)
- funny (1)
- BMP (1)
- Paper Reading (2)
- MapReduce (23)
- Weka (3)
- web design (1)
- Data visualisation&R (1)
- Mahout (7)
- Social Recommendation (1)
- statistical methods (1)
- Git&GitHub (1)
- Python (1)
- Linux (1)
最新评论
-
brandNewUser:
楼主你好,问个问题,为什么我写的如下的:JobConf pha ...
Hadoop ChainMap -
Molisa:
Molisa 写道mapred.min.split.size指 ...
Hadoop MapReduce Job性能调优——修改Map和Reduce个数 -
Molisa:
mapred.min.split.size指的是block数, ...
Hadoop MapReduce Job性能调优——修改Map和Reduce个数 -
heyongcs:
请问导入之后,那些错误怎么解决?
Eclipse导入Mahout -
a420144030:
看了你的文章深受启发,想请教你几个问题我的数据都放到hbase ...
Mahout clustering Canopy+K-means 源码分析
0、本文承接上文 MapReduce高级编程——自定义InputFormat
1、环境配置,本文的开发环境请直接参考 基于Eclipse的Hadoop应用开发环境的配置
2、Mapper,Reducer参数解释
import java.io.IOException; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; public class Point3DMapper extends Mapper<Text, Point3D, Text, Point3D>{ protected void map(Text key, Point3D value, Context context) throws IOException, InterruptedException{ context.write(key, value); } }
进入Mapper源代码可以看到
public class Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT> { public class Context extends MapContext<KEYIN,VALUEIN,KEYOUT,VALUEOUT> { public Context(Configuration conf, TaskAttemptID taskid, RecordReader<KEYIN,VALUEIN> reader, RecordWriter<KEYOUT,VALUEOUT> writer, OutputCommitter committer, StatusReporter reporter, InputSplit split) throws IOException, InterruptedException { super(conf, taskid, reader, writer, committer, reporter, split); } } /** * Called once at the beginning of the task. */ protected void setup(Context context ) throws IOException, InterruptedException { // NOTHING } /** * Called once for each key/value pair in the input split. Most applications * should override this, but the default is the identity function. */ @SuppressWarnings("unchecked") protected void map(KEYIN key, VALUEIN value, Context context) throws IOException, InterruptedException { context.write((KEYOUT) key, (VALUEOUT) value); }
即,/**
* Text -> KEYIN * Point3D -> VALUEIN * Text -> KEYOUT * Point3D -> VALUEOUT **/ Mapper<Text, Point3D, Text, Point3D>
而,// Text -> ball etc. -> KEYOUT
// value -> .5, 12.7, 9.0 etc. -> VALUEOUT context.write(key, value);
同理,我们查看Reducer源代码,可以看到,Mapper的KEYOUT类型和VALUEOUT类型,必须对应Reducer的KEYIN类型和VLUEIN类型。
public class Reducer<KEYIN,VALUEIN,KEYOUT,VALUEOUT> { public class Context extends ReduceContext<KEYIN,VALUEIN,KEYOUT,VALUEOUT> { public Context(Configuration conf, TaskAttemptID taskid, RawKeyValueIterator input, Counter inputKeyCounter, Counter inputValueCounter, RecordWriter<KEYOUT,VALUEOUT> output, OutputCommitter committer, StatusReporter reporter, RawComparator<KEYIN> comparator, Class<KEYIN> keyClass, Class<VALUEIN> valueClass ) throws IOException, InterruptedException { super(conf, taskid, input, inputKeyCounter, inputValueCounter, output, committer, reporter, comparator, keyClass, valueClass); } } /** * Called once at the start of the task. */ protected void setup(Context context ) throws IOException, InterruptedException { // NOTHING } /** * This method is called once for each key. Most applications will define * their reduce class by overriding this method. The default implementation * is an identity function. */ @SuppressWarnings("unchecked") protected void reduce(KEYIN key, Iterable<VALUEIN> values, Context context ) throws IOException, InterruptedException { for(VALUEIN value: values) { context.write((KEYOUT) key, (VALUEOUT) value); } }
本文的目的是因为有些时候文档不是很清楚,而最好的方法是看源代码。“源码之前,了无秘密”。
对于MapReduce的细致执行流程,我推荐看例子经典,博客作者一流的Map Reduce – the Free Lunch is not over?。相信看完会有所收获!
发表评论
-
Parallel K-Means Clustering Based on MapReduce
2012-08-04 20:28 1403K-means is a pleasingly paral ... -
Pagerank在Hadoop上的实现原理
2012-07-19 16:04 1463转自:pagerank 在 hadoop 上的实现原理 ... -
Including external jars in a Hadoop job
2012-06-25 20:24 1219办法1: 把所有的第三方jar和自己的class打成一个大 ... -
[转]BSP模型与实例分析(一)
2012-06-15 22:26 0一、BSP模型概念 BSP(Bulk Synchr ... -
Hadoop中两表JOIN的处理方法
2012-05-29 10:35 9631. 概述 在传统数据库(如:MYSQL)中,JOIN ... -
Hadoop DistributedCache
2012-05-27 23:45 1126Hadoop的DistributedCache,可以把 ... -
MapReduce,组合式,迭代式,链式
2012-05-27 23:27 23881.迭代式mapreduce 一些复杂的任务难以用一 ... -
Hadoop ChainMap
2012-05-27 23:09 1986单一MapReduce对一些非常简单的问题提供了很好的支持。 ... -
广度优先BFS的MapReduce实现
2012-05-25 21:47 4312社交网络中的图模型经常需要构造一棵树型结构:从一个特定的节点出 ... -
HADOOP程序日志
2012-05-23 19:53 1015*.log日志文件和*.out日志文件 进入Hadoo ... -
TFIDF based on MapReduce
2012-05-23 11:58 951Job1: Map: input: ( ... -
个人Hadoop 错误列表
2012-05-23 11:31 1491错误1:Too many fetch-failure ... -
Hadoop Map&Reduce个数优化设置以及JVM重用
2012-05-22 11:29 2430Hadoop与JVM重用对应的参数是map ... -
有空读下
2012-05-20 23:59 0MapReduce: JT默认task scheduli ... -
Hadoop MapReduce Job性能调优——修改Map和Reduce个数
2012-05-20 23:46 26754map task的数量即mapred ... -
Hadoop用于和Map Reduce作业交互的命令
2012-05-20 16:02 1225用法:hadoop job [GENERIC_OPTION ... -
Eclipse:Run on Hadoop 没有反应
2012-05-20 11:46 1277原因: hadoop-0.20.2下自带的eclise ... -
Hadoop0.20+ custom MultipleOutputFormat
2012-05-20 11:46 1540Hadoop0.20.2中无法使用MultipleOutput ... -
Custom KeyValueTextInputFormat
2012-05-19 16:23 1716在看老版的API时,发现旧的KeyValueTextInpu ... -
Hadoop SequenceFile Writer And Reader
2012-05-19 15:22 2067package cn.edu.xmu.dm.mpdemo ...
相关推荐
3. **MapReduce编程模型**:深入理解Map函数和Reduce函数的工作原理,以及Combiner和Partitioner的角色。编写Java MapReduce程序,实现自定义Mapper和Reducer类。 4. **YARN资源管理**:了解下一代JobTracker——...
5. **源码分析**:理解MapReduce的源码可以帮助开发者深入理解其内部机制,包括作业调度、任务分配、数据通信等。关键类如JobTracker、TaskTracker、Mapper和Reducer的实现,以及Job、InputFormat、OutputFormat等...
用户可以通过自定义InputFormat和OutputFormat来处理特定类型的数据。 8. **故障恢复与容错机制**:Hadoop具有内置的故障检测和恢复机制,如心跳检测、数据块的冗余复制等,以确保系统的稳定运行。如果DataNode或...
源码中可以看到各种接口设计,使得开发者可以方便地开发自定义的InputFormat、OutputFormat、Partitioner和Reducer等,以适应不同的数据处理需求。 9. **源码学习方法** 理解Hadoop源码需要具备Java基础、网络知识...
该项目提供了一个基本的MapReduce应用实例,帮助开发者理解和实践MapReduce编程。核心代码通常包含以下几个部分: 1. **Mapper类**:自定义Mapper类继承自`org.apache.hadoop.mapreduce.Mapper`,并重写`map()`方法...
9. **数据输入与输出**:Hadoop支持多种数据输入和输出格式,如TextInputFormat和TextInputFormat,以及自定义的InputFormat和OutputFormat,允许开发者处理不同类型的文件。 10. **Hadoop应用开发**:学习Hadoop...
1. **MapReduce**:MapReduce由两个主要阶段组成——Map阶段和Reduce阶段。Map阶段将输入数据分割成独立的键值对,并在各个节点上并行处理;Reduce阶段则负责收集Map阶段的结果,进行合并和聚合操作,最终生成所需的...
5. **MapReduce编程模型**:MapReduce包含两个主要阶段——Map和Reduce。Map阶段将输入数据分成键值对并进行处理,Reduce阶段则负责聚合Map阶段的结果。开发者需要定义自己的`Mapper`和`Reducer`类来实现业务逻辑。 ...
然而,这也要求开发者具备深入理解HBase数据存储结构和MapReduce编程模型的能力。 在实际应用中,需要注意的是,虽然直接读取HFile可以提高效率,但这种方法可能不适合实时查询或更新操作,因为它们缺乏HBase服务层...