Apache spark Can';不要让Spark在AWS EMR上使用超过百分之几的资源

Apache spark Can';不要让Spark在AWS EMR上使用超过百分之几的资源,apache-spark,yarn,amazon-emr,Apache Spark,Yarn,Amazon Emr,我一直在尝试在集群模式下通过AWS EMR和Thread运行Spark作业,但没有任何设置组合导致该作业最多使用总可用资源的百分之几 val queries = spark.read.format("csv") .option("header", "true") .option("inferSchema", "true") .load("input_file.csv") .rdd val result = queries.map(q => doSomethingWith

我一直在尝试在集群模式下通过AWS EMR和Thread运行Spark作业,但没有任何设置组合导致该作业最多使用总可用资源的百分之几

val queries =  spark.read.format("csv")
  .option("header", "true")
  .option("inferSchema", "true")
  .load("input_file.csv")
  .rdd

val result = queries.map(q => doSomethingWith(q))
以下是所有节点的典型CPU使用率图表(主节点是从20%开始然后下降的节点,其他节点都是从节点):

上图是通过以下节点获得的:

Master: 1x r4.2xlarge (8 cores,  61GB RAM)
Slaves: 4x r4.8xlarge (32 cores, 244GB RAM)
使用以下设置运行:

spark-submit --deploy-mode cluster --class Run --master yarn s3://app.jar

Classification      Property                                Value
spark               maximizeResourceAllocation              true
spark-defaults      spark.executor.cores                    10
spark-defaults      spark.dynamicAllocation.enabled         true
spark-defaults      spark.executor.instances                12
spark-defaults      spark.executor.memory                   76g
yarn-site           yarn.nodemanager.resource.memory-mb     245760
yarn-site           yarn.nodemanager.resource.cpu-vcores    30
我试着遵循所有典型的建议,包括中、上和中的建议

所有这些文章都一致认为Spark不擅长自动使用资源,并且它们声明您必须告诉他(和纱线)它必须使用多少资源


到目前为止,我的经验是,无论参数和值是什么,Spark/Thread都不关心,CPU使用率图表总是相同的(与上图类似)。

听起来您在工作分区方面受到了限制:如果文件(.gz?)或数据无法拆分,你没有任何平行性

如果您打开了inferSchema,Spark将读取整个文件一次,以确定模式是什么,然后返回并重新读取它;这在S3上(字面上)是昂贵的。spark master将在安排任何工作之前进行端到端的工作


尝试一件事:使初始作业成为一个简单的ETL:
load().write().partitionBy(“date”).format(“parquet”).save(hdfs://)
然后在将来的工作中使用该组分区文件。多个文件->多个工作程序,即使文件格式本身无法拆分。

是什么让您认为特定数据的利用率应该更高?@user8371915不确定是否正确理解您的问题,但相同的作业,使用相同的数据,运行locally作为常规Scala并行集合(无火花)占用100%的CPU资源,运行速度提高20倍。您好,谢谢您的回答。数据是简单的.csv文件,每行一项,行与行之间没有连接。可能唯一有趣的是,.csv文件是直接通过Amazon s3读取的,不是从磁盘读取的,但我怀疑它是否有效果。我刚刚编辑了这个问题,并提到了获得了数据。