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

zz 翻译 map reduce操作实际执行

阅读更多
http://wiki.apache.org/hadoop/HadoopMapReduce

简介:

  这篇文档描述在hadoop中map和reduce操作是怎样具体完成的。如果你对Google的MapReduce各式模式不熟悉,请先参阅MapReduce--http://labs.google.com/papers/mapreduce.html

Map

  由于Map是并行地对输入的文件集进行操作,所以它的第一步(FileSplit) 就是把文件集分割成一些子集.如果一个单个的文件大到它已影响到查找效率时,它会被分割成一些小的分割体。要指出的是分割这个一步是不知道输入文件的内部 逻辑结构的,比如,以行为逻辑分割的文本文件会被以任意的字节界限分割,所以这个具体分割要自己去指定也可以用hadoop已经定义的几个简单分割。然后 每个文件分割体都会对应地有一个新的map任务。

  当单个map任务开始时,它会对每个配置过的reduce任务开启一个新的输出书写器(writer).紧接着它(writer)会用从指定的特定InputFormat里得到的RecordReader去读它的文件分割体。InputFormat类分析输入文件并产生key-value键值对.同时InputFormat必需要处理在以文件分割时边界处的记录。比如TextInputFormat会读取分割边界的文件分割体有最后一行,如果当读取的分割体不是第一个时,TextInputFormat会忽略第一行的内容。


  InputFormat类并不需要产生一些对有意义的键值对。比如TextInputFormat类的默认输出是以输入文本的行内容为value,以行偏移量为key--大多数应用只用到而很少用到偏移量。

  传给用户配置的mapper的键值对都是从RecordReader读入的,用户提供的Mapper类就可以对键值对进行任意的操作再调用OutputCollector.collect 方法来重新收集自己定义后的键值对。产生的输出必需用一个Key类和一个value类,这是因为Map的输出结果要被以SequenceFile的形式写入磁盘,这种形式包括每个文件的类型信息和所有的记录都是同类形的(如果你想输出不同的数据结构你可以继承个子类出来)。Map的输入和输出键值对不需要在类型上有联系.

  当Mapper的输出被收集后,它们会被Partitioner类以指定的方式区分地写出到输出文件里。默认是以HashPartitioner类用key类的哈希函数产生的hashcode来区分(因此就要有一个很好的哈希函数,才可以使在各个reduce任务时负载匀衡)。详细可以查看MapTask类。N个输入可以产生M个map任务去跑,每个map任务会产生配置的reduce任务数个输出文件。每个输出文件都会面向一个特定的reduce任务同时所有从map任务产生的键值对都会被送到reduce里。所以在一个特定的reduce任务中对于一个给定的key所有的键值对都会被处理。



Combine

  当map操作输出它的键值对时他们已经在内存中存在了。为了性能和效率的考虑,有时候提供一个拥有reduce功能的合成器是有好处的。如果有 合成器,那么map的键值对就不会被马上写入到输出里,他们会被收集在list里,一个key值一个list,当写入一定数量的键值对时,这部分缓冲会被 送进合成器,每个key都的所有value都会被送进合成器的reduce方法里并且就像原先map输出的键值对一样。



  比如,hadoop案例中的word count程序,它的map操作输出是(word,1)键值对,在输入中的词的计数可以用合成器来加速这个操作。一个合成操作会在内存中收集处理lists,一个词一个list。当一定数量的键值对输出到内存中时,就调用合成操作的reduce方法,每次都以一个唯一的词为key,values是list的迭代器。然后合成器输出(word, count-in-this-part-of-the-input)键值对。从Reduce操作的观点来说合成器也拥有Map输出中相同的信息,但是这样会比原先远远减少硬盘的读写。

Reduce

  当一个reduce任务开始时,它的输入是分散在各个节点上的map的输出文件里。如果在分布式的模式下,他们需要先在拷贝步骤里拷贝到本地文件系统上。详细可以查看ReduceTaskRunner类

  一旦所有的数据都在本地有效时,它会在添加步骤里加到一个文件里。然后这个文件会被合并分类这样相同的key的键值对就可以排在一起(分类步骤)。这样可以使真正的reduce操作变得简单,这个文件会被顺序地读入,值(values)会从输入文件里用一个迭代器传给reduce方法-直到下一个key。详细可以查看ReduceTask类。

  最后,输出由每个reduce任务的输出文件组成。面他们的格式可以由JobConf.setOutputFormat类指定,如果用到JobConf.setOutputFormat类,那么输出的key类和value类都要同时指定。

分享到:
评论

