2017-01-05 3 views
0

にタスクのシリーズを実行するための時間がかかる。これは、私のサンプルコードです存続理由:とのデータがScalaの

val file = sc.textFile(fileapath).persist(StorageLevel.MEMORY_AND_DISK_2) 

私は、このようなHDFSからファイルを読み込むなど一連のタスクを実行し、そのレコードをカウントし、もう一度やっていますbinningやjoinやgroupbyのようないくつかのプリプロセッサで、結果の数を見つけてファイルをhdfsに保存します。

私は、プリプロセッサー結合でこれを実行しているときに、データの持続性のために時々立ち往生することに気付きました。

このpersistを削除すると、そのpersistが実行されます。今私はデータの永続性についていくつかの疑問を持っています。なぜ、いくつかのタスクに対してのみ効果が持続するのです。

重要なデータの多くは、あなたの質問に欠けている私の疑問を把握するために

答えて

4

を助けてください:

  • 入力データのサイズは何ですか?
  • エグゼキュータのRAMサイズはどれくらいですか?
  • なぜStorageLevel.MEMORY_AND_DISKを選択しましたか?なぜMEMORY_AND_DISK _2
  • 変換/アクションを実行するために使用している実際のコードは何ですか?あなたが提供されたデータから、

「_2」を取り除く手助けする可能性があります:など

MEMORY_ONLY_2、MEMORY_AND_DISK_2を、しかし、2つのクラスタノード上の各パーティションを複製します。 - データを複製する必要がありますか?

val file = sc.textFile(fileapath).persist(StorageLevel.MEMORY_AND_DISK) 

使用してMEMORY_ONLYが役立つ可能性がある:

val file = sc.textFile(fileapath).persist(StorageLevel.MEMORY_ONLY) 

MEMORY_ONLY_SERを使用して良くなることは可能である:

val file = sc.textFile(fileapath).persist(StorageLevel.MEMORY_ONLY) 

MEMORY_ONLY_SER - ストアRDDとして直列化されたJavaオブジェクト(パーティションごとに1バイトの配列)。これは、読むために、高速シリアライザを使用して、より多くのCPU集約型の場合は特に、一般的に、よりスペース効率直列化復元オブジェクトを超えています。

詳細はこちら:http://spark.apache.org/docs/latest/programming-guide.html#rdd-persistence