Hadoop文件拆分:CompositeInputFormat:内部联接

Hadoop文件拆分:CompositeInputFormat:内部联接,hadoop,split,mapreduce,microsoft-distributed-file-system,Hadoop,Split,Mapreduce,Microsoft Distributed File System,我使用CompositeInputFormat为hadoop作业提供输入 生成的拆分数是作为CompositeInputFormat(用于连接)输入的文件总数 作业完全忽略块大小和最大拆分大小(同时从CompositeInputFormat获取输入)。这将导致长时间运行的映射任务,并使系统变慢,因为输入文件大于块大小 有人知道有什么方法可以管理CompositeInputFormat的拆分数量吗 不幸的是,CompositeInputFormat必须忽略块/拆分大小。在CompositeInpu

我使用CompositeInputFormat为hadoop作业提供输入

生成的拆分数是作为CompositeInputFormat(用于连接)输入的文件总数

作业完全忽略块大小和最大拆分大小(同时从CompositeInputFormat获取输入)。这将导致长时间运行的映射任务,并使系统变慢,因为输入文件大于块大小


有人知道有什么方法可以管理CompositeInputFormat的拆分数量吗

不幸的是,CompositeInputFormat必须忽略块/拆分大小。在CompositeInputFormat中,需要对输入文件进行相同的排序和分区。。。因此,Hadoop无法确定在何处拆分文件以维护此属性。它无法确定在何处拆分文件以保持文件的组织


解决这个问题的唯一方法是手动将文件分割成更小的部分。您可以通过使用大量还原器通过mapreduce作业(可能只是identity mapper和identity reducer)传递数据来实现这一点。请确保使用相同数量的减缩器传递两个数据集。

我已经使用了最大数量的减缩器。我需要更小的块大小为多个地图波。现在map任务太大了,这会造成性能问题,有时还会导致任务失败。我认为您没有理解我的意思。问题是,在使用CompositeInputFormat时,无法按输入拆分来拆分映射任务。解决这个问题的一种方法是自己手动拆分文件。所以,把你的大文件分割成小文件。一种方法是我在第二段中提出的建议。顺便说一句,没有最大的还原器数量。我的输入是不同mapreduce作业的输出。mapreduce作业的输出文件数等于使用的reducer任务数。redcuer任务的最大数量等于集群的reducer任务容量。在这种情况下,运行一个mapreduce作业,然后拆分文件,然后运行另一个mapreduce作业不适合作为解决方案。错误--最大还原器数量不是群集的容量--请尝试增加它。@DonaldMiner:太好了!!!复合输入格式快把我逼疯了!你的帖子向我澄清了一切!我看到你写了一本书!我的下一次收购!