环境:
spark 2.4.0-cdh6.3.2
hadoop 3.0.0-cdh6.3.2
hive 2.1.1-cdh6.3.2
背景:
最近离线计算集群的资源率较高,偶尔会出现HiveOnSpark的任务失败,查看失败任务日志:
FAILED: Execution Error, return code 30041 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Failed to create Spark client for Spark session 90853dcc-52c8-4c29-bd09-fd23403a0b9d_0: java.util.concurrent.TimeoutException: Client '90853dcc-52c8-4c29-bd09-fd23403a0b9d_0' timed out waiting for connection from the Remote Spark Driver
问题定位:
观察任务失败期间集群资源使用率较高,并通过开发环境复现此问题;
首先将开发集群资源抢占完,使得集群无法为HiveOnSpark任务的driver创建容器,随后提交HiveOnSpark任务复现此问题;
提交任务90秒后抛出此异常,经查询文档以下参数会影响超时问题
hive.spark.client.future.timeout
hive.spark.client.connect.timeout
hive.spark.client.server.connect.timeout
解决方式:
Hive客户端中配置文件 hive-site.xml 中增加以下参数:
<property>
<name>hive.spark.client.connect.timeout</name>
<value>4hour</value>
<!--Spark driver连接Hive client的超时时间 默认值 1000ms -->
</property>
<property>
<name>hive.spark.client.future.timeout</name>
<value>4hour</value>
<!-- Hive client请求Spark driver的超时时间 默认值 60s -->
</property>
<property>
<name>hive.spark.client.server.connect.timeout</name>
<value>4hour</value>
<!-- Hive client和远程Spark driver握手时的超时时间 默认值90000ms -->
</property>
主意:增加超时时间会导致因其他原因任务失败的正常反馈,可以根据自身的实际情况进行调整,并辅以监控工具进行报警;
参考文档:
HiveOnSpark报错:Client ‘xxx’ timed out waiting for connection from the Remote Spark Driver
https://blog.csdn.net/benpaodexiaowoniu/article/details/103872370
Hive on Spark功能增加九个参数
http://www.wangyunw.com/article_1490.html