zoukankan      html  css  js  c++  java
  • spark 在yarn执行job时一直抱0.0.0.0:8030错误

    近日新写完的spark任务放到yarn上面执行时,在yarn的slave节点中一直看到报错日志:连接不到0.0.0.0:8030 。

    1 The logs are as below:
    2 2014-08-11 20:10:59,795 INFO [main] org.apache.hadoop.yarn.client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8030
    3 2014-08-11 20:11:01,838 INFO [main] org.apache.hadoop.ipc.Client: Retrying connect to server: 0.0.0.0/0.0.0.0:8030. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS)

    这就很奇怪了,因为slave执行任务时应该链接的是master节点的8030端口,正常情况下应该为 masterIP:8030.

    按照常规思路,首先检查配置文件:yarn-site.xml 。查看里面配置的yarn.resourcemanager.scheduler.address 是否为master。

    <property>
         <name>yarn.resourcemanager.hostname</name>                      
         <value>master1</value>
    </property>
    <property>
         <name>yarn.resourcemanager.scheduler.address</name>                      
         <value>master1:8030</value>
    </property>

    这一项排查过后,重启cluser,故障依旧。

    继续排查,查看环境变量,看是否slave启动时是否没有加载yarn-site.xml。env|grep YARN 直接查看所有YARN的环境变量,其中可以看到YARN_CONF_DIR = HADOOP_CONF_DIR ,并且指向了正确的目录路径。

    那么就很奇怪了,继续排查。如果环境方面都没有问题,写一下 hard coding.在代码里面直接写死:

    1 Configuration conf = new Configuration();  
    2 conf.set("fs.default.name",hdfsUri);  
    3 conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");  
    4 conf.set("mapreduce.framework.name", "yarn");  
    5 conf.set("fs.AbstractFileSystem.hdfs.impl", "org.apache.hadoop.fs.Hdfs");  
    6 conf.set("yarn.resourcemanager.address", yarnip+":"+8030); //设置RM 访问位置  

    重新执行job,仍然报错。这下就有点晕菜了,冷静一下,目前已经排查的有:

    1、配置文件:master、slave的yarn-site.xml 都正常无问题。

    2、环境变量:master、slave的环境变量都正常无问题。

    3、hard-coding,也无效果。

    难道是框架本省的问题?

    在spark根目录检索0.0.0.0,发现在spark依赖的一个包里面还真有一个匹配的:

    spark-core-assembly-0.4-SNAPSHOT.jar

    打开这个jar包,里面有一个yarn-default.xml 。这里面配置的是0.0.0.0. 按道理来说配置文件优先级应该是大于jar的。

    改了试一下!

    把0.0.0.0改成master的IP,重新打包上传,执行job。

    Oh my god!

    成功了!

    看看时间,为了这个问题已经搞了大半个夜了。算了,先睡觉。具体问题留待周一检查。

    但初步认为:应该是yarn的client再执行job时,会取一个masterIP 值,如果取不到,则默认取yarn-defalut中的值。所以关键就是找到从哪里取值。这个问题看看源码应该不是大问题。

    OK,睡觉去!

  • 相关阅读:
    Go Example--json
    Go-struct
    Flutter高级进阶------Flutter Package、Flutter Plugin、Flutter Module
    Flutter项目实操---资讯、发布动弹
    Kotlin项目实战之手机影音---首页mvp重构、网络框架封装、重构首页数据加载、home页面view解绑
    vscode多处编辑
    配制vscode环境
    vscode配制perl环境
    R基本函数总结
    Git使用方法
  • 原文地址:https://www.cnblogs.com/vikings-blog/p/3918266.html
Copyright © 2011-2022 走看看