2017-05-30 72 views
1

我在做什麼基本上都是自動使用Java代碼的一些shell命令(提綱命令,包括Hadoop的shell命令),我現在做的猛砸follwoing命令:「文件模式」 Hadoop的路徑

hadoop fs -mkdir path//tp//folder 
hadoop fs -chmod a+w path//to//folder 

一切做工精細,現在什麼時候試圖用Java代碼來執行相同的操作:

org.apache.hadoop.fs.FileSystem.mkdir(new Path("path//to//folder"),new FsPermission(FsAction.ALL, FsAction.ALL, FsAction.ALL)) 

不幸的是這種方法:

public void setPermission(Path p, FsPermission permission) throws IOException 
{ 
} 

未實現(分別爲:)用Hadoop v 2.6.0〜2.8.0

我的問題我怎樣才能添加使用Java代碼到Hadoop的路徑讀/寫權限?

+0

是不是'mkdirs'方法? –

+0

'FileSystem'是抽象的,這裏是它的實現hdfs: https://github.com/apache/hadoop/blob/trunk/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org /apache/hadoop/hdfs/DistributedFileSystem.java 您是否嘗試過使用此方法?你有錯誤嗎? – fi11er

回答

1

首先,您可能想要交叉檢查分析結果。例如,如果您看到here,則會發現FileSystem實際上是一個摘要類。所以它不會讓我感到驚訝,如果特定的子類,實際得到實例化在某個點覆蓋空方法setPermissions() - 基於底層操作系統,例如。

在任何情況下,有一個簡單的,但醜陋的解決方法:使用ProcessBuilder,並從內部的Java運行

hadoop fs -chmod a+w path//to//folder 

。並寫下:

// TODO: check with next version of hadoop if fs.FileSystem.setPermission() is now implemented 
+0

我發現很難相信mkdirs命令沒有設置文件權限,按照JavaDoc –

+0

@ cricket_007那麼。我做了一些關於grepcode的搜索...我也只找到了一個空的setPermissions()方法。而我檢查的子類沒有覆蓋任何... – GhostCat

+0

很奇怪... https://github.com/apache/hadoop/blob/release-2.7.1/hadoop-common-project/hadoop-common/src/主/ JAVA /組織/阿帕奇/的Hadoop/FS/FileSystem.java#L2337。讓我很好奇'-chmod'標誌實際上是如何工作的,然後 –