我知道mapreduce输出存储在名为part-r-*forreducer和part-m-*formapper的文件中。当我运行mapreduce作业时,有时会在单个文件中获得整个输出(大小约为150MB),有时对于几乎相同的数据大小,我会得到两个输出文件(一个100mb和另一个50mb)。这对我来说似乎很随意。我找不到任何原因。我想知道它是如何决定将该数据放入单个或多个输出文件中的。如果有任何方式我们可以控制它。谢谢 最佳答案 与Jijo在此处的回答中指定的不同-文件的数量取决于Reducers/Mappers的数量。与集群物理节
我正在运行超过550Gb数据的piglatin脚本。reducer默认为1。生成结果大约需要38分钟。我想知道增加reducer的数量是否会更快地执行脚本我们将不胜感激。此外,我想知道设置映射器和缩减器背后的概念。 最佳答案 增加reducer的数量肯定会有所帮助(如果您正在执行的操作具有聚合)。由于实际聚合发生在reduce端,运行多个reducer会提高性能。您可以使用“Parallel”关键字设置pig中的reducer数量。前任:A=LOAD'myfile'AS(t,u,v);B=GROUPABYtPARALLEL18;映射
我使用以下语法创建了一个Mapper:publicclassxyzextendsMapReduceBaseimplementsMapper{-----publicvoidmap(LongWritablekey,Textvalue,OutputCollectoroutput,Reporterreporter)--}在作业中,我创建了一个Job对象:Jobjob=newJob(getConf());对于这项工作,我无法使用以下方法添加Mapper类:job.setMapper(xyz);错误信息:ThemethodsetMapperClass(Class)inthetypeJobisnot
我有一个perl程序,它将接受一个输入文件并对其进行处理,并生成一个输出文件作为结果。现在我需要在hadoop上使用这个perl程序。因此perl程序将在存储在边缘节点上的数据block上运行,我不应该修改perl代码。我不知道如何开始。有人可以给我任何建议吗?我可以编写一个java程序,在mapper类中使用进程构建器调用perl程序并将结果合并到reducer类中吗??还有其他方法可以实现吗? 最佳答案 我相信您可以使用hadoopstreaming做到这一点。根据tomwhite,hadoop权威指南,第3版的作者。页#622
我正在研究map缩减程序。我正在尝试使用setLong方法将参数传递给reduce方法中的上下文配置,然后在完成后在main中读取它们在reducer中:context.getConfiguration().setLong(key,someLong);在作业完成后的主要内容中,我尝试使用:longval=job.getConfiguration().getLong(key,-1);但我总是得到-1。当我尝试读取reducer内部时,我看到值已设置并且我得到了正确的答案。我错过了什么吗?谢谢 最佳答案 您可以使用计数器:在reduce
我的reducer有以下输出KeyValue11998-01-0545101998-01-092021998-01-066831998-01-078541998-01-0885按字典顺序这是正确的,但我希望它按自然顺序排序,例如KeyValue11998-01-054521998-01-066831998-01-078541998-01-0885101998-01-0920我写了一个KeyComparator来实现这个,下面是代码,但即使这样也没有成功。publicstaticclassKeyComparatorextendsWritableComparator{protectedKe
我是Hadoop的新手,我的map-reduce代码可以工作,但它不会产生任何输出。这是map-reduce的信息:16/09/2013:11:40INFOmapred.JobClient:Jobcomplete:job_201609081210_007816/09/2013:11:40INFOmapred.JobClient:Counters:2816/09/2013:11:40INFOmapred.JobClient:Map-ReduceFramework16/09/2013:11:40INFOmapred.JobClient:SpilledRecords=016/09/2013:
我在Hadoop平台(cloudera发行版)写了一个比较简单的map-reduce程序。除了常规的map-reduce任务之外,每个Map&Reduce都会将一些诊断信息写入标准输出。然而,当我查看这些日志文件时,我发现Map任务相对均匀地分布在节点之间(我有8个节点)。但是reduce任务标准输出日志只能在一台机器上找到。我想,这意味着所有的reduce任务最终都在一台机器上执行,这是有问题的和令人困惑的。有人知道这里发生了什么吗?是配置问题吗?我怎样才能使减少的工作也均匀分布? 最佳答案 如果您的映射器的输出都具有相同的键,它
我编写了一个HadoopMapReduce作业。当我在本地运行它时,我注意到如果我没有指定任何reduce任务,就会有一些临时文件写入输出目录。如果我指定reducer,则不会写入任何临时文件。这是正常行为吗?我希望看到写入的临时文件,否则这将意味着映射器试图在内存中执行所有操作,然后传输到内存中的reducer。这让我觉得难以置信。如果能深入了解映射器如何/何时/何地将中间输出写入文件系统,我们将不胜感激。谢谢 最佳答案 Map任务将它们的输出写入本地磁盘,而不是HDFS。map输出是中间输出:它由reduce任务处理以产生最终输
Hadoop目前在其lib文件夹中附带commons-httpclient-3.0.1.jar。如果我有一个需要commons-httpclient-3.1.jar的map/reduce任务,将这个jar捆绑到我的hadoopjar的lib文件夹中似乎是不够的(就像对任何普通的外部jar所做的那样)依赖项),因为hadoop似乎正在从其lib文件夹中加载以前的jar,而不是使用我提供的那个。不可能使用hadoop也使用的不同版本的jar? 最佳答案 如果一切都失败了,使用maven-shade-plugin重命名commons-ht