【问题标题】:Customize SparkContext using sparkConf.set(..) when using spark-shell使用 spark-shell 时使用 sparkConf.set(..) 自定义 SparkContext
【发布时间】:2015-10-02 13:33:56
【问题描述】:

在 Spark 中,有 3 种主要方法可以指定用于创建 SparkContextSparkConf 的选项:

  1. 作为 conf/spark-defaults.conf 中的属性
    • 例如,线路:spark.driver.memory 4g
  2. 作为 spark-shell 或 spark-submit 的参数
    • 例如,spark-shell --driver-memory 4g ...
  3. 在您的源代码中,在使用SparkConf 实例创建SparkContext 之前配置它:
    • 例如,sparkConf.set( "spark.driver.memory", "4g" )

但是,当使用 spark-shell 时,在您收到 shell 提示时,已经在名为 sc 的变量中为您创建了 SparkContext。使用 spark-shell 时,如果在您有机会执行任何 Scala 语句之前已经创建了 SparkContext,您如何使用上面列表中的选项 #3 来设置配置选项?

特别是,我正在尝试使用 Kyro 序列化和 GraphX。将 Kryo 与 GraphX 一起使用的规定方法是在自定义 SparkConf 实例时执行以下 Scala 语句:

GraphXUtils.registerKryoClasses( sparkConf )

在运行spark-shell 时如何实现这一点?

【问题讨论】:

    标签: scala apache-spark serialization kryo


    【解决方案1】:

    Spark 2.0+

    您应该可以使用SparkSession.conf.set 方法在运行时设置一些 配置选项,但它主要限于SQL 配置。

    火花

    您可以简单地停止现有上下文并创建一个新上下文:

    import org.apache.spark.{SparkContext, SparkConf}
    
    sc.stop()
    val conf = new SparkConf().set("spark.executor.memory", "4g")
    val sc = new SparkContext(conf)
    

    正如您在official documentation 中看到的那样:

    一旦将 SparkConf 对象传递给 Spark,它就会被克隆,并且用户不能再对其进行修改。 Spark 不支持在运行时修改配置。

    如您所见,停止上下文是 shell 启动后唯一适用的选项。

    您始终可以使用配置文件或spark-shell--conf 参数来设置将用作默认上下文的所需参数。如果是 Kryo,您应该看看:

    • spark.kryo.classesToRegister
    • spark.kryo.registrator

    Spark Configuration 中查看Compression and Serialization

    【讨论】:

    • 如何在 Azure Databricks notebook 中添加执行程序内存和驱动程序内存?
    猜你喜欢
    • 2016-04-08
    • 2018-09-18
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    相关资源
    最近更新 更多