2014-04-02 63 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