bug消消乐

Spark在HDP Yarn的提交与正常通信

2021-05-13  本文已影响0人  朝朝Mumu

环境

问题1:在YARN上提交开源spark任务

如何在HDP平台上提交运行Apache Spark3 on YARN任务?

解决方案

按以下步骤进行:

  1. 修改spark-env配置文件,添加如下内容:
HADOOP_CONF_DIR=/usr/hdp/3.0.1.0-187/hadoop/conf
YARN_CONF_DIR=/usr/hdp/3.0.1.0-187/hadoop/conf
  1. 修改spark-defaults配置文件,添加如下内容:
spark.driver.extraJavaOptions -Dhdp.version=3.0.1.0-187
spark.yanr.am.extraJavaOptions -Dhdp.version=3.0.1.0-187
  1. 可选修改(Hadoop的)mapred-site配置文件,将{{hdp.version}}直接写死成3.0.1.0-187或你自己ambari hdp的版本号。

  2. 替换spark3安装目录下的jars中的jersey-clientjersey-core为1.19版本!!!否则提交任务时会抛出异常ClassNotFound :com/sun/jersey/api/client/config/ClientConfig …… Why?传送门

  3. 可以尝试提交SparkPi到HDP YARN,进入spark安装目录,执行以下的命令:

./bin/run-example --master yarn SparkPi 10

问题2:spark任务提交后出错Yarn application ended

用开源Spark提交任务到Ambari大数据平台的YARN(Hadoop)上时,报错Yarn application ended如何解决?
注意,一些博客说的修改pmem和vmem参数为false并不能解决问题!

解决方案

  1. 进入Yarn ResourceManager UI查看Yarn日志
  2. 定位到报错原因是因为AM启动失败造成的
  3. 继续查看日志,发现是因为运行container_launch.sh时返回的classpath包含${hdp.version}字段
  4. 可以看到开源Spark无法识别${hdp.version}字段,需要在SPARK_HOME/conf/spark-defaults.conf中添加相应的extraJavaOptions
    确保如问题1所述添加了如下两行:
spark.driver.extraJavaOptions -Dhdp.version=${hdp.version}
spark.yarn.am.extraJavaOptions -Dhdp.version=${hdp.version}

注意:步骤4中的${hdp.version},需要赋值实际的hdp版本号,如3.0.1.0-187

问题3:Spark任务挂起,处于Accepted状态,无法正常与YARN通信

一般在使用集群外客户端时出现该问题,平台使用集群外Spark客户端时,无法与YARN正常通信的原因有哪些?如何解决?

解决方案

常见的原因有以下几点,依次进行如下的检查

  1. 防火墙未关闭
  2. YARN队列资源已耗尽,尤其注意查看AM资源是否够用,默认为20%的资源,在虚拟机上往往容易发生AM资源不足,无法启动driver的情况。
  3. 集群节点和客户端节点未配置所有节点的IP映射

解决方法:
需要根据报错确定问题所在,然后执行相应的措施:

如查找YARN的相关日志发现了报错:Failed to connect to driver at x.x.x.x,retrying.....,这就是ip映射有问题。
解决方法有两种:
(1)集群外Client和集群内每个NodeManager节点分别添加所有IP映射(/etc/hosts文件) ,确保集群内节点持有集群外客户端的域名映射。
(2) 客户端提交任务时,指定参数--conf spark.driver.host=$your_ip_address,ip直接写客户端的ip地址,不是写客户端域名。
方法2解决该问题是比较优雅的,不需要去动集群的配置!

问题4 防火墙未关闭导致的一些问题

在HDFS上生成数据并采用Spark on Yarn模式处理数据时,若系统防火墙未关闭,可能会出现什么问题?

答案是:

  1. HDFS写入数据时报错: NO Route to Host from xx.xx.xx.xx to xx.xx.xx.xxx failed on socket timeout exception
  2. ResourceManager Web UI 无法访问
  3. Spark的Executor只运行在提交任务的节点上
  4. Spark运行任务报错:Could not obtain block(可能由其他问题引起)
    则以上问题首先要确保防火墙已关闭。

以上基本囊括了开源Spark在HDP环境提交任务的常见错误与解决思路。如果还有新的错误,欢迎留言讨论。

点:任务调度、Spark On YARN、Ambari、客户端
线:Spark
面:大数据计算

万丈高楼平地起,一砖一瓦皆根基。

上一篇 下一篇

猜你喜欢

热点阅读