为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秒后没有停止任何操作。
答案 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