我正在尝试从s3加载4TB的数据(从135mb到400mb的8760个文件),我所做的是:
使用的方法:spark.read.format(…)将其直接加载到数据帧中
使用的机器:Master r4.4xlarge
核心(8)r4.8xlarge
Spark调整:(客户端模式)--num-executors 47 --executor-memory 36g --conf spark.yarn.executor.memoryOverhead = 2800M --conf spark.executor.cores = 5 --conf spark.driver.cores = 5 --conf spark.sql.shuffle.partitions = 115 --conf spark.default.parallelism = 115 --conf spark.network.timeout = 5800s
适用于小数据(75GB)增加到140 GB以上的问题我遇到了以下问题:
面临的问题:
1)如果动态分配设置为true,则我的所有执行程序都将在加载开始后被杀死
2)同样,它也无法以群集模式分配资源(Endless INFO Client:application_xx的应用程序报告(状态:ACCEPTED)消息)
我尝试过的事情:
1)增加内存开销
2)spark.dynamicAllocation.enabled = false可在60秒后使执行程序保持活动状态
3)增加s3读取的最大重试次数(spark.hadoop.fs.s3.maxRetries)
4)以非零退出代码143退出的纱线容器上的火花,通过将调度程序资源百分比提高到(0.5)来固定。
我是新手,请问出什么问题或建议我更好的加载方式