使用 Sequencefile 的 Hadoop Streaming 非常慢
Hadoop Streaming with a Sequencefile is very slow
我有一个 python 的 hadoop 流任务。它有效,但 32 个映射器中的一个非常慢。我认为问题是某种数据倾斜,但我不知道问题出在哪里。
这是 hadoop 任务日志,第一个映射器非常非常慢。
task_1520332877638_567306_m_000000 Records R/W=11327/11207 > map
task_1520332877638_567306_m_000001 Records R/W=786/783
task_1520332877638_567306_m_000002 Records R/W=854/851
task_1520332877638_567306_m_000003 Records R/W=850/847
task_1520332877638_567306_m_000004 Records R/W=812/809
task_1520332877638_567306_m_000005 Records R/W=802/799
task_1520332877638_567306_m_000006 Records R/W=854/851
task_1520332877638_567306_m_000007 Records R/W=822/819
task_1520332877638_567306_m_000008 Records R/W=888/885
task_1520332877638_567306_m_000009 Records R/W=1030/871
task_1520332877638_567306_m_000010 Records R/W=894/891
task_1520332877638_567306_m_000011 Records R/W=850/847
task_1520332877638_567306_m_000012 Records R/W=832/829
task_1520332877638_567306_m_000013 Records R/W=804/801
task_1520332877638_567306_m_000014 Records R/W=838/835
task_1520332877638_567306_m_000015 Records R/W=856/853
task_1520332877638_567306_m_000016 Records R/W=852/849
task_1520332877638_567306_m_000017 Records R/W=884/881
task_1520332877638_567306_m_000018 Records R/W=928/925
task_1520332877638_567306_m_000019 Records R/W=896/893
作业指令:
如果启用推测执行,它也很慢。
hadoop jar \
/usr/local/hadoop/hadoop-2.6.0-EDH-0u1-SNAPSHOT-HA-SECURITY/share/hadoop/tools/lib/hadoop-streaming-2.6.0-EDH-0u1-SNAPSHOT.jar \
-D stream.map.input=typedbytes \
-D stream.map.output=typedbytes \
-D stream.reduce.input=typedbytes \
-D stream.reduce.output=text \
-D mapred.job.queue.name=root.default \
-D mapred.map.tasks.speculative.execution=false \
-inputformat org.apache.hadoop.mapred.SequenceFileAsBinaryInputFormat \
-mapper "sh map.sh" \
-reducer "sh reduce.sh" \
-input xxx \
-output xxx ......
输入文件是一个带有文本键和二进制值的序列文件。
此输入序列文件由只有一个减速器和多个输出的 MR 任务生成 class。
-rw-rwx---+ 3 lmt lmt 3.9 G 2018-05-24 19:53 inputfile
有什么错误吗?
感谢您的帮助。
终于找到原因了
序列文件中的值大小不相等,有些很大,有些很小 -- 导致数据倾斜。
我有一个 python 的 hadoop 流任务。它有效,但 32 个映射器中的一个非常慢。我认为问题是某种数据倾斜,但我不知道问题出在哪里。
这是 hadoop 任务日志,第一个映射器非常非常慢。
task_1520332877638_567306_m_000000 Records R/W=11327/11207 > map
task_1520332877638_567306_m_000001 Records R/W=786/783
task_1520332877638_567306_m_000002 Records R/W=854/851
task_1520332877638_567306_m_000003 Records R/W=850/847
task_1520332877638_567306_m_000004 Records R/W=812/809
task_1520332877638_567306_m_000005 Records R/W=802/799
task_1520332877638_567306_m_000006 Records R/W=854/851
task_1520332877638_567306_m_000007 Records R/W=822/819
task_1520332877638_567306_m_000008 Records R/W=888/885
task_1520332877638_567306_m_000009 Records R/W=1030/871
task_1520332877638_567306_m_000010 Records R/W=894/891
task_1520332877638_567306_m_000011 Records R/W=850/847
task_1520332877638_567306_m_000012 Records R/W=832/829
task_1520332877638_567306_m_000013 Records R/W=804/801
task_1520332877638_567306_m_000014 Records R/W=838/835
task_1520332877638_567306_m_000015 Records R/W=856/853
task_1520332877638_567306_m_000016 Records R/W=852/849
task_1520332877638_567306_m_000017 Records R/W=884/881
task_1520332877638_567306_m_000018 Records R/W=928/925
task_1520332877638_567306_m_000019 Records R/W=896/893
作业指令: 如果启用推测执行,它也很慢。
hadoop jar \
/usr/local/hadoop/hadoop-2.6.0-EDH-0u1-SNAPSHOT-HA-SECURITY/share/hadoop/tools/lib/hadoop-streaming-2.6.0-EDH-0u1-SNAPSHOT.jar \
-D stream.map.input=typedbytes \
-D stream.map.output=typedbytes \
-D stream.reduce.input=typedbytes \
-D stream.reduce.output=text \
-D mapred.job.queue.name=root.default \
-D mapred.map.tasks.speculative.execution=false \
-inputformat org.apache.hadoop.mapred.SequenceFileAsBinaryInputFormat \
-mapper "sh map.sh" \
-reducer "sh reduce.sh" \
-input xxx \
-output xxx ......
输入文件是一个带有文本键和二进制值的序列文件。
此输入序列文件由只有一个减速器和多个输出的 MR 任务生成 class。
-rw-rwx---+ 3 lmt lmt 3.9 G 2018-05-24 19:53 inputfile
有什么错误吗?
感谢您的帮助。
终于找到原因了
序列文件中的值大小不相等,有些很大,有些很小 -- 导致数据倾斜。