HDFSに保存されたテキストファイルを読み込むときに、sc.textFileでこれらのファイルを読み込んでいるときにBlockMissingException(またはその他の例外)が発生した場合、エラーをキャッチしてemptyRDDを続行するにはどうすればよいですか?Spark sc.textFileを使用してファイルを読み取っているときに、どのようにBlockMissingExceptionを捕まえることができますか?
私がBlockMissingExceptionに遭遇する理由は、たとえば、ファイルが1の複製係数でHDFSに保存され、データノードがダウンした場合です。
は、次の最小のコード例を検討:
val myRDD: RDD[String] =
try {
sc.textFile("hdfs:///path/to/fileWithMissingBlock")
} catch {
case e: BlockMissingException =>
println("missing block, continuing with empty RDD")
sc.emptyRDD[String]
case e: Throwable =>
println("unknown exception, continuting with empty RDD")
sc.emptyRDD[String]
}
val nLines = myRDD.count
println("There are " + nLines + " lines")
このプログラムは、ファイルが存在しないブロックを有する場合には、代わりに0のカウントを生成する失敗します。ここでは、「メイン」org.apache.spark.SparkExceptionは、私がスレッドで
例外を受け取る例外です:原因ステージ障害のために中止されまし仕事 :タスク0 0.0は、1回失敗した段階で、最も 最近の失敗:失われたタスク段階0.0 0.0(TID 0、ローカルホスト): org.apache.hadoop.hdfs.BlockMissingException:ブロックを取得できませんでした: ...
私はその火花が例外処理ので、順不同で物事を実行することが理解RDD.map(例えばApache spark scala Exception handling)の中にある方が良いかもしれませんが、RDDがまだ作成されていない場合はどうなりますか?