>>> student=sc.textFile("/headless/Desktop/workspace/hdfs_op/student.txt") >>> print(student.collect()) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/opt/module/spark-2.4.8-bin-hadoop2.7/python/pyspark/rdd.py", line 816, in collect sock_info = self.ctx._jvm.PythonRDD.collectAndServe(self._jrdd.rdd()) File "/opt/module/spark-2.4.8-bin-hadoop2.7/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py", line 1257, in __call__ File "/opt/module/spark-2.4.8-bin-hadoop2.7/python/pyspark/sql/utils.py", line 63, in deco return f(*a, **kw) File "/opt/module/spark-2.4.8-bin-hadoop2.7/python/lib/py4j-0.10.7-src.zip/py4j/protocol.py", line 328, in get_return_value py4j.protocol.Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe. : org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: hdfs://master:9000/headless/Desktop/workspace/hdfs_op/student.txt at org.apache.hadoop.mapred.FileInputFormat.singleThreadedListStatus(FileInputFormat.java:287) at org.apache.hadoop.mapred.FileInputFormat.listStatus(FileInputFormat.java:229) at org.apache.hadoop.mapred.FileInputFormat.getSplits(FileInputFormat.java:315) at org.apache.spark.rdd.HadoopRDD.getPartitions(HadoopRDD.scala:204) at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:273) at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:269) at scala.Option.getOrElse(Option.scala:121) at org.apache.spark.rdd.RDD.partitions(RDD.scala:269) at org.apache.spark.rdd.MapPartitionsRDD.getPartitions(MapPartitionsRDD.scala:49) at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:273) at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:269) at scala.Option.getOrElse(Option.scala:121) at org.apache.spark.rdd.RDD.partitions(RDD.scala:269) at org.apache.spark.SparkContext.runJob(SparkContext.scala:2132) at org.apache.spark.rdd.RDD$$anonfun$collect$1.apply(RDD.scala:990) at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151) at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:112) at org.apache.spark.rdd.RDD.withScope(RDD.scala:385) at org.apache.spark.rdd.RDD.collect(RDD.scala:989) at org.apache.spark.api.python.PythonRDD$.collectAndServe(PythonRDD.scala:166) at org.apache.spark.api.python.PythonRDD.collectAndServe(PythonRDD.scala) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244) at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357) at py4j.Gateway.invoke(Gateway.java:282) at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132) at py4j.commands.CallCommand.execute(CallCommand.java:79) at py4j.GatewayConnection.run(GatewayConnection.java:238) at java.lang.Thread.run(Thread.java:748)
时间: 2025-04-03 21:01:49 浏览: 48
从错误信息来看,您尝试通过 Spark 的 `sc.textFile()` 方法读取 HDFS 上的一个文件 `/headless/Desktop/workspace/hdfs_op/student.txt` ,但在运行过程中抛出了异常。以下是问题的原因分析以及解决办法。
### 原因分析
1. 错误的核心提示是:
```
org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: hdfs://master:9000/headless/Desktop/workspace/hdfs_op/student.txt
```
表明路径 `hdfs://master:9000/headless/Desktop/workspace/hdfs_op/student.txt` 并不存在于您的 HDFS 文件系统中。
2. 可能的问题包括:
- 您指定的文件路径有误,例如路径拼写错误、层级结构不对等;
- 文件未上传到 HDFS 中;
- 路径前缀配置不当,HDFS 地址或端口号可能有问题(如默认地址是否为 `hdfs://master:9000/`)。
---
### 解决方案
#### 步骤一:确认 HDFS 目录及文件是否存在
在终端中执行以下命令检查目标目录和文件是否存在于 HDFS 中:
```bash
hdfs dfs -ls /headless/Desktop/workspace/hdfs_op/
```
如果返回结果为空,则说明该路径下没有文件;如果是路径本身不存在,请创建对应目录并上传文件:
```bash
# 创建目录
hdfs dfs -mkdir -p /headless/Desktop/workspace/hdfs_op/
# 将本地文件上传至 HDFS
hdfs dfs -put /path/to/local/student.txt /headless/Desktop/workspace/hdfs_op/
```
#### 步骤二:验证文件路径
确保代码中指定的路径完全匹配实际存储位置。注意区分大小写,并保证路径无多余空格或其他字符干扰。
修改后的代码示例:
```python
student = sc.textFile("hdfs://master:9000/headless/Desktop/workspace/hdfs_op/student.txt")
print(student.collect())
```
> 如果不确定 HDFS 默认访问地址是多少,可以查阅集群配置文件 (`core-site.xml`) 或询问管理员明确主机名与端口设置。
#### 步骤三:测试程序连接性
完成上述步骤后再试一次操作,若仍报错则需排查网络状况或权限限制等问题。
---
### 总结
本次问题是由于未能正确找到输入数据引起的 InvalidInputException 。通过核实 HDFS 内容、修正引用链接即可解决问题。
阅读全文
相关推荐
















