昨天在学习yarn时突然发现我竟然查不到mapreduce的任务进度,于是上网查询了不少的资料,发现有好多人有着同样的问题,但是解决办法好像并不相同,但大都是要修改yarn-site.xml和mapred-site.xml这两个配置文件。以下给出我的一种解决这一问题的过程。
在运行mapreduce的wordcount程序时是这个界面:
首先尝试将mapred-site.xml中的:
<property>
<name>mapreduce.job.tracker</name>
<value>hdfs://ip:8001</value> <!--ip为自己的ip地址-->
<final>true</final>
</property>
改成:
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
原因是前者map服务并没有跑在yarn上。之后再次运行mapreduce程序,结果又出现了如下问题
任务一直卡在这里,于是乎,考虑是内存不足的原因,于是尝试将yarn-site.xml中的以下内容:
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>1024</value>
</property>
修改为:
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>4096</value>
</property>
之后再次启动集群,再次运行,发现仍然卡在那。之后看网上对于这个问题的一些解决办法是要把第一次改的东西再改回去,即让它在默认配置下运行,但这样不就又回到了map服务没有跑在yarn上。于是乎,我尝试在yarn-site.xml中增加的以下内容:
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
<property>
<name>yarn.application.classpath</name>
<value>/opt/software/hadoop-3.0.0/etc/hadoop:/opt/software/hadoop-
3.0.0/share/hadoop/common/lib/*:/opt/software/hadoop-3.0.0/share/hadoop/common/*:/opt/software/hadoop-3.0.0/share/hadoop/hdfs:/opt/software/hadoop-3.0.0/share/hadoop/hdfs/lib/*:/opt/software/hadoop-3.0.0/share/hadoop/hdfs/*:/opt/software/hadoop-3.0.0/share/hadoop/mapreduce/*:/opt/software/hadoop-3.0.0/share/hadoop/yarn:/opt/software/hadoop-3.0.0/share/hadoop/yarn/lib/*:/opt/software/hadoop-3.0.0/share/hadoop/yarn/*</value>
</property>
其中classpath下value的值为在Linux命令行输入:hadoop classpath所显示的结果。
之后再次运行mapreduce程序:
成功。