【问题标题】:Spark/Hadoop can't read root filesSpark/Hadoop 无法读取根文件
【发布时间】:2018-02-19 17:10:42
【问题描述】:

我正在尝试通过 spark 读取只有我(和 root)可以读取/写入的文件夹中的文件,首先我启动 shell:

spark-shell --master yarn-client

然后我:

val base = sc.textFile("file///mount/bases/FOLDER_LOCKED/folder/folder/file.txt")
base.take(1)

并得到以下错误:

2018-02-19 13:40:20,835 WARN scheduler.TaskSetManager:
Lost task 0.0 in stage 0.0 (TID 0, mydomain, executor 1): 
java.io.FileNotFoundException: File file: /mount/bases/FOLDER_LOCKED/folder/folder/file.txt does not exist
at org.apache.hadoop.fs.RawLocalFileSystem.deprecatedGetFileStatus(RawLocalFileSystem.java:611)
    at org.apache.hadoop.fs.RawLocalFileSystem.getFileLinkStatusInternal(RawLocalFileSystem.java:824)
    at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:601)
...

我怀疑由于使用用户 hadoop 启动了 yarn/hadoop,它无法在此文件夹中进一步获取文件。我该如何解决这个问题?

OBS:此文件夹不能对其他用户打开,因为它有私人数据。

EDIT1:这个 /mount/bases 是一个网络存储,使用 cifs 连接。

EDIT2:hdfs 和 yarn 由用户 hadoop 启动

【问题讨论】:

    标签: hadoop apache-spark


    【解决方案1】:

    由于hadoop是启动hdfs和yarn的用户,他是会尝试在job中打开文件的用户,所以必须授权访问这个文件夹,幸运的是hadoop首先检查哪个用户正在执行job允许访问文件夹/文件,因此您不会冒险。

    【讨论】:

      【解决方案2】:

      好吧,如果它是与文件访问相关的问题,您将得到“访问被拒绝”作为错误。在这种特殊情况下,我认为您尝试读取的文件根本不存在,或者可能有其他名称 [typos]。只需检查文件名即可。

      【讨论】:

      • 如果我尝试file:///home/another_user 我得到“文件路径不存在”,但我试图访问的这个存储是通过 cifs 连接在网络中的,我可以使用 scala 读取文件使用相同的路径,但不使用 spark/hadoop。
      猜你喜欢
      • 1970-01-01
      • 2017-03-09
      • 1970-01-01
      • 2021-10-11
      • 2020-01-06
      • 1970-01-01
      • 2018-07-24
      • 1970-01-01
      • 2019-07-16
      相关资源
      最近更新 更多