一点背景:
我的程序用来支持普通的文件系统,并使用ExcelDataContext读取Excel文件(并对数据进行一些操作)。一切都很好。
现在:
我的程序必须进行修改以支持Hadoop Oozie并与之一起工作。使用 Metamodel-hadoop 4.3.5版本,我设法使用 HdfsResource 从hadoop读取了excel文件。 ExcelDataContext能够支持资源,可以像以前一样完成相同的工作。
问题:
但是,即使我的程序完成运行,我的oozie作业工作流程也无法结束/压缩。经过几个小时的调试,我发现这是使用HdfsResource初始化ExcelDataContext的问题。
这是我定义 HdfsResource 的方法。
如果我注释掉hdfsResource行并使用本地文件系统,则该程序可以毫无问题地完成/结束该过程。
我怀疑资源没有正确关闭/结束,但即使将其设置为NULL,也无法关闭/结束。反正有解决办法吗?没有关闭功能。
最佳答案
经过两天的调查研究,我发现我走错了方向。不是资源无法正确关闭的问题,而是相反的问题。 “HdfsResource”已正确关闭HDFS,这会导致Oozie工作流由于关闭连接而无法获取HDFS。
解决方案:
我已经在MetaModel-Hadoop中克隆了HDFSResource的相同副本,该副本使用 FileHelper.SafeClose(fs)修改了所有功能以将其注释掉。我不确定这是否是正确的方法,但我的目的是让HDFS连接始终可用,直到Oozie在完成工作后结束连接本身为止。