异常描述

在一个CDSW环境中,由于其中一个租户经常提交大型Spark作业将YARN上租户所在的资源池资源用到95%以上,从而影响到同一租户下其他用户提交作业的运行。这种情况下我们没办法直接找到这些大型作业的实际提交人,是因为我们在为CDSW做多租户配置的时候会将登录CDSW的某一批用户统一绑定到同一个租户下(这样设计的目的主要是为了简化YARN的租户管理,而不用为每个用户创建资源池队列),所以导致在YARN的界面上看到的都是同一个租户,而无法对应到实际CDSW的用户以及这个人提交的大型作业。本文主要描述通过修改Spark的配置来将作业的实际提交人的用户名展示到Spark UI,非CDSW的YARN的多租户管理也会碰到类似问题。

异常解决

1.登录CM界面,进入Spark2的实例界面,将Gateway角色分组,将CDSW所在主机的Gateway角色分到另外的组




spark将特定列写入pg_SPARK


spark将特定列写入pg_SPARK_02


spark将特定列写入pg_SPARK_03


spark将特定列写入pg_spark_04


spark将特定列写入pg_spark提交到yarn_05


2.进入Spark2的配置页面,修改“spark-conf/spark-env.sh 的 Spark 客户端高级配置代码段(安全阀)”这一参数,选择编辑单个值,修改CDSW Gateway角色组的配置,填入如下内容:

SPARK_CONF=/home/cdsw/spark-defaults.confif [ ! -f "$SPARK_CONF" ]; then  touch "$SPARK_CONF"fistr=`cat $SPARK_CONF | grep spark.app.real.username`if [ -z "$str" ];then  echo -e "spark.app.real.username=${GIT_AUTHOR_NAME}" >> $SPARK_CONFfi


spark将特定列写入pg_spark提交到yarn_06


3.修改完配置后点击“保存更改”,根据提示重启相关服务(此步骤会涉及到CDSW服务重启)


spark将特定列写入pg_spark提交到yarn_07


验证

1.使用user1用户登录CDSW


spark将特定列写入pg_重启_08


2.运行一个示例PySpark程序


spark将特定列写入pg_spark将特定列写入pg_09


3.在SparkUI上找到该作业,并点击“Environment”,可以看到参数列表中打印了提交Spark作业的用户


spark将特定列写入pg_spark_10


总结

1.该方式是将CDSW上登录的实际用户以Spark参数的形式带到Spark作业中,具体做法是在CDSW上的Session启动时自动将参数写入到Project下的spark-defaults.conf文件中,写入到此配置文件中参数能够在SparkUI上直接看到。

2.针对CDSW上的每个Project,在修改Spark配置重启CDSW之后的首次Session时,会将实际提交人的用户名这一参数自动写入 spark-defaults.conf文件中,但是在首次Session中提交的Spark作业里该参数不会生效,需要重启启动Session才能让参数生效。