我試圖在Apache NiFi中開發一個自定義處理器,它將直接將orc文件寫入遠程hadoop集羣。爲了編寫它們,我使用了orc core api。我試圖在本地FS上編寫文件,它們都可以:配置單元,這是他們的「最終目的地」在讀取它們時沒有問題。NiFi - 自定義orc處理器爲類org.apache.hadoop.hdfs.DistributedFileSystem提供NoClassDefFoundError
的問題是,試圖創建一個Writer對象,我得到一個的NoClassDefFoundError該類org.apache.hadoop.hdfs.DistributedFileSystem。
這是使用的代碼:
Configuration conf = new Configuration();
conf.addResource(new Path(hadoopConfigurationPath+"/core-site.xml"));
conf.addResource(new Path(hadoopConfigurationPath+"/hdfs-site.xml"));
conf.set("fs.hdfs.impl", org.apache.hadoop.hdfs.DistributedFileSystem.class.getName());
String hdfsUri = conf.get("fs.default.name");
...
try{
writer = OrcFile.createWriter(new Path(hdfsUri+"/"+filename+".orc"), OrcFile.writerOptions(conf).setSchema(orcSchema));
}
catch(IOException e){
log.error("Cannot open hdfs file. Reason: "+e.getMessage());
session.transfer(flowfile, hdfsFailure);
return;
}
...
我已經複製了Hadoop的HDFS lib目錄罐子,我嘗試使用的ClassLoader在classpath中加載的罐子尋找運行時,它可以是看到。將它們包含在Maven依賴項中也不能解決問題。
任何有關如何擺脫這個錯誤的建議真的很感激。謝謝你們!
嘗試使用Maven /搖籃,而不是JAR文件 –
將有必要看得多了,你必須構建定製處理器的配置/設置的。你能分享一個指向github中的項目的指針嗎? –
@ cricket_007我已經在使用maven(我承認它並不像寫的那樣清晰),並且我嘗試添加依賴沒有成功。 – riccamini