根据Hortonworks的文档,在“uber模式”下执行Hadoop作业的方法是配置一个人的
maprep-site.xml
设置,如下所示:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.job.ubertask.enable</name>
<value>true</value>
</property>
<property>
<name>mapreduce.job.ubertask.maxmaps</name>
<value>1</value>
</property>
<property>
<name>mapreduce.job.ubertask.maxreduces</name>
<value>1</value>
</property>
<property>
<name>mapreduce.job.ubertask.maxbytes</name>
<value>134217728</value>
</property>
</configuration>
对于
mapreduce.job.ubertask.maxbytes
,我真的不知道要放什么,我从 dfs.block.size
中的 hdfs-site.xml
参数复制它,并且完全公开,我真的不知道在那里放什么值。
<property>
<name>dfs.block.size</name>
<value>134217728</value>
<description>Block size</description>
</property>
最初,块大小是根据我的直觉分配的,我的工作失败的原因之一是输入数据 - 它需要是原子的(从某种意义上说,它不能被分解并零散地输入到映射器中) - 在 HDFS 中被分割。
尽管如此,尽管这些设置的配置方式使得 Hortonworks 文档和其他文档认为足以在“超级模式”下执行作业,但该作业实际上不执行在该模式下,如下所示:
我配置的设置是否存在问题,导致我的作业无法在超级模式下执行?
OP中的那些配置设置是好的-关于
uber mode
的事情是你只能有一个输入文件,而不是像以前那样有多个输入文件。请看这里:
17/10/12 20:42:42 INFO input.FileInputFormat: Total input files to process : 1
17/10/12 20:42:43 INFO mapreduce.JobSubmitter: number of splits:1
17/10/12 20:42:43 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1507833515636_0005
17/10/12 20:42:44 INFO impl.YarnClientImpl: Submitted application application_1507833515636_0005
17/10/12 20:42:44 INFO mapreduce.Job: The url to track the job: http://master:8088/proxy/application_1507833515636_0005/
17/10/12 20:42:44 INFO mapreduce.Job: Running job: job_1507833515636_0005
17/10/12 20:42:49 INFO mapreduce.Job: Job job_1507833515636_0005 running in uber mode : true
或者,直接从马嘴里说:
为了完成@smatthewenglish的答案,它还取决于单个文件的拆分数量。就我而言,我有一个文件足够大,可以被视为两个分割,因此超级模式无法工作。所以你基本上需要一个文件和一个分割。