我们的
spark aggregation jobs
需要大量执行时间才能完成。本来应该在 5 分钟内完成,但实际需要 30 到 40 分钟才能完成。
dataproc cluster logging
说它正在尝试扫描中间完成的目录并且它不断出现。
如果我查看
spark UI
,它表示该工作实际上只花费了更少的时间,并且可能会因为某些原因而被搁置。
我尝试查看给定作业 ID 的纱线日志,但在那里找不到类似的错误消息。我在哪里可以看到云日志中出现的相同日志?
yarn logs -applicationId application_1700468925211_1632269
我读了一些文章,说它与 jobhistory 服务器有关,其中它试图循环扫描目录。
供参考:https://issues.apache.org/jira/browse/MAPREDUCE-6684
查看
mapred-site.xml
文件,我发现下面的属性指向临时存储桶的 gcs 存储桶位置,用于存储 dataproc 作业详细信息。
mapreduce.jobhistory.done-dir
mapreduce.jobhistory.intermediate-done-dir
<property>
<name>mapreduce.jobhistory.always-scan-user-dir</name>
<value>true</value>
<description>Enable history server to always scan user dir.</description>
</property>
<property>
<name>mapreduce.jobhistory.recovery.enable</name>
<value>true</value>
<description>
Enable history server to recover server state on startup.
</description>
</property>
我们可以将上述禁用为 false 以解决问题吗?我对此方法非常怀疑,因为我们在生产中面临这个问题,并且无法在较低的环境中复制。期待有意义的建议。
我登录到
master node
并更改了 mapred-site.xml
文件并将 mapreduce.jobhistory.always-scan-user-dir
属性设置为 false
cd /etc/hadoop/conf/
sudo vi mapred-site.xml
<property>
<name>mapreduce.jobhistory.always-scan-user-dir</name>
<value>true</value>
<description>Enable history server to always scan user dir.</description>
</property>
此后,我取消了现有正在运行的作业并停止并重新启动了
dataproc cluster
。作业运行良好,并且执行时间较短。
不太确定此问题的原因,尽管我们有其他具有类似配置的集群,并且它们运行得绝对正常。