在 Spark-on-Yarn 中配置 Executor 和 Driver 内存

Posted

技术标签:

【中文标题】在 Spark-on-Yarn 中配置 Executor 和 Driver 内存【英文标题】:Configuring Executor and Driver memory in Spark-on-Yarn 【发布时间】:2017-07-12 13:41:30 【问题描述】:

我对在 Spark-1.5.2 中配置执行程序和驱动程序内存感到困惑。

我的环境设置如下:

3 Node MAPR Cluster - Each Node: Memory 256G, 16 CPU 
Hadoop 2.7.0 
Spark 1.5.2 - Spark-on-Yarn

输入数据信息:

来自 Hive 的 460 GB Parquet 格式表 我正在使用 spark-sql 通过 spark-on-yarn 查询 hive 上下文,但它比 Hive 慢得多,并且不确定 Spark 的正确内存配置,

这些是我的配置,

    export SPARK_DAEMON_MEMORY=1g
    export SPARK_WORKER_MEMORY=88g

    spark.executor.memory              2g
    spark.logConf                      true
    spark.eventLog.dir                 maprfs:///apps/spark
    spark.eventLog.enabled             true
    spark.serializer                   org.apache.spark.serializer.KryoSerializer
    spark.driver.memory                5g
    spark.kryoserializer.buffer.max    1024m

如何避免 Spark java.lang.OutOfMemoryError: Java heap space exceptions and GC 开销限制超出异常!! ???

非常感谢您在这方面的帮助!

【问题讨论】:

您是否尝试过 spark.executor.instances,这将是集群中您的 spark 工作人员的数量? 谢谢杜米特鲁。我现在已经添加了。 【参考方案1】:

乍一看,您正在耗尽执行者的内存。我建议增加他们的记忆力。

请注意,SPARK_WORKER_MEMORY 仅在独立模式下使用。 SPARK_EXECUTOR_MEMORY 用于 YARN 模式。

如果您没有在集群上运行其他任何东西,您可以尝试以下配置:

spark.executor.memory   16g
spark.executor.cores    1
spark.executor.instances 40
spark.driver.memory  5g (make it bigger if expected 
                         final result dataset is larger)

我不建议设置大的执行器内存,因为这通常会增加 GC 时间。我看到的另一件事是,这些实例是内存优化的。如果这适合您的情况,请三思。

【讨论】:

嗨 Luis...感谢您提供详细信息。我已经尝试使用大型执行程序内存和 40 多个执行程序实例,结果是 spark-sql 中超出了 GC 开销,但我可以使用 Spark Interpreter 在 Zeppelin 中运行相同的查询,大约需要 41 分钟才能完成,Hive 在 15 内完成分钟与相同的 480GB 输入。有没有其他参数配置更好的性能?? 您是否能够成功运行查询? 我可以在 Zeppelin 中成功运行查询,但不能使用 spark-sql cli。在 spark-sql cli 中出现 GC 开销异常。 嗨 Luis...spark web-ui 中的环境变量显示 master.spark =local[*] !!!这应该是“纱线簇”吧?如果错了怎么改spark.master!!

以上是关于在 Spark-on-Yarn 中配置 Executor 和 Driver 内存的主要内容,如果未能解决你的问题,请参考以下文章

Spark单机伪分布式环境搭建完全分布式环境搭建Spark-on-yarn模式搭建

spark-on-yarn 学习

电子构建失败并出现 ERR_ELECTRON_BUILDER_CANNOT_EXECUTE

Spark on yarn

MySQL数据库使用报错ERROR 1820 (HY000): You must reset your password using ALTER USER statement before execu

java.sql.SQLException: Can not issue data manipulation statements with execu 这是错误提示