首页 > 解决方案 > 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)

标签: hdfsapache-nifi

解决方案


Shu上面的答案对于如何在NiFi中操作文件名属性是正确的,但是如果您已经将文件写入HDFS然后使用UpdateAttribute,则不会更改HDFS中的文件名,只会更改NiFi中文件名属性的值。

您可以使用 UpdateAttribute 方法创建一个名为“final.filename”的新属性,然后使用 MoveHDFS 将原始文件移动到最终文件。

另外值得注意的是,PutHDFS 处理器已经写入了一个临时文件并将其移动到最终文件中,所以我不确定您是否有必要将其命名为“ .COPYING ”。例如,如果您向 PutHDFS 发送文件名为“foo”的流文件,它将首先将“.foo”写入目录,完成后会将其移动到“foo”。

您需要使用 MoveHDFS 的唯一情况是,如果其他进程正在监视目录并且不能忽略点文件,那么您将其写入其他地方并在完成后使用 MoveHDFS。


推荐阅读