Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 基于EMR的火花批作业优化_Amazon Web Services_Apache Spark_Apache Spark Sql_Amazon Emr - Fatal编程技术网

Amazon web services 基于EMR的火花批作业优化

Amazon web services 基于EMR的火花批作业优化,amazon-web-services,apache-spark,apache-spark-sql,amazon-emr,Amazon Web Services,Apache Spark,Apache Spark Sql,Amazon Emr,我们正在EMR集群上运行spark作业,集群配置如下所示 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

我们正在EMR集群上运行spark作业,集群配置如下所示

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控制台上使用以下参数执行spark submit:

/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

我们认为这些论点没有充分利用现有资源。任何人都可以建议是否有其他优化的方式在EMR上通过更改任何spark-defaults.conf文件或通过传递更多参数来执行spark submit,以便优化所有可用资源的利用率?我们一次运行一个作业。集群上没有并行作业运行

如果不知道每个执行者分配的资源、作业的性质、正在处理的数据量等,很难给出正确的建议。我认为现在最好的方法是在创建EMR集群的同时安装ganglia。ganglia web ui可通过
http://master-public-dns-name/ganglia/

首先,看看cpu和内存的使用情况。这将给你一个足够好的主意,如果你正在为你的spark工作最佳地分配资源,然后相应地调整每个执行者的资源

可以使用以下方式在spark submit命令中设置执行器、执行器内存和内核的数量(这些是示例值):

看完ganglia图表后,您将了解到哪些资源利用不足/过度。相应地改变这些

如果您不想玩弄这些数字,让spark决定什么是最佳组合,那么使用以下行将dynamic resource allocation设置为true可能是值得的:

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

这里需要注意的一点是,纱线将获得分配给核心+任务节点的总内存的75%。此外,驱动程序和每个执行器都有与其相关联的内存开销。请查阅spark文档。手动将资源分配给驱动程序和执行程序时,请记住这一点。

分析
spark作业的第一步是
spark ui
。因此,使用
跟踪url
,查看l
ogs、作业、执行者、流媒体

http://cluster_manager_host:8088/
要更详细地分析内存和cpu利用率,您也可以使用
Gangalia
工具

http://cluster_manager_host/Gangalia
在此之后,您可以做的是:

  • 您必须选择自定义配置,如

    (i) 执行器数量<代码>--conf num executors x

(ii)执行器存储器<代码>--配置执行器存储器y

(iii)核心数量<代码>--配置执行器核心z

(iv)启用动态资源分配
--conf spark.dynamicAllocation.enabled=true

(v) 启用最大资源分配
--conf maximizeResourceAllocation=true

(vi)将
序列化
从默认更改为
Kryo
--conf org.apache.spark.serializer.KryoSerializer

(vii)根据您的配置将分区数从默认更改为自定义
rdd=rdd.repatition(sparkConf.defaultParalallism*2)

  • 如果在正确配置上述功能后,您的作业仍然很慢,请更改代码并使用正确的函数和对象。像

    (i) 如果要将数据发送到任何外部目标(如Kinesis、DB或Kafka),请使用mapPartitions或ForEachPartitions并减少对象创建的数量

    (ii)如果您正在调用外部API,则也应遵循上述策略

    (iii)使用适当的数据结构

  • 有关更多信息,您可以参考:

    我希望这对你有帮助

    http://cluster_manager_host/Gangalia