一、问题描述
提交spark程序到cdh集群,发现标准输出的日志出现中文乱码的问题,如下图所示:
二、解决方法
1、在sparkConf中设置如下参数:
val sparkConf = new SparkConf()
.setAppName(this.getClass.getName)
.set("spark.executor.extraJavaOptions", "-Dfile.encoding=UTF-8")
.set("spark.driver.extraJavaOptions", "-Dfile.encoding=UTF-8")
2、在spark-submit的命令行中设置如下参数:
spark-submit \
--class sparkDemo \
--master yarn \
--deploy-mode cluster \
--num-executors 2 \
--executor-cores 2 \
--executor-memory 2G \
--driver-memory 3G \
--conf spark.yarn.submit.waitAppCompletion=false \
--conf spark.executor.extraJavaOptions="-Dfile.encoding=UTF-8" \
--conf spark.driver.extraJavaOptions="-Dfile.encoding=UTF-8" \
--files /opt/app/application.properties \
/opt/app/sparkDemo.jar
说明:如果在sparkConf中设置了
spark.executor.extraJavaOptions="-Dfile.encoding=UTF-8"
spark.driver.extraJavaOptions="-Dfile.encoding=UTF-8"
则不需要在命令行这通过--conf
指定
因为在程序中设置参数的优先级高于命令行中设置的参数
设置完成之后,再次提交任务,可以发现乱码的问题解决了
参考文档:
spark stdout中文乱码