我正在尝试在我的本地计算机上读取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
我没有更改任何设置或配置。我究竟做错了什么?
答案 0 :(得分:3)
您缺少网址中的前导斜杠,因此路径是相对的。要使其绝对,请使用
val fileData = sc.textFile("hdfs:///user/home/cloudera/cm_api.py")
或
val fileData = sc.textFile("/user/home/cloudera/cm_api.py")
答案 1 :(得分:1)
我认为您需要先将文件放入hdfs:hadoop fs -put
,然后检查文件:hadoop fs -ls
,然后转到spark-shell
,val fileData = sc.textFile("cm_api.py")
答案 2 :(得分:0)
在"hdfs://user/home/cloudera/cm_api.py"
中,您缺少URI的hostname
。您应该传递类似"hdfs://<host>:<port>/user/home/cloudera/cm_api.py"
的内容,其中<host>
是Hadoop NameNode主机,<port>
是井,Hadoop NameNode的端口号,{{ 1}}默认情况下。
答案 3 :(得分:0)
错误消息显示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
。
答案 4 :(得分:0)
您可能会对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