我已经检查了与此错误相关的其他帖子,但发现没有任何作用。
我要做什么:
df = spark.sql("""
SELECT DISTINCT
action.AccountId
...
,to_date(date) as Date
FROM sc_raw_report LEFT JOIN adwords_accounts ON action.AccountId=sc_raw_report.customer_id
WHERE date >= to_date(concat_ws('-',2018,1,1))
GROUP BY action.AccountId
,Account_Name
...
,to_date(date)
,substring(timestamp,12,2)
""")
df.show(5, False)
,然后是saveAsTable。。尽管如此,它仍返回错误:
py4j.protocol.Py4JJavaError:调用o119.showString时发生错误。 :org.apache.spark.SparkException:在awaitResult中抛出异常: [...] 原因:org.apache.spark.SparkException:无法广播大于8GB的表:13 GB
我尝试过:
'spark.sql.autoBroadcastJoinThreshold': '-1'
但是它什么也没做。
adwords_account表非常小,并且在sc_raw_report上打印df.count()返回:2022197
emr-5.28.0 spark 2.4.4 我的集群核心:15个r4.4xlarge(16个vCore,122个GiB内存,仅EBS存储) 主要:r5a.4xlarge(16个vCore,128个GiB内存,仅EBS存储)
使用配置来提交火花-部署模式集群:
-conf spark.hadoop.fs.s3a.impl = org.apache.hadoop.fs.s3a.S3AFileSystem --conf fs.s3a.attempts.maximum = 30 --conf spark.sql.crossJoin.enabled = true --executor-cores 5 --num-executors 5 --conf spark.dynamicAllocation.enabled = false --conf spark.executor.memoryOverhead = 3g --driver-memory 22g --executor-memory 22g --conf spark。 executor.instances = 49 --conf spark.default.parallelism = 490 --conf spark.driver.maxResultSize = 0 --conf spark.sql.broadcastTimeout = 3600
有人知道我可以在这里做什么吗?
编辑:其他信息: 升级到16个实例或r4.8xlarge(32CPU,244RAM)也没有任何作用。
配置:
spark.serializer.objectStreamReset 100
spark.sql.autoBroadcastJoinThreshold -1
spark.executor.memoryOverhead 3g
spark.driver.maxResultSize 0
spark.shuffle.service.enabled true
spark.rdd.compress True
spark.stage.attempt.ignoreOnDecommissionFetchFailure true
spark.sql.crossJoin.enabled true
hive.metastore.client.factory.class com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory
spark.scheduler.mode FIFO
spark.driver.memory 22g
spark.executor.instances 5
spark.default.parallelism 490
spark.resourceManager.cleanupExpiredHost true
spark.executor.id driver
spark.driver.extraJavaOptions -Dcom.amazonaws.services.s3.enableV4=true
spark.hadoop.fs.s3.getObject.initialSocketTimeoutMilliseconds 2000
spark.submit.deployMode cluster
spark.sql.broadcastTimeout 3600
spark.master yarn
spark.sql.parquet.output.committer.class com.amazon.emr.committer.EmrOptimizedSparkSqlParquetOutputCommitter
spark.ui.filters org.apache.hadoop.yarn.server.webproxy.amfilter.AmIpFilter
spark.blacklist.decommissioning.timeout 1h
spark.sql.hive.metastore.sharedPrefixes com.amazonaws.services.dynamodbv2
spark.executor.memory 22g
spark.dynamicAllocation.enabled false
spark.sql.catalogImplementation hive
spark.executor.cores 5
spark.decommissioning.timeout.threshold 20
spark.hadoop.mapreduce.fileoutputcommitter.cleanup-failures.ignored.emr_internal_use_only.EmrFileSystem true
spark.hadoop.yarn.timeline-service.enabled false
spark.yarn.executor.memoryOverheadFactor 0.1875
答案 0 :(得分:0)
在ShuffleMapStage
之后,需要将随机播放块的一部分放在broadcasted
的{{1}}处。
请确保driver
(在您的情况下为Driver
中的AM)具有足够的内存/开销。
您可以发布YARN
运行时配置吗?