2

私は自分のプログラムで長時間の反復を行っており、数回の反復ごとにキャッシュしてチェックポイントを設定したいので (この手法は、Web で長い系統をカットするために推奨されています)、これを行うことで StackOverflowError が発生しません。

for (i <- 2 to 100) {
      //cache and checkpoint ever 30 iterations
      if (i % 30 == 0) {
        graph.cache
        graph.checkpoint
        //I use numEdges in order to start the transformation I need
        graph.numEdges
      }
      //graphs are stored to a list
      //here I use the graph of previous iteration to this iteration
      //and perform a transformation
}

そして、このようにチェックポイントディレクトリを設定しました

val sc = new SparkContext(conf)
sc.setCheckpointDir("checkpoints/")

ただし、最終的にプログラムを実行すると、例外が発生します

Exception in thread "main" org.apache.spark.SparkException: Invalid checkpoint directory

私は 3 台のコンピューターを使用しており、各コンピューターには Ubuntu 14.04 がインストールされており、各コンピューターで Hadoop 2.4 以降を備えたビルド済みバージョンの spark 1.4.1 も使用しています。

4

2 に答える 2

4

ノードのクラスタで HDFS をすでに設定している場合は、ディレクトリにある「core-site.xml」で hdfs アドレスを見つけることができますHADOOP_HOME/etc/hadoop。私の場合、core-site.xml は次のように設定されています。

<configuration>
      <property>
           <name>fs.default.name</name>
           <value>hdfs://master:9000</value>
      </property>
</configuration>

次に、hdfs にディレクトリを作成して Rdd チェックポイント ファイルを保存します。このディレクトリに RddChekPoint という名前を付けましょう。hadoop hdfs シェルを使用します。

$ hadoop fs -mkdir /RddCheckPoint

pyspark を使用する場合は、SparkContext を で初期化した後sc = SparkContext(conf)、次のようにチェックポイント ディレクトリを設定できます。

sc.setCheckpointDir("hdfs://master:9000/RddCheckPoint")

Rdd がチェックポイントされると、hdfs ディレクトリ RddCheckPoint にチェックポイント ファイルが保存されていることがわかります。

$ hadoop fs -ls /RddCheckPoint
于 2016-10-24T15:41:01.440 に答える
2

チェックポイント ディレクトリは HDFS 互換ディレクトリである必要があります (scala doc の「チェックポイント データが確実に保存される HDFS 互換ディレクトリ。これは HDFS のようなフォールト トレラントなファイル システムである必要があることに注意してください」)。そのため、これらのノードに HDFS をセットアップしている場合は、「hdfs://[yourcheckpointdirectory]」をポイントします。

于 2015-09-05T09:07:19.950 に答える