为何我搭建了分布式hadoop集群后,HDFS正常,但是提交的任务只能在本地运行,无法以集群方式运行

heroseed 2016-10-10 11:06:51
按照教程搭建了分布式集群,HDFS启动正常,50070可以正常监测到节点,但是以命令行hadoop jar的方式运行自带的wordcount例子时,每次都是以本地模式运行,运行结果如下所示:
16/10/10 22:24:57 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_local52215399_0001
16/10/10 22:24:57 INFO mapreduce.Job: The url to track the job: http://localhost:8080/
16/10/10 22:24:57 INFO mapreduce.Job: Running job: job_local52215399_0001
16/10/10 22:24:57 INFO mapred.LocalJobRunner: OutputCommitter set in config null
16/10/10 22:24:57 INFO output.FileOutputCommitter: File Output Committer Algorithm version is 1
16/10/10 22:24:57 INFO mapred.LocalJobRunner: OutputCommitter is org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter
16/10/10 22:24:57 INFO mapred.LocalJobRunner: Waiting for map tasks
16/10/10 22:24:57 INFO mapred.LocalJobRunner: Starting task: attempt_local52215399_0001_m_000000_0]

即任务被提交给了LocalJobRunner,以本地模式运行,在8088监控页面上看不到该任务的信息。如何才能将Job提交至Yarn,以集群方式运行呢?
附本人的相关配置(都是按照分布式教程配置的,JDK和Hadoop的环境变量也配了,应该没问题),望各位大神指出问题在哪里。

core-site.xml
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop/hadoop-2.7.3/tmp</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://Master:9000</value>
</property>

hdfs-site.xml
<property>
    <name>dfs.replication</name>
    <value>3</value> <!-- 本人配置了1台Master,3台Slave-->
  </property>

<property>
<name>dfs.name.dir</name>
<value>/home/hadoop/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/hadoop/hadoop/hdfs/data</value>
</property>

<property>
<name>dfs.permissions</name>
<value>false</value>
</property>

mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

<property>
<name>mapreduce.jobhistory.address</name>
<value>Master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>Master:19888</value>
</property>


yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

<property>
<name>yarn.resourcemanager.hostname</name>
<value>Master</value>
</property>

<property>
   <name>yarn.resourcemanager.resource-tracker.address</name>
   <value>Master:8031</value>
</property>

<property>
<name>yarn.resourcemanager.address</name>
<value>Master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>Master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>Master:8033</value>
</property>
...全文
1304 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_33174666 2017-09-16
  • 打赏
  • 举报
回复
大神,问题怎么解决的,能详细说一下解决方法吗
spy_lacsar 2017-03-01
  • 打赏
  • 举报
回复
楼主,我也遇到同样的问题,麻烦给个解决方案。谢谢
spy_lacsar 2017-03-01
  • 打赏
  • 举报
回复
楼主。我也遇到了相同的问题,麻烦给个解决方案,谢谢
heroseed 2016-10-18
  • 打赏
  • 举报
回复
大神,可以加你的qq号码?
heroseed 2016-10-17
  • 打赏
  • 举报
回复
引用 5 楼 zhang116868 的回复:
对,默认就是本地模式
谢谢大神解答,问题已解决,分给你,不要嫌少
heroseed 2016-10-14
  • 打赏
  • 举报
回复
你的意思是说,我用hadoop jar提交任务时,wordcount的源码被自动加上了以下配置,然后以本地模式运行? conf.set("mapreduce.framework.name", "local"); conf.set("fs.defaultFS", "file:///"); conf.set("mapreduce.framework.name", "local"); conf.set("yarn.resourcemanager.hostname", "local");
heroseed 2016-10-14
  • 打赏
  • 举报
回复
我是在linux上面直接使用命令行来执行自带的wordcount例子的,命令行如下:
hadoop jar  /home/hadoop/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar  wordcount  /test/input /test/output
自带的wordcount源码如下:
    Configuration conf = new Configuration();
    String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
    if (otherArgs.length < 2) {
      System.err.println("Usage: wordcount <in> [<in>...] <out>");
      System.exit(2);
    }
    Job job = Job.getInstance(conf, "word count");
    job.setJarByClass(WordCount.class);
    job.setMapperClass(TokenizerMapper.class);
    job.setCombinerClass(IntSumReducer.class);
    job.setReducerClass(IntSumReducer.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);
在代码中并没有看到本地模式的设置啊,并没有找到下面的代码啊
        conf.set("mapreduce.framework.name", "local");
        conf.set("fs.defaultFS", "file:///");
        conf.set("mapreduce.framework.name", "local");
        conf.set("yarn.resourcemanager.hostname", "local");
你的意思是说自带的wordcount例子本来就只能以本地模式运行,我要想以集群方式运行的话,要自己修改wordcount的源码吗?
海会圣贤 2016-10-14
  • 打赏
  • 举报
回复
这个是你wordcount客户端指定的,默认为本地模式,代码如下:
Configuration conf = new Configuration();
		conf.set("mapreduce.framework.name", "local");
		conf.set("fs.defaultFS", "file:///");
		conf.set("mapreduce.framework.name", "local");
		conf.set("yarn.resourcemanager.hostname", "local");
		/*conf.set("mapreduce.framework.name", "yarn");
		conf.set("yarn.resourcemanager.hostname", "mini1");*/
		
		Job job = Job.getInstance(conf);
海会圣贤 2016-10-14
  • 打赏
  • 举报
回复
对,默认就是本地模式
heroseed 2016-10-11
  • 打赏
  • 举报
回复
本人为Hadoop 2.7.3

20,808

社区成员

发帖
与我相关
我的任务
社区描述
Hadoop生态大数据交流社区,致力于有Hadoop,hive,Spark,Hbase,Flink,ClickHouse,Kafka,数据仓库,大数据集群运维技术分享和交流等。致力于收集优质的博客
社区管理员
  • 分布式计算/Hadoop社区
  • 涤生大数据
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