2014-04-02 58 views
2

我創建了一個零字節文件與特定的所有者和權限600如何複製到HDFS文件並仍保留權限?

-rw------- 3 cloudera hdfs   56 2014-04-01 18:47 Data/input/test.dat 
cloudera:/home/cloudera 

當我試圖運行通過API副本,我看到它翻轉權限從600到644如何我是否保留許可?任何幫助將不勝感激。

副本

***>hadoop fs -ls Data/input/ 
Found 1 items 
-rw------- 3 cloudera cloudera   10 2014-04-01 19:54 Data/input/test.dat 
之前

後複製

***>hadoop fs -ls Data/input/ 
Found 1 items 
-rw-r--r-- 3 cloudera cloudera   10 2014-04-01 19:55 Data/input/test.dat 

腳本,我已經運行

import java.io.IOException; 

import org.apache.hadoop.conf.Configuration; 
import org.apache.hadoop.fs.FileSystem; 
import org.apache.hadoop.fs.Path; 

public class FilePerm{ 
    public static void main(String[] args) throws IOException{ 
     Path src = new Path("/home/cloudera/input1.dat"); 
     Path tgt = new Path("Data/input/test.dat"); 

     Configuration conf = new Configuration(); 
     FileSystem fs = FileSystem.get(conf); 
     System.out.println(fs.getConf().get("dfs.support.append")); 
     fs.copyFromLocalFile(src, tgt); 
     System.out.println("Completed copy"); 
    } 
} 

要添加, src是本地UNIX文件系統上的文件,tgt是HDFS上的文件。

回答

2

您不復制文件,「copyFromLocal」的意思是「上傳」。你真的從hdfs系統執行上傳(你確定這是你想要做的嗎?)。

無論採用哪種方式,當前hadoop客戶端庫都不檢查「local」是否是基於hdfs的文件系統,也不會嘗試維護權限(或者對其執行任何操作)。如果您希望在使用此係統時擁有特定權限,則必須自行設置它們(請參閱setPermission and FsPermission

對於您的特定用例,您可能需要查看FileUtil,並確保指定兩個FileSystems (而不是兩個文件)。

+0

感謝您的回覆。我試圖查看選項將hdfs文件鎖定到hdfs上的用戶或組(640),而我試圖將它們從本地複製到HDFS。 目前,copyFromLocalFile在執行命令期間給予權限。我可以在使用api複製副本後切換權限和所有者,但我不希望HDFS上的任何其他用戶偶爾看到我的文件。 – user3315248

+0

嘗試上傳到只有您有權訪問的目錄。 – blueberryfields

+0

我可以上傳到任何目錄。問題是我想限制其他用戶在複製過程中使用它。 – user3315248