异常描述
在一个CDSW环境中,由于其中一个租户经常提交大型Spark作业将YARN上租户所在的资源池资源用到95%以上,从而影响到同一租户下其他用户提交作业的运行。这种情况下我们没办法直接找到这些大型作业的实际提交人,是因为我们在为CDSW做多租户配置的时候会将登录CDSW的某一批用户统一绑定到同一个租户下(这样设计的目的主要是为了简化YARN的租户管理,而不用为每个用户创建资源池队列),所以导致在YARN的界面上看到的都是同一个租户,而无法对应到实际CDSW的用户以及这个人提交的大型作业。本文主要描述通过修改Spark的配置来将作业的实际提交人的用户名展示到Spark UI,非CDSW的YARN的多租户管理也会碰到类似问题。
异常解决
1.登录CM界面,进入Spark2的实例界面,将Gateway角色分组,将CDSW所在主机的Gateway角色分到另外的组
2.进入Spark2的配置页面,修改“spark-conf/spark-env.sh 的 Spark 客户端高级配置代码段(安全阀)”这一参数,选择编辑单个值,修改CDSW Gateway角色组的配置,填入如下内容:
代码语言:javascript复制SPARK_CONF=/home/cdsw/spark-defaults.conf
if [ ! -f "$SPARK_CONF" ]; then
touch "$SPARK_CONF"
fi
str=`cat $SPARK_CONF | grep spark.app.real.username`
if [ -z "$str" ];then
echo -e "nspark.app.real.username=${GIT_AUTHOR_NAME}" >> $SPARK_CONF
fi
3.修改完配置后点击“保存更改”,根据提示重启相关服务(此步骤会涉及到CDSW服务重启)
验证
1.使用user1用户登录CDSW
2.运行一个示例PySpark程序
3.在SparkUI上找到该作业,并点击“Environment”,可以看到参数列表中打印了提交Spark作业的用户
总结
1.该方式是将CDSW上登录的实际用户以Spark参数的形式带到Spark作业中,具体做法是在CDSW上的Session启动时自动将参数写入到Project下的spark-defaults.conf文件中,写入到此配置文件中参数能够在SparkUI上直接看到。
2.针对CDSW上的每个Project,在修改Spark配置重启CDSW之后的首次Session时,会将实际提交人的用户名这一参数自动写入 spark-defaults.conf文件中,但是在首次Session中提交的Spark作业里该参数不会生效,需要重启启动Session才能让参数生效。