Exception 清除失败的映射
我的映射程序会将一些数据写入本地磁盘,并在映射程序完成后将其清除。但是,如果发生错误(发生异常),则不会调用cleanup()方法。 我可以在映射器中捕获异常,但无法处理映射器中未调用的异常(例如:作业跟踪器故障切换到备用节点)Exception 清除失败的映射,exception,hadoop,mapreduce,Exception,Hadoop,Mapreduce,我的映射程序会将一些数据写入本地磁盘,并在映射程序完成后将其清除。但是,如果发生错误(发生异常),则不会调用cleanup()方法。 我可以在映射器中捕获异常,但无法处理映射器中未调用的异常(例如:作业跟踪器故障切换到备用节点) 当映射程序get失败时,有什么方法可以清除吗?您可以重写映射程序的run方法,在上下文中输入键的迭代中包含try/catch,并确保调用了cleanup: @Override public void run() { setup(context); try {
当映射程序get失败时,有什么方法可以清除吗?您可以重写映射程序的run方法,在上下文中输入键的迭代中包含try/catch,并确保调用了cleanup:
@Override
public void run() {
setup(context);
try {
while (context.nextKeyValue()) {
map(context.getCurrentKey(), context.getCurrentValue(), context);
}
} finally {
cleanup(context);
}
}
您需要确保清理方法中没有任何逻辑来尝试和输出记录,或者在映射器中设置一个标志来指示发生了错误
这可能无法防止所有类型的任务失败(例如JVM崩溃),我认为除了在原始作业之后运行作业外,您没有其他方法,其作用是确保正确清理使用的资源。如果作业完成,使用作业类,您肯定可以删除一些文件夹,即使目录在本地文件系统中,也要使用filesystem类
我不确定,您所知道的是临时文件的位置:它是在mapred.local.dir中指定的,因此删除这些文件应该是您的计划B。通常工作完成后会为您进行清理,但如果遇到问题,您可能必须手动执行。如果守护进程仍处于活动状态,您可以尝试格式化namenode。我的映射器将数据写入本地磁盘(实际上是RAMDisk),而不是HDFS。映射程序应该删除自己编写的文件。