hdfs - putHDFS 后重命名文件
问题描述
我有 apache NIFI 作业,我使用从系统获取文件getFile
然后我使用putHDFS
,将文件放入 hadoop 后如何重命名 HDFS 中的文件?我尝试使用executeScript
处理器但无法使其工作
flowFile = session.get()
if flowFile != None:
tempFileName= flowFile.getAttribute("filename")
fileName=tempFileName.replace('._COPYING_','')
flowFile = session.putAttribute(flowFile, 'filename', fileName)
session.transfer(flowFile, REL_SUCCESS)
解决方案
Shu上面的答案对于如何在NiFi中操作文件名属性是正确的,但是如果您已经将文件写入HDFS然后使用UpdateAttribute,则不会更改HDFS中的文件名,只会更改NiFi中文件名属性的值。
您可以使用 UpdateAttribute 方法创建一个名为“final.filename”的新属性,然后使用 MoveHDFS 将原始文件移动到最终文件。
另外值得注意的是,PutHDFS 处理器已经写入了一个临时文件并将其移动到最终文件中,所以我不确定您是否有必要将其命名为“ .COPYING ”。例如,如果您向 PutHDFS 发送文件名为“foo”的流文件,它将首先将“.foo”写入目录,完成后会将其移动到“foo”。
您需要使用 MoveHDFS 的唯一情况是,如果其他进程正在监视目录并且不能忽略点文件,那么您将其写入其他地方并在完成后使用 MoveHDFS。
推荐阅读
- java - Java 7 - 比较方法违反了它的一般合同
- ruby-on-rails - Rails 5:为什么我的自定义错误消息不起作用?
- reactjs - 打字稿地图对象返回类型
- javascript - 代码问题,在 Chrome 扩展中使用内容脚本来修改 DOM 网页
- c# - 如何重建linq表达式树
- html - CSS - 具有相同高度但图像高度不同的 div
- wordpress - 自定义分类循环不返回任何东西
- android - Android 中的存储库模式。有没有比这更好的方法?
- react-native - 如何在 React Native 中实现 cron 作业?
- android - 如何找出错误报告文件的问题