web-dev-qa-db-ja.com

spark-shellを使用する場合、sparkConf.set(..)を使用してSparkContextをカスタマイズします

Sparkでは、SparkConfの作成に使用されるSparkContextのオプションを指定する3つの主要な方法があります。

  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を使用しようとしています。 GraphXでKryoを使用するための規定の方法は、SparkConfインスタンスをカスタマイズするときに、次のScalaステートメントを実行することです。

_GraphXUtils.registerKryoClasses( sparkConf )
_

_spark-Shell_を実行しているときにこれを達成するにはどうすればよいですか?

16
rake

Spark 2.0 +

SparkSession.conf.setメソッドを使用して、実行時にsome構成オプションを設定できるはずですが、これは主にSQL構成に限定されています。

スパーク<2.0

既存のコンテキストを停止して、新しいコンテキストを作成できます。

import org.Apache.spark.{SparkContext, SparkConf}

sc.stop()
val conf = new SparkConf().set("spark.executor.memory", "4g")
val sc = new SparkContext(conf)

公式ドキュメント で読むことができます:

sparkConfオブジェクトがSparkに渡されると、そのオブジェクトは複製され、ユーザーは変更できなくなります。 Sparkは実行時の構成の変更をサポートしません。

したがって、コンテキストの停止を確認できるように、シェルが開始された後はコンテキストのみが適用可能なオプションです。

常に設定ファイルまたは--confspark-Shell引数を使用して、デフォルトのコンテキストとして使用される必須パラメーターを設定できます。 Kryoの場合、以下を見てください:

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

Spark ConfigurationCompression and Serialization を参照してください。

40
zero323