更新时间:2022-12-14 GMT+08:00

16T的文本数据转成4T Parquet数据失败

问题

使用默认配置时,16T的文本数据转成4T Parquet数据失败,报如下错误信息。

Job aborted due to stage failure: Task 2866 in stage 11.0 failed 4 times, most recent failure: Lost task 2866.6 in stage 11.0 (TID 54863, linux-161, 2): java.io.IOException: Failed to connect to /10.16.1.11:23124
at org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:214)
at org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:167)
at org.apache.spark.network.netty.NettyBlockTransferService$$anon$1.createAndStart(NettyBlockTransferService.scala:92)

使用的默认配置如表1所示。

表1 参数说明

参数

描述

默认值

spark.sql.shuffle.partitions

shuffle操作时,shuffle数据的分块数。

200

spark.shuffle.sasl.timeout

shuffle操作时SASL认证的超时时间。单位:秒。

120s

spark.shuffle.io.connectionTimeout

shuffle操作时连接远程节点的超时时间。单位:秒。

120s

spark.network.timeout

所有涉及网络连接操作的超时时间。单位:秒。

360s

回答

由于当前数据量较大,有16T,而分区数只有200,造成每个task任务过重,才会出现上面的问题。

为了解决上面问题,需要对参数进行调整。

  • 增大partition数,把任务切分的更小。
  • 增大任务执行过程中的超时时间。

在客户端的“spark-defaults.conf”配置文件中配置如下参数。

表2 参数说明

参数

描述

建议值

spark.sql.shuffle.partitions

shuffle操作时,shuffle数据的分块数。

4501

spark.shuffle.sasl.timeout

shuffle操作时SASL认证的超时时间。单位:秒。

2000s

spark.shuffle.io.connectionTimeout

shuffle操作时连接远程节点的超时时间。单位:秒。

3000s

spark.network.timeout

所有涉及网络连接操作的超时时间。单位:秒。

360s