Spark Shell 无法读取有效路径的文件

Posted

技术标签:

【中文标题】Spark Shell 无法读取有效路径的文件【英文标题】:Spark Shell unable to read file at valid path 【发布时间】:2015-09-22 10:35:25 【问题描述】:

我正在尝试在我的本地计算机上读取 Cloudera 的 CentOS 发行版附带的 Spark Shell 中的文件。以下是我在 Spark Shell 中输入的命令。

spark-shell
val fileData = sc.textFile("hdfs://user/home/cloudera/cm_api.py");
fileData.count

我也试过这个语句来读取文件:

val fileData = sc.textFile("user/home/cloudera/cm_api.py");

但是我得到了

org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: hdfs://quickstart.cloudera:8020/user/cloudera/user/cloudera/cm_api.py

我没有更改任何设置或配置。我究竟做错了什么?

【问题讨论】:

scala 中不需要古老的; 【参考方案1】:

您的网址中缺少前导斜杠,因此路径是相对的。要使其绝对化,请使用

val fileData = sc.textFile("hdfs:///user/home/cloudera/cm_api.py")

val fileData = sc.textFile("/user/home/cloudera/cm_api.py")

【讨论】:

试过hdfs:/// 没用。必须尝试/user 路径。【参考方案2】:

我认为你需要先将文件放入hdfs:hadoop fs -put,然后检查文件:hadoop fs -ls,然后转到spark-shellval fileData = sc.textFile("cm_api.py")

【讨论】:

【参考方案3】:

"hdfs://user/home/cloudera/cm_api.py" 中,您缺少URI 的hostname。您应该传递类似"hdfs://<host>:<port>/user/home/cloudera/cm_api.py" 的信息,其中<host> 是Hadoop NameNode 主机,<port> 是,好吧,Hadoop NameNode 的端口号,默认为50070。 p>

【讨论】:

【参考方案4】:

错误消息显示hdfs://quickstart.cloudera:8020/user/cloudera/user/cloudera/cm_api.py 不存在。这条路看起来很可疑!你说的文件可能在hdfs://quickstart.cloudera:8020/user/cloudera/cm_api.py

如果是,您可以使用该完整路径访问它。或者,如果默认文件系统配置为hdfs://quickstart.cloudera:8020/user/cloudera/,则可以直接使用cm_api.py

【讨论】:

thisquickstart.cloudera:8020 不是 URL 而是磁盘上的目录吗? 除了命名法之外,我认为sc.textFile("hdfs://quickstart.cloudera:8020/user/home/cloudera/cm_api.py") 是您最好的选择。 sc.textFile("/user/home/cloudera/cm_api.py"),也许sc.textFile("cm_api.py") 也可以。 他们都没有工作。我不知道为什么。该文件位于 Cloudera 主目录中。 但您肯定会收到不同的错误消息。包含文件的完整路径时会出现什么错误?另外,请通过hadoop fs -ls hdfs://quickstart.cloudera:8020/user/home/cloudera/cm_api.py 检查文件是否存在。如果这不起作用,则该文件根本不存在。【参考方案5】:

您可能会混淆 HDFS 文件路径和本地文件路径。通过指定

hdfs://quickstart.cloudera:8020/user/home/cloudera/cm_api.py

你在说两件事:

1) 有一台名为“quickstart.cloudera”的计算机可以通过网络访问(尝试 ping 以确保是这种情况),并且它正在运行 HDFS。

2) HDFS 文件系统在 /user/home/cloudera/cm_api.py 包含一个文件(尝试 'hdfs dfs -ls /user/home/cloudera/' 来验证这一点

如果您尝试访问本地文件系统上的文件,则必须使用不同的 URI:

file:///user/home/cloudera/cm_api.py

【讨论】:

以上是关于Spark Shell 无法读取有效路径的文件的主要内容,如果未能解决你的问题,请参考以下文章

无法从 synapse spark scala notebook 读取 csv 文件

windows上spark shell读取本地文件

从文件列表而不是 Spark 中的 PATH 读取是不是有效?

在 Spark 2.3.0 中读取 Zstandard 压缩文件

无法在 spark 中读取 libsvm 文件

由于 ExecutorLostFailure,无法使用 spark 读取镶木地板文件