环境:

spark 2.4.0-cdh6.3.2
hadoop 3.0.0-cdh6.3.2
hive 2.1.1-cdh6.3.2

背景:

最近离线计算集群的资源率较高,偶尔会出现HiveOnSpark的任务失败,查看失败任务日志:
image.png

  1. 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

问题定位:

观察任务失败期间集群资源使用率较高,并通过开发环境复现此问题;
image.png
首先将开发集群资源抢占完,使得集群无法为HiveOnSpark任务的driver创建容器,随后提交HiveOnSpark任务复现此问题;
image.png
提交任务90秒后抛出此异常,经查询文档以下参数会影响超时问题
hive.spark.client.future.timeout
hive.spark.client.connect.timeout
hive.spark.client.server.connect.timeout

解决方式:

Hive客户端中配置文件 hive-site.xml 中增加以下参数:

  1. <property>
  2. <name>hive.spark.client.connect.timeout</name>
  3. <value>4hour</value>
  4. <!--Spark driver连接Hive client的超时时间 默认值 1000ms -->
  5. </property>
  6. <property>
  7. <name>hive.spark.client.future.timeout</name>
  8. <value>4hour</value>
  9. <!-- Hive client请求Spark driver的超时时间 默认值 60s -->
  10. </property>
  11. <property>
  12. <name>hive.spark.client.server.connect.timeout</name>
  13. <value>4hour</value>
  14. <!-- Hive client和远程Spark driver握手时的超时时间 默认值90000ms -->
  15. </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