相关推荐

    base zz zz zz zz

    base zz zz zz zz zz base zz zz zz zz zz base zz zz zz zz zz base zz zz zz zz zz

    应用广泛的嵌入式操作系统——ZZ-Linux.pdf

    应用广泛的嵌入式操作系统——ZZ-Linux.pdf

    ZZ561401.CAB

    ZZ561401.CAB ZZ561401.CAB ZZ561401.CAB

    ZZ Fibo Trader - MetaTrader 5EA.zip

    在实际操作中,ZZ Fibo Trader EA会监控市场动态,依据斐波那契回调线和抛物线SAR发出的信号,自动执行买卖操作。用户可以通过调整参数来控制EA的敏感度,如斐波那契回调的百分比、抛物线SAR的步长和加速因子等,以...

    ZZ-2022010 机器人技术应用赛项赛题.zip

    通过“ZZ-2022010 机器人技术应用赛项”,学生将有机会将理论知识与实际操作相结合,提高问题解决能力,培养创新思维。这样的比赛对于准备技能大赛的中职学生来说,是一次宝贵的实践经验,有助于他们在未来的职业...

    FANUC宏程序执行功能MACRO-EXEXUTOR简介.pdf

    - 可以在autoexec.bat中设置编译器可执行文件的路径,或创建批处理文件setpath.bat来简化操作流程。 #### 七、宏程序的编译执行过程 1. **编译源程序**: - 使用MComp0命令编译宏程序源文件 (*.src),若编译无误...

    wincc AX NF ZZ

    wincc SIMATIC WinCC是第一个使用最新的32位技术的过程监视系统,具有良好的开放性和灵活性。 从面市伊始,用户就对SIMATIC WinCC印象深刻。

    超出NLO QCD的高横向动量的ZZ产生

    我们研究了四轻子最终状态ℓ+ℓ-ℓ+ℓ-的产生,这些状态主要由一对弱电Z玻色子ZZ产生。 使用LoopSim方法,我们合并ZZ和ZZ + jet的NLO QCD结果,并获得ZZ产生的近似NNLO预测。 还包括对ZZ过程的精确胶子融合环平方的...

    zz CAD快速计算长度插件

    在CAD中想要快速测量长度,在CAD工具栏找到加载应用程序,再点击加载 加载成功后在输入栏输入“zz”(不分大小写)在选择你需要测量的线段即可。

    DT_ZZ_optimized - MetaTrader 4脚本.zip

    在实际应用中,理解并掌握DT_ZZ_optimized指标的原理和优化细节至关重要。用户应根据自身的交易习惯和市场理解,调整脚本中的参数,进行回测验证,以找到最适合自己的设置。同时,结合其他技术分析工具和基本面信息...

    Zz归零.LSP

    cad标高归零,好用的

    ZZ_MODIFIED_GEEBINF.ENS.zip endnote的样式文件

    在实际使用中,用户首先需要解压“ZZ_MODIFIED_GEEBINF.ENS.zip”文件,获取到“ZZ_MODIFIED_GEEBINF.ENS”文件。接着,在EndNote软件中选择“样式”菜单,点击“管理样式”,然后点击“导入”按钮,找到并导入这个...

    ZZ公司安全生产守则.docx

    ZZ公司的安全生产守则是为了保障公司生产建设的正常运行,强调各级员工对安全生产重要性的认知,遵循科学管理和法制观念。这份守则包含以下关键知识点: 1. **安全生产的重要性**:安全生产被视为企业的首要任务,...

    服务器端口关闭工具zz

    在这个案例中,“dist”可能包含了适用于不同操作系统(如Windows的.exe文件或Linux的可执行脚本)的服务器端口关闭工具zz的二进制文件,以及可能的文档、许可证文件等。 总结来说,这个“服务器端口关闭工具zz”是...

    Zz: java 线程池设计思想

    `ExecutorService`是线程池服务的入口,它定义了线程池的主要操作,如执行任务、关闭线程池等。而`ThreadPoolExecutor`是其最常见的实现,包含了线程池的核心逻辑。 线程池的五大核心参数如下: 1. **corePoolSize...

    Google-Map-Api.rar_google map

    在本压缩包“Google-Map-Api.rar”中,包含了一份关于Google Map API的重要文档——“Google Map Api.doc”以及一个名为“zz.txt”的文本文件。这个文档详细介绍了如何使用Google Map API进行地图相关的编程工作,是...

    zz经典C代码.rar_C语言 图像_ZZ丫C香烟代码

    学习C语言图像处理不仅仅是理解语法,还包括熟悉图像数据结构(如RGB颜色模型)、文件格式规范,以及如何使用外部库进行实际操作。通过研究这些代码,学习者可以掌握如何用C语言打开图像文件、访问像素数据、执行...

    zz809.com留言本

    总的来说,《zz809.com留言本》不仅是一个实际的网络应用,也是学习Web开发,尤其是PHP或相关技术的一个实例教程。对于初学者而言,这是一个宝贵的资源,可以帮助他们在实践中提高技能;对于有经验的开发者,它则...

    ZZ8L-2.5(4)型煤电钻综合保护装置安全操作规程.doc

    ZZ8L-2.5(4)型煤电钻综合保护装置是一种专为煤矿作业设计的安全设备,旨在确保煤电钻操作过程中的人员安全和设备稳定性。...在实际操作中,必须严格按照规程执行,以确保所有保护措施都能正常发挥作用。

    ZZ-2021008 工程测量赛项规程.rar

    这个压缩包中的"ZZ-2021008 工程测量赛项规程"文件,很可能是详细的比赛规程说明书,涵盖了比赛的各项规定、评分标准以及技术要求。 工程测量是一门应用广泛的学科,它在建筑工程、道路建设、地质勘查等多个领域中...

Global site tag (gtag.js) - Google Analytics