2017-05-28 87 views
0

我的Java代碼中有一些hadoop文件系統操作(例如:hdfs mkdir)。當我嘗試使用java -cp運行java程序時,該目錄在linux本地文件系統中創建。所以我用hadoop jar命令運行程序,並在hdfs中創建目錄。現在我打算使用hadoop jar命令運行整個java程序。我想知道,通過讀取本地文件夾的文件或執行Runtime.getRuntime().exec(some linux command);以下時使用Hadoop jar命令特別是會不會有任何問題,如果代碼爲我的HDFS的片段文件操作我可以使用hadoop jar命令來運行普通的java程序嗎?

Configuration conf = new Configuration();  
FileSystem fs = FileSystem.get(conf); 
boolean res = fs.mkdirs(directory path); 

回答

1

是的,可以使用Hadoop的jar命令以運行正常的Java程序。但相反是錯誤的。 Hadoop文件系統操作只能在hadoop環境下運行。但是,如果您正在hadoop集羣中運行,則linux命令可能會在從屬節點中執行。

+0

顯然,如果我使用hadoop jar命令,我不能指定外部相關jar。請注意,我沒有任何地圖縮減代碼,我只是有一些hdfs文件操作。 –

+1

是的,在Hadoop環境下運行時,也可以使用外部相關的罐子。它可以用不同的方式完成。您可以創建一個包含所有依賴項的超級jar包,也可以在每個節點中分配相關jar,並在$ HADOOP_CLASSPATH變量中定義路徑。 –

+0

我正在嘗試不同的解決方案,因爲我沒有管理權限。我不想構建一個胖的jar,因爲它會增加我的部署jar,並且會是多餘的。有沒有可以在我的新配置()對象中指定配置的方式,以便我可以直接寫入HDFS? –

相關問題