HDFS使用API操作文件权限

在使用命令行时我们可以使用命令

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-点击进入

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天心有情

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值