HDFS使用API操作文件权限

来源:互联网 发布:wp 利用 知乎 编辑:程序博客网 时间:2024/06/06 07:25
在使用命令行时我们可以使用命令
hdfs dfs -chmod 777 /文件名

来修改文件权限。但是往往在实际应用中我们不能使用命令行。这时就要使用hadoop提供的API进行权限的控制。

Hadoop权威指南也已经很清楚的提示了权限的用法(Hadoop权限管理权威指南-点击进入)

下面我就写一个小例子

public class HdfsUtils {/* * create by LiuWenSheng */private static String HDFS_PROTOCOL = "hdfs://datacube202:9000/myproject/";private static  Configuration conf=new Configuration();static{conf.set("fs.defaultFS", "hdfs://datacube202:9000/");}/** * 把指定的io流加载到指定的文件路径中 * @param is io流 * @param path 加载到hdfs的路径 * @return 是否加载成功 */public static boolean load2HDFS(InputStream is, String path){try{Path p = new Path(HDFS_PROTOCOL + path);FileSystem fs = FileSystem.get(conf);FsPermission permission = new FsPermission(FsAction.ALL,FsAction.ALL,FsAction.ALL);FSDataOutputStream out = fs.create(p);fs.setPermission(p,permission);IOUtils.copyBytes(is,out,4096);is.close();out.close();fs.close();return true;}catch (Exception e){e.printStackTrace();return false;}}}
junit测试类

public class ForTest {    private Configuration conf = new Configuration();    @Before    public void beforeBegining(){        conf.set("fs.defaultFS", "hdfs://datacube202:9000/");    }    @Test    public void test_load2HDFS() throws FileNotFoundException {        boolean b = HdfsUtils.load2HDFS(new FileInputStream("D:\\test"), "张三/CLUSTERING/e/m/a.txt");        System.out.println(b);    }}

权限控制的代码为

 FsPermission permission = new FsPermission(FsAction.ALL,FsAction.ALL,FsAction.ALL); 

fs.setPermission(p,permission);


此时上传的就是 777 权限,想要控制你的权限就为其他请查看Hadoop的API关于(FsPermission-点击进入)


原创粉丝点击