一点背景:
我的程序用来支持普通的文件系统,用exceldatacontext读取excel文件(并对数据做一些操作)。一切都很好。
现在:
我的程序必须修改,以支持和工作与hadoopoozie。使用元模型hadoop4.3.5版本,我设法使用hdfsresource从hadoop读取excel文件。exceldatacontext能够支持资源,可以像以前一样做同样的工作。
问题是:
然而,我的oozie工作流程在我的程序运行完成之后仍然无法结束/完成。经过几个小时的调试,我发现这是使用hdfsresource初始化exceldatacontext的问题。
下面是我如何定义hdfsresource的。
...
resource hdfsresource=新的hdfsresource(hdfsexcelfilepath);
exceldatacontext dc=新的exceldatacontext(hdfsresource,excelconfiguration);
....
如果我注解掉hdfsresource行并使用本地文件系统,程序就可以毫无问题地完成/结束进程。
我怀疑资源没有正确关闭/结束,但即使将其设置为null,也无法关闭/结束它。有什么办法解决这个问题吗?没有关闭功能。
hdfsresource=null;
1条答案
按热度按时间qv7cva1a1#
经过两天的调查研究,我发现我走错了方向。问题不在于哪个资源不能正确关闭,而是以相反的方式关闭。“hdfsresource”正确关闭了hdfs,这导致oozie工作流由于连接关闭而无法获取hdfs。
解决方案:我在元模型hadoop中克隆了hdfsresource的同一个副本,它用filehelper.safeclose(fs)修改了所有函数来注解它。我不确定这样做是否正确,但我的意图是允许hdfs连接始终可用,直到oozie在完成其工作时结束连接本身。