2017-11-28 4 views
2

に失敗したクラスタ (27コア/ 240Gラムの合計)シンプルスパーク仕事は、私は、スタンドアロンのスパーク(2.1.1)を作成したため、GCオーバーヘッドの制限

コード私はX これに1からすべての数字を合計サンプルスパークの仕事を持っている:

package com.example 

import org.apache.spark.sql.SparkSession 

object ExampleMain { 

    def main(args: Array[String]): Unit = { 
     val spark = SparkSession.builder 
      .master("spark://192.168.1.2:7077") 
      .config("spark.driver.maxResultSize" ,"3g") 
      .appName("ExampleApp") 
      .getOrCreate() 
     val sc = spark.SparkContext 
     val rdd = sc.parallelize(Lisst.range(1, 1000)) 
     val sum = rdd.reduce((a,b) => a+b) 
     println(sum) 
     done 
    } 

    def done = { 
     println("\n\n") 
     println("-------- DONE --------") 
    } 
} 

私は はそう私はcranckedてきた数秒後に結果を得る上記のコードを実行しています1から1B(1,000,000,000)までのすべての数値を合計するコードと、GCオーバーヘッドの上限に達した回数が

に達しました

私は、十分なメモリがない場合、私は自分のクラスタ構成で再生しようとしたが、それは助けにならなかった、HDDにメモリをこぼすべきだと読んだ。

Driver memory = 6G 
Number of workers = 24 
Cores per worker = 1 
Memory per worker = 10 

私は開発者ではなく、Scalaについて知識がありませんが、GCの問題なしでこのコードを実行するソリューションを探したいと考えています。私はまた私のスパーク/ confに私の火花-submitコマンド

/opt/spark-2.1.1/bin/spark-submit \ 
--class "com.example.ExampleMain" \ 
--master spark://192.168.1.2:6066 \ 
--deploy-mode cluster \ 
/mnt/spark-share/example_2.11-1.0.jar 

を追加している@philantrovert要求パー

は次のとおりです。

  • 奴隷ファイル私のノードの3つのIPアドレスを含みます(マスター含む)
  • 火花デフォルトは含む:
    • spark.masterスパーク://192.168.1.2:7 077
    • spark.driver.memory 10グラム含むspark-env.sh
  • :すべてのノード
  • SPARK_EXECUTOR_MEMORY = 10G
  • SPARK_DRIVER_MEMORY = 10G
  • うち
    • SPARK_LOCAL_DIRS =共有フォルダSPARK_WORKER_CORES = 1
    • SPARK_WORKER_MEMORY = 10G
    • SPARK_WORKER_INSTANCESすべてのノード間= 8
    • SPARK_WORKER_DIR =共有フォルダ
    • SPARK_WORKER_OPTS = " - Dspark.worker.cleanup.enabled =真"

おかげ

+0

'spark-submit'コマンドを質問に追加できますか? – philantrovert

+0

@philantrovertがspark-submit + my sparkの設定を追加しました –

+0

プログラムの代わりに '--conf" spark.driver.maxResultSize = 3G "'をspark-submitに追加しようとしました。私はSpark Standaloneクラスタでは働いていませんが、プログラムで 'conf.set(..)'を実行する前にドライバが起動すると思います。私は間違っているかもしれません。 – philantrovert

答えて

3

私は問題があるとしドライバに10億エントリのListを作成すると、これは巨大なデータ構造(4GB)です。プログラムによってデータセット/ RDDを作成するより効率的な方法があります。

val rdd = spark.range(1000000000L).rdd 
関連する問題