我在DefiniteGuide:Hadoopinpg206中有以下文字。在写入磁盘之前,线程首先将数据划分为对应的分区到他们最终将被发送到的reducer。在每个分区内,后台线程按键执行内存中排序,如果有组合器功能,它在排序的输出上运行。运行combiner函数可以得到更多紧凑的map输出,因此写入本地磁盘和传输到的数据较少reducer。那么有了这个理解,我可以排序为Mapper,partitioner,shuffle/sort,Combiner的顺序吗? 最佳答案 我写了一篇关于此的好文章:http://0x0fff.com/h
我在伪分布式hadoop设置上运行mapreduce作业。我在哪里可以找到映射器、分区器和组合器的输出文件?有没有办法检查每个操作的输出? 最佳答案 MapReduce中的中间输出存储在运行任务的节点上的本地临时存储中(而不是在HDFS中)。您可以在Hadoopconf中查找本地临时目录所在的位置,然后逐个节点地手动检查它们。一般来说,可能有更好的方法通过日志消息或计数器来完成您认为您想做的事情。您可以做的另一件事是关闭reducer,以便您的Mappers直接写入HDFS,以便您可以检查它。
我对MapReduce框架感到很困惑。我对从不同来源阅读的内容感到困惑。顺便说一下,这是我对MapReduce作业的想法1.Map()-->emit2.Partitioner(OPTIONAL)-->divideintermediateoutputfrommapperandassignthemtodifferentreducers3.Shufflephaseusedtomake:4.Combiner,componentusedlikeaminireducerwichperformsomeoperationsondatasandthenpassthosedatatothereducer.
我有一个长时间运行的MapReduce作业,其中一些映射器比其他映射器花费更多的时间。检查Web界面上的统计数据,我看到我的组合器也启动了reducer(其中大部分空闲,因为只有2个映射器仍在运行)。虽然在所有映射器完成之前不浪费时间并进行一些预聚合似乎是合理的,但我找不到有关此行为的任何文档。谁能确认这确实是Hadoop的一个特性,或者只是在Web界面上显示错误? 最佳答案 组合器在映射器发出合理数量的数据时启动。请注意,组合器作为映射器输出的聚合(通常)运行(而不是在减少端)。可以找到更多详细信息here.此外,reducer可
我们可以在Mapreduce作业中使用combiner代替reduce吗?如果没有,我们可以用什么来代替mapreduce作业中的reducer? 最佳答案 严格来说,不是。组合器只有在至少有一个reducer被调用时才会被调用。当没有reducer时,作业停止在map阶段,省略了对map任务输出的本地排序。组合器也需要这种排序(它们实际上是本地reducer)。所以,没有reducer=>没有组合器。但是,如果您使用映射器内聚合,有时可以模拟组合器的操作。例如,您可以将来自映射器的wordcount结果存储在本地数据结构中,在每个
我想实现一个mapreduce作业,该作业读取具有以下架构的Parquet文件:{optionalint96dropoff_datetime;optionalfloatdropoff_latitude;optionalfloatdropoff_longitude;optionalint32dropoff_taxizone_id;optionalfloatehail_fee;optionalfloatextra;optionalfloatfare_amount;optionalfloatimprovement_surcharge;optionalfloatmta_tax;optional
我有以下格式的特定类(class)学生分数的数据StudentId@CourseId@Marks1@Marks2@Marks3@Marks4@Marks501001@104@13@18@25@86@2301001@106@58@30@10@12@5901001@108@60@81@97@83@2601001@110@68@95@11@73@6301001@112@55@22@74@71@2201002@104@20@72@76@28@9901002@106@52@17@20@67@9101002@108@18@46@61@73@1401002@110@86@59@50@35@65010
阅读以下有关Hadoop权威指南第4版(第204页)的文章后,我感到很困惑在写入磁盘之前,线程首先将数据分成与最终将成为的reducer对应的分区送至。在每个分区中,后台线程执行一个内存中按键排序,如果有组合函数,则运行在排序的输出上。运行组合器函数更紧凑的map输出,因此写入本地磁盘的数据更少并传递给reducer。这是我的疑问:1)谁将首先执行组合器或分区!!2)当自定义组合器和自定义分区出现时,执行步骤层次结构如何以及如何?3)我们能否将压缩数据(avro、序列等)提供给自定义组合器,如果是,那么如何!!寻找一个简短而深入的解释!!提前致谢。 最佳答案
Combiner在Mapper之后和Reducer之前运行,它将接收由给定节点上的Mapper实例发出的所有数据作为输入。然后它向Reducers发出输出。所以组合器输入的记录应该少于map输出。12/08/2913:38:49INFOmapred.JobClient:Map-ReduceFramework12/08/2913:38:49INFOmapred.JobClient:Reduceinputgroups=864912/08/2913:38:49INFOmapred.JobClient:Mapoutputmaterializedbytes=30621012/08/2913:38
从一些文章中,我知道combiner会在mapper端和reducer端运行,并且会运行0~N次。而且我知道无论是否调用组合器,我们的mapreduce程序都应该得到相同的结果。但我有一种特殊情况需要组合器至少被调用一次,有人知道如何确保这一点吗?PS,在maptask.java中,我看到了这行:if(null==combinerClass||numSpills如果我将minSpillsForCombine设置为零,我能否确保组合器至少被调用一次?非常感谢! 最佳答案 在溢出期间,在溢出线程写入磁盘之前,线程首先将数据分成分区,这些