设置Spark连接超时的最简单方法

时间:2018-09-25 17:15:44

标签: java apache-spark apache-spark-sql

为spark的连接方法(例如读写)设置超时的最简单方法是什么?

到目前为止,我尝试将“ spark.network.timeout”添加为非常低的值,例如“ 2s”,但是随后出现异常,要求“ spark.executor.heartbeatInterval”小于超时值,所以我将heartbeatInterval设置为“ 1s”。

设置超时时间:

SparkSession sparkSession = SparkSession.builder().appName("test").master("local[*]").config("spark.network.timeout","2s").config("spark.executor.heartbeatInterval", "1s").getOrCreate();

读取数据:

Dataset<Row> dataset =  sparkSession.read().jdbc(url, fromStatement, properties);

写数据:

dataset.write().mode(SaveMode.Overwrite).jdbc(destinyUrl, tableName, accessProperties);

读取方法花费11秒加载数据集,而写入方法花费13秒将数据集保存到数据库中,但是2秒后没有停止任何操作。

1 个答案:

答案 0 :(得分:0)

当没有n / w问题时,您不能指望将其停止。所有网络互动均默认使用'spark.network.timeout'。 如果未配置以下属性,则将使用该配置。

  spark.core.connection.ack.wait.timeout,
  spark.storage.blockManagerSlaveTimeoutMs,
  spark.shuffle.io.connectionTimeout
  spark.rpc.askTimeout or spark.rpc.lookupTimeout 

其中spark.executor.heartbeatInterval是每个执行者对驾驶员的心跳之间的间隔。心跳使驾驶员知道执行器仍在运行,并使用正在进行的任务的度量标准对其进行更新。 spark.executor.heartbeatInterval应该大大小于spark.network.timeout(默认= 10s)

源:https://spark.apache.org/docs/latest/configuration.html#networking