Optimization Hadoop的工作机会越来越少

Optimization Hadoop的工作机会越来越少,optimization,hadoop,configuration,Optimization,Hadoop,Configuration,我有一些相当简单的Hadoop流媒体作业,如下所示: yarn jar /usr/lib/hadoop-mapreduce/hadoop-streaming-2.2.0.2.0.6.0-101.jar \ -files hdfs:///apps/local/count.pl \ -input /foo/data/bz2 \ -output /user/me/myoutput \ -mapper "cut -f4,8 -d," \ -reducer count.pl \ -

我有一些相当简单的Hadoop流媒体作业,如下所示:

yarn jar /usr/lib/hadoop-mapreduce/hadoop-streaming-2.2.0.2.0.6.0-101.jar \
  -files hdfs:///apps/local/count.pl \
  -input /foo/data/bz2 \
  -output /user/me/myoutput \
  -mapper "cut -f4,8 -d," \
  -reducer count.pl \
  -combiner count.pl
pl脚本只是一个简单的脚本,它在散列中累积计数,并在最后打印出来——细节可能不相关,但我可以在必要时发布它

输入是一个目录,包含5个用bz2压缩编码的文件,大小大致相同,总共压缩了5GB左右

当我查看正在运行的作业时,它有45个映射器,但它们都在一个节点上运行。特定节点在不同的运行中变化,但始终只有一个节点。因此,当数据通过网络传输到此节点时,我的数据局部性很差,而且可能CPU使用率也很差

整个集群有9个节点,基本配置相同。所有5个文件的数据块分布在9个节点中,如HDFS名称节点web UI所报告的

我很乐意分享我配置中的任何请求信息,但这是一个公司集群,我不想上传任何完整的配置文件

看起来前面的线程[]是相关的,但不是决定性的

编辑:在@jtravaglini的建议下,我尝试了以下变化,发现了相同的问题-所有45个映射作业都在单个节点上运行:

yarn jar \
  /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples-2.2.0.2.0.6.0-101.jar \
  wordcount /foo/data/bz2 /user/me/myoutput
在shell中该任务的输出结束时,我看到:

            Launched map tasks=45
            Launched reduce tasks=1
            Data-local map tasks=18
            Rack-local map tasks=27

这是您希望在一个节点上偶然看到的数据本地任务数。

您确定每个节点都有bz2压缩功能吗?如果没有,则解压将只发生在具有该功能的节点上,并且可能出现类似的情况。出于好奇,您是否能够在不在混合中流式传输的情况下复制此行为?比如说,使用hadoop jar,hadoop mapreduce示例WordCount?@Jijo-我认为您的第一个注释设置class/jar并不重要,因为这项工作实际上是成功的。至于第二条注释bz2,如果首先解压缩并运行纯文本文件,我会看到类似的行为。它触发了120个作业,其中100个在一个节点上,20个在另一个节点上。@jtravaglini-是的,我得到了与wordcount示例相同的结果。我将把它添加到原始问题中。如果您使用“hadoop jar”和“Thread jar”提交,是否也会发生这种情况?正在尝试隔离此处的变量。。。