我想只从HDFS目录中获取包含某些名称的文件(我已经放了几个响应文件,其名称如下2017-090-0.1, 2017-090-0.2,2017-090-0.3等现在我想确保将一定数量的flowFile放入hdfs(我的意思是,如果我发送3请求相关名称,我必须检查,如果我放了三个在HDFS中的响应)对于这种情况,我使用下面的代码,但是它有一些我感兴趣的子对象:
我应该改变什么来使这个代码工作?
import org.apache.commons.io.IOUtils
import java.nio.charset.StandardCharsets
def flowFile= session.get(1);// i gues it will return list of
flowfiles
def name="";
def count=0;
def value=0;
def amount=0;
List<FlowFile> flowFiles = new ArrayList<FlowFile>();
for(def n in flowFile){
name=n.getAttribute("realName")
count=n.getAttribute("count")
value=count as Number
value=Math.round(value)
}
session.remove(flowFile)
def findFileRecursive( String directoryName, String filePattern) {
def fileFound
def directory = new File(directoryName)
if (directory.isDirectory()){
def findFilenameClosure = { if (filePattern.matcher(it.name).find()){ fileFound = it } }
directory.eachFileRecurse(findFilenameClosure)
}
amount++;
flowFiles.add(fileFound);
return fileFound
}
String filePattern=filePattern.contains(name)
String directoryName="/group/test/userDate";
findFileRecursive(directoryName,filePattern);
if(amount==count){
for(def m in flowFiles){
session.transfer(m,REL_SUCCESS);
}
}
答案 0 :(得分:4)
您可以使用GetHDFS
处理器,该处理器将使用可验证的工作代码从HDFS存储中检索这些文件,并将生成的流文件路由到success
或failure
关系。您无需编写任何自定义代码即可执行此任务。如有必要,PutHDFS
将执行写回HDFS的操作。