gpt4 book ai didi

scala - 使用 Spark sc.textFile 读取文件时如何捕获 BlockMissingException?

转载 作者:可可西里 更新时间:2023-11-01 15:26:08 31 4
gpt4 key购买 nike

当读取存储在 HDFS 上的文本文件时,如果我在使用 sc.textFile 读取这些文件时遇到 BlockMissingException(或其他一些异常),我该如何捕获错误并继续执行 emptyRDD?

我可能遇到 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")

如果文件缺少 block ,此程序将失败而不是生成所需的计数 0。这是我收到的异常

Exception in thread "main" org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 0.0 failed 1 times, most recent failure: Lost task 0.0 in stage 0.0 (TID 0, localhost): org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block: ...

我知道 spark 可能会乱序运行,因此异常处理最好放在 RDD.map 中(例如 Apache spark scala Exception handling ),但如果 R​​DD 尚未创建怎么办?

最佳答案

因为当您调用 sc.textFile("hdfs:///path/to/fileWithMissingBlock") 时,spark 不会执行任何操作(延迟评估),即:从您的文件系统读取文件。

它实际上是在调用action 时执行的,这里是count 方法。那一刻异常进来了。

关于scala - 使用 Spark sc.textFile 读取文件时如何捕获 BlockMissingException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47211219/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com