【发布时间】:2020-07-24 10:55:55
【问题描述】:
我正在尝试使用 spark 处理 10GB 的数据,这给了我这个错误,
java.lang.OutOfMemoryError:超出 GC 开销限制
笔记本电脑配置为:4CPU、8 个逻辑核心、8GB RAM
在提交 Spark 作业时进行 Spark 配置。
spark = SparkSession.builder.master('local[6]').config("spark.ui.port", "4041").appName('test').getOrCreate()
spark.conf.set("spark.executor.instances", 1)
spark.conf.set("spark.executor.cores", 5)
在网上搜索了有关此错误的信息后,我有几个问题
如果得到回答,那将是一个很大的帮助。
1) Spark是内存计算引擎,处理10gb的数据,系统需要10+gb的RAM。 Spark 将 10gb 数据加载到 10+ gb RAM 内存中,然后执行此工作?
2) 如果第 1 点是正确的,那么大公司是如何处理 100 TB 的数据,他们是通过集群多个系统来处理 100 TB 的数据,形成 100+TB 的 RAM,然后处理 100 TB 的数据?
3) 他们没有其他方法可以通过设置适当的 spark 配置来处理具有 8gb RAM 和 8Cores 的 50gb 数据吗?如果是什么方式,火花配置应该是什么。
4) 如果系统属性是 8gb RAM 和 8 核,那么理想的 spark 配置应该是什么?用于处理 8gb 数据
spark 配置在 spark config 中定义。
spark = SparkSession.builder.master('local[?]').config("spark.ui.port", "4041").appName('test').getOrCreate()
spark.conf.set("spark.executor.instances", ?)
spark.conf.set("spark.executor.cores", ?)
spark.executors.cores = ?
spark.executors.memory = ?
spark.yarn.executor.memoryOverhead =?
spark.driver.memory =?
spark.driver.cores =?
spark.executor.instances =?
核心实例数 =?
spark.default.parallelism =?
【问题讨论】:
-
问题可能出在您的代码上,而不是您的配置或集群资源上。通常情况下,您会因为不必要地将数据收集到单个节点或驱动程序上而收到此 OOM 错误。请发布您的代码并指出导致错误的操作/操作。
-
这取决于您的代码做什么以及您的数据如何拆分(是一个大小为 10Gb 的文件?还是拆分成小文件?)。
标签: apache-spark pyspark