本文介绍Spark服务异常的排查方法和解决方案。
Spark服务日志
当出现Spark服务异常时,您可以查看Spark服务的日志。
服务日志目录:
EMR-3.40.0之后版本、4.10.1之后版本、5.6.0之后版本:/var/log/emr/spark
EMR-3.40.0及之前版本、4.10.1及之前版本、5.6.0及之前版本:/mnt/disk1/log/spark
日志文件:
Spark History Server:spark-history-server.log和spark-spark-org.apache.spark.deploy.history.HistoryServer*.out
Spark Thrift Server:spark-thrift-server.log和spark-spark-org.apache.spark.sql.hive.thriftserver.HiveThriftServer2*.out
Spark History Server
出现节点磁盘写满,检查后发现HDFS上的spark-history目录下有大量的数据
在EMR控制台Spark服务配置页面的spark-defaults.conf页签,修改spark.history.fs.cleaner.enabled的参数值为true,然后重启History Server服务。
您也可以手动清理HDFS服务/spark-history目录下最老的一部分作业数据。
History WebUI无法打开
在Spark History Server所在的节点上执行命令
ps -ef | grep org.apache.spark.deploy.history.HistoryServer | grep -v grep
,确认Spark History Server进程否存在。Spark History Server进程存在时,记录获取到的进程PID。
在Spark History Server所在节点上执行
jstat -gcutil [前一步获取到的进程PID] 1000 10
,如果发现FGCT和GCT数字大并且在一直增长,您可以在EMR控制台增加Spark History Server内存来解决,即在Spark服务配置页面的spark-env.sh页签,修改spark_history_daemon_memory的参数值,然后重启History Server服务。
Spark Thrift Server
收到系统事件HealthCheck:Spark.ThriftServer:Failed
请先检查当前系统事件的详细内存,确认Message的内容是否有
out=-bash: spark-beeline: command not found
。是:请忽略该异常,这是集群状态检查的异常。
不是:请执行下一步。
执行以下命令,确认Spark Thrift Server是否还存在。
ps -ef | grep org.apache.spark.sql.hive.thriftserver.HiveThriftServer2 | grep -v grep
如果不存在,请保留日志重启服务并联系技术支持。
连接Thrift Server报异常Thrift saw a transport exception: Could not connect to emr-header-1:10001
在Spark Thrift Server日志上执行以下命令,确认Spark Thrift Server进程是否存在。
ps -ef | grep org.apache.spark.sql.hive.thriftserver.HiveThriftServer2 | grep -v grep
Spark Thrift Server进程存在时,请记录获取到的进程PID。
在Spark Thrift Server所在节点上执行命令
jstat -gcutil [前一步获取到的进程PID] 1000 10
,如果发现FGCT和GCT数字大并且在持续增长,则说明Spark Thrift Server内存不够了。您可以在EMR控制台增加Thrift Server内存来解决,即在Spark服务配置页面的spark-env.sh页签,修改spark_thrift_daemon_memory的参数值,并重启Thrift Server服务。根据实际的业务情况,您可能需要多次调试spark_thrift_daemon_memory的参数值,直至业务正常运行。您也可以尝试在Spark服务配置页面的spark-thriftserver.conf页签,减少spark.driver.maxResultSize的参数值,以减少单个SparkSQL的内存使用量,消除内存异常SQL对服务的影响。