hadoop作业的局部性较差

gudnpqoy  于 2021-06-03  发布在  Hadoop
关注(0)|答案(0)|浏览(241)

我有一些非常简单的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个Map器,但它们都在一个节点上运行。特定的节点在不同的运行中变化,但总是只有一个节点。因此,当数据通过网络传输到此节点时,我实现了较差的数据局部性,并且可能也实现了较差的cpu使用率。
整个集群有9个节点,基本配置都一样。所有5个文件的数据块都分布在9个节点中,正如hdfs name node web ui所报告的那样。
我很高兴从我的配置中分享任何请求的信息,但这是一个公司集群,我不想上传任何完整的配置文件。
看起来前面的这个线程[为什么Map任务总是在单个节点上运行]是相关的,但不是决定性的。
编辑:在@jtravaglini的建议下,我尝试了以下变体,发现了相同的问题—所有45个Map作业都在单个节点上运行:

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

这是您希望在一个节点上仅凭偶然机会就能看到的数据本地任务数。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题