Spark - 如何以给定的权限写入文件

kec*_*cso 2 java hadoop file apache-spark

我尝试使用 750 权限从 spark 写入一些文件,方法如下我fs.permissions.umask-mode在代码中更新了

jsc.hadoopConfiguration().set("fs.permissions.umask-mode", "022");
Run Code Online (Sandbox Code Playgroud)

它已成功更新默认 umask。

比我尝试在磁盘上写一些 RDD,但文件权限与我应用的掩码不一致。这些文件没有预期的 750 权限。

代码示例:

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();
}
Run Code Online (Sandbox Code Playgroud)

我在这里想念什么?我该怎么做?火花 1.6.3

kec*_*cso 7

其实我从另一个来源得到答案。

--conf spark.hadoop.fs.permissions.umask-mode=022
Run Code Online (Sandbox Code Playgroud)

此设置是提交作业中的协调权限(所有写入都将具有此权限)。我测试了这个并且工作正常。

或者

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

FileSystem.get(path, conf).setPermission(...)
Run Code Online (Sandbox Code Playgroud)