spark-如何在给定权限下编写文件

vuktfyat  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(428)

我试着用下面的方法更新了spark的一些文件 fs.permissions.umask-mode 在代码中

jsc.hadoopConfiguration().set("fs.permissions.umask-mode", "022");

它成功地更新了默认的umask。
然后我尝试在磁盘上写一些rdd,但是文件权限与我应用的掩码不一致。这些文件没有预期的权限。
代码示例:

public class Bla {
    public static void main(String[] args) throws Exception {
    SparkConf sConf = new SparkConf().setAppName("test hadoop config ");
    JavaSparkContext jsc = new JavaSparkContext(sConf);
    JavaRDD<String> stringJavaRDD = jsc.textFile("/path/a.txt");
    stringJavaRDD.saveAsTextFile("/path/def_umask");
    System.out.println("fs.permissions.umask-mode " +
            jsc.hadoopConfiguration().get("fs.permissions.umask-mode"));
    jsc.hadoopConfiguration().set("fs.permissions.umask-mode", "022");
    System.out.println("after mod -- fs.permissions.umask-mode " +
            jsc.hadoopConfiguration().get("fs.permissions.umask-mode"));
    // < this succeed
    stringJavaRDD.saveAsTextFile("/path/updated_umask");
    // < files has the same permission as before the umask change :(

    jsc.stop();
}

我错过了什么?我该怎么做?Spark1.6.3

omqzjyyz

omqzjyyz1#

实际上我从另一个渠道得到了答案。

--conf spark.hadoop.fs.permissions.umask-mode=022

此设置正在协调提交作业中的权限(所有写入操作都将具有此权限)。我测试了这个,效果很好。

可以在代码中设置给定路径的权限

FileSystem.get(path, conf).setPermission(...)

相关问题