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所示。
回答
由于当前数据量较大,有16T,而分区数只有200,造成每个task任务过重,才会出现上面的问题。
为了解决上面问题,需要对参数进行调整。
- 增大partition数,把任务切分的更小。
- 增大任务执行过程中的超时时间。
在客户端的“spark-defaults.conf”配置文件中配置如下参数。
参数 |
描述 |
建议值 |
---|---|---|
spark.sql.shuffle.partitions |
shuffle操作时,shuffle数据的分块数。 |
4501 |
spark.shuffle.sasl.timeout |
shuffle操作时SASL认证的超时时间。单位:秒。 |
2000s |
spark.shuffle.io.connectionTimeout |
shuffle操作时连接远程节点的超时时间。单位:秒。 |
3000s |
spark.network.timeout |
所有涉及网络连接操作的超时时间。单位:秒。 |
360s |