EMR集群Spark Driver内存配置不生效问题排查求助
Jupyter Kernel配置覆盖全局设置
Jupyter的PySpark内核可能自带启动参数,覆盖了spark_defaults.conf的配置。检查/usr/share/jupyter/kernels/pyspark/kernel.json文件,看是否在env或argv中指定了SPARK_DRIVER_MEMORY或spark.driver.memory参数。另外,如果Notebook代码里显式设置了spark.driver.memory(比如SparkSession.builder.config("spark.driver.memory", "3g")),代码优先级会高于配置文件。Master节点内存资源不足
若EMR Master节点的实例总内存小于6GB(比如t3.medium实例仅4GB内存),Spark会自动调整Driver内存到节点可用内存的约85%左右(即3.4GB,和你看到的数值匹配)——因为JVM本身要占用部分内存,Spark不会分配超过节点实际可用的内存。可以在Master节点执行free -h查看总内存,确认是否实例规格不足以支撑6GB的Driver配置。Spark配置加载优先级冲突
Spark配置加载优先级为:代码显式设置 > 命令行参数 > 环境变量 >spark-defaults.conf> 默认配置。如果Jupyter启动Spark时,通过环境变量(比如SPARK_DRIVER_MEMORY)或命令行参数传递了Driver内存值,会覆盖配置文件的设置。可以在Notebook中执行spark.sparkContext.getConf().get("spark.driver.memory")查看实际生效的配置,同时在Master节点执行echo $SPARK_DRIVER_MEMORY检查环境变量。EMR集群级配置覆盖本地文件
EMR集群创建时,若通过控制台或CLI设置了集群级的Spark配置(比如应用程序配置中的spark.driver.memory),这个配置优先级高于节点本地的spark_defaults.conf。可以在EMR控制台查看集群的“配置”详情,确认是否存在集群层面的Driver内存设置。Jupyter服务未重启
修改spark_defaults.conf或config.json后,若未重启Jupyter服务,新配置不会生效。执行sudo systemctl restart jupyter-server重启服务后再验证内存分配情况。
内容的提问来源于stack exchange,提问作者Arockia Nirmal

