由于某些限制,我的 Spark 代码需要在客户端模式下运行,并且该集群被其他几个应用程序使用。我经常遇到以下问题:
ARN util.Utils: Service 'SparkUI' could not bind on port 4040. Attempting port 4041.
这种情况发生 16 次,这是 maxRetries 的默认值。由于某些业务限制,我无法更改此设置或将其与spark.ui.port + maxRetries 一起使用。
现在,主要问题:
发生这种情况后,应用程序不会正常退出,它只是退出,因此用户很难排除故障,因为标准输出日志中没有异常,它们只是停止。用户不检查 Spark 日志。
有没有办法检查 Spark 是否已成功绑定(bind)到某个部件,如果没有,则抛出异常?我到处寻找但找不到解决方案。
谢谢!
最佳答案
例如,您可以编写一个 shell 脚本来执行此操作
seq=16
count=0
for i in $(seq 4040 $END);
do
if lsof -Pi :$i -sTCP:LISTEN -t >/dev/null ; then
count=`expr $count + 1`
else
echo "not running"
fi;
done
if count == 0 <spark-submit>
关于java - Spark 端口可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59051880/