EMR上的Spark批处理作业的优化

问题描述 投票:-1回答:1

我们正在使用下面给出的Cluster配置在EMR集群上运行spark-job。

Resources:
Node Type:CORE - 2 INSTANCES OF
r4.8xlarge
32 vCore, 244 GiB memory, EBS only storage
EBS Storage:32 GiB

Node Type: MASTER
1 Instance of r4.4xlarge
16 vCore, 122 GiB memory, EBS only storage
EBS Storage:32 GiB

Node Type: TASK- 
2 INSTANCES Of 
r4.4xlarge
16 vCore, 122 GiB memory, EBS only storage
EBS Storage:32 GiB

我们正在通过在EMR控制台上使用以下参数来进行火花提交:

/usr/bin/spark-submit --deploy-mode cluster --conf spark.sql.parquet.fs.optimized.committer.optimization-enabled=true --conf spark.sql.files.ignoreCorruptFiles=true --driver-memory 5g --master yarn --class class_name s3://location_of_jar -c s3://location of input to jar -w xyz.json

我们认为这些论点没有充分利用可用的全部可用资源。有人可以建议通过更改任何spark-defaults.conf文件或通过传递更多参数来使EMR上进行火花提交的其他优化方法吗,以便对所有可用资源进行最佳利用吗?我们一次执行一项工作。集群上没有正在运行的并行作业

amazon-web-services apache-spark apache-spark-sql amazon-emr
1个回答
0
投票
[不知道为每个执行者分配的资源,工作的性质,您正在处理的数据量等,因此很难给出适当的建议。我认为您现在能做的最好的就是在创建EMR集群的同时安装神经节。可以通过http://master-public-dns-name/ganglia/获得神经节Web ui>

首先查看cpu和内存使用情况。如果您要为Spark工作最佳地分配资源,然后相应地调整每个执行器的资源,那么这将给您一个足够好的主意。

执行者,执行者内存和内核的数量可以通过以下方式在您的spark-submit命令中设置(这些是示例值):

--num-executors 10 --executor-cores 1 --executor-memory 5g

查看神经节图表后,您将了解哪种资源正在使用不足/过度使用。相应地更改它们。

如果您不想使用这些数字,而是让Spark决定什么是最好的组合,则可能需要使用以下几行将动态资源分配设置为true:

--conf spark.shuffle.service.enabled=true --conf spark.dynamicAllocation.enabled=true

这里要注意的一件事是,yarn将获得分配给核心+任务节点的总内存的75%。而且,驱动程序和每个执行程序都有与其相关的内存开销。查找spark文档。在手动将资源分配给驱动程序和执行程序时,请记住这一点。
© www.soinside.com 2019 - 2024. All rights reserved.