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-shell
,val 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 文件
从文件列表而不是 Spark 中的 PATH 读取是不是有效?