Hadoop工作变得很糟糕

时间:2014-01-21 18:27:41

标签: 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 \
  -combiner count.pl

count.pl脚本只是一个简单的脚本,它在哈希中累积计数并在最后打印出来 - 细节可能不相关,但我可以在必要时发布。

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

当我查看正在运行的作业时,它有45个映射器,但它们都在一个节点上运行。特定节点从运行更改为运行,但始终只有一个节点。因此,当数据通过网络传输到此节点时,我实现了较差的数据局部性,并且可能也会降低CPU使用率。

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

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

看起来这个前一个帖子[why map task always running on a single node]是相关的,但不是决定性的。

编辑: @ 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

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

0 个答案:

没有答案