【问题标题】:How to set Spark job staging location如何设置 Spark 作业暂存位置
【发布时间】:2019-07-06 15:03:54
【问题描述】:

我的 spark 作业失败,因为用户无权访问 spark 尝试写入暂存或临时数据集的目录。

2017-03-10 10:25:47,0928 错误 JniCommon fs/client/fileclient/cc/jni_MapRClient.cc:2072 线程:26413 mkdirs 失败了 /user/cxpdiprod/.sparkStaging/application_1488190062017_14041,错误 13 线程“main”中的异常 org.apache.hadoop.security.AccessControlException:用户 cxpdiprod(用户 id 99871) 已被拒绝访问创建 应用程序_1488190062017_14041 在 com.mapr.fs.MapRFileSystem.makeDir(MapRFileSystem.java:1250) 在 com.mapr.fs.MapRFileSystem.mkdirs(MapRFileSystem.java:1270) 在 org.apache.hadoop.fs.FileSystem.mkdirs(FileSystem.java:1913) 在 org.apache.hadoop.fs.FileSystem.mkdirs(FileSystem.java:634) 在 org.apache.spark.deploy.yarn.Client.prepareLocalResources(Client.scala:356) 在 org.apache.spark.deploy.yarn.Client.createContainerLaunchContext(Client.scala:727) 在 org.apache.spark.deploy.yarn.Client.submitApplication(Client.scala:142) 在 org.apache.spark.deploy.yarn.Client.run(Client.scala:1021) 在 org.apache.spark.deploy.yarn.Client$.main(Client.scala:1081) 在 org.apache.spark.deploy.yarn.Client.main(Client.scala) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:497) 在 org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:742)

用户“cxpdiprod”有权访问集群中的其他目录,即/mapr/ui/abc。是否有任何属性可以为临时文件和暂存文件设置不同的目录?

【问题讨论】:

    标签: hadoop apache-spark


    【解决方案1】:

    spark-defaults.conf 中添加此属性spark.yarn.stagingDir 以及所需的暂存位置。默认情况下,暂存位置是当前用户在 HDFS 文件系统中的主目录/user/username/

    【讨论】:

    • 谢谢..我正在使用 mapr 集群,但我无权更新 spark-default.conf 文件。正如我建议的那样,我在作业中添加了附加参数,但它不起作用,我仍然得到同样的错误:--conf "spark.yarn.stagingDir=/mapr/Helios/cxpdi/warehouse" \
    • 你可以试试不带引号吗,--conf spark.yarn.stagingDir=/mapr/Helios/cxpdi/warehouse。 Spark 的版本是多少?此属性是最近添加的 SPARK-13063
    • 指定 spark.yarn.stagingDir 无法为我创建 sparkSession。使用 spark2.2
    • 如果您像本地路径(--conf spark.yarn.stagingDir=/mapr/Helios/cxpdi/warehouse)一样添加暂存目录,它将失败。使用类似 --conf spark.yarn.stagingDir=hdfs:///mapr/Helios/cxpdi/warehouse 中的文件系统类型。对于 hdfs HA,您不需要使用 hdfs 服务名称。
    【解决方案2】:

    一个小更新:暂存目录需要指定为

    --conf spark.yarn.stagingDir=hdfs:///<path/to/staging>
    

    至少在我的集群中,我尝试不使用hdfs:///,但它不起作用。添加hdfs:/// 对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-04
      • 2014-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多