SparkContext.wholeTextFiles() java.io.FileNotFoundException:文件不存在:

2024-05-20 22:04:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用apachesparksc.wholeTextFiles公司()在存储在amazon S3中的文件上,我收到以下错误:

14/10/08 06:09:50 INFO input.FileInputFormat: Total input paths to process : 1
14/10/08 06:09:50 INFO input.FileInputFormat: Total input paths to process : 1
Traceback (most recent call last):
File "/root/distributed_rdd_test.py", line 27, in <module>
result = distData.flatMap(gensim.corpora.wikicorpus.extract_pages).take(10)
File "/root/spark/python/pyspark/rdd.py", line 1126, in take
totalParts = self._jrdd.partitions().size()
File "/root/spark/python/lib/py4j-0.8.2.1-src.zip/py4j/java_gateway.py", line 538, in __call__
File "/root/spark/python/lib/py4j-0.8.2.1-src.zip/py4j/protocol.py", line 300, in get_return_value

py4j.protocol.Py4JJavaError: An error occurred while calling o30.partitions.
: java.io.FileNotFoundException: File does not exist: /wikiinput/wiki.xml.gz
at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:517)
at org.apache.hadoop.mapreduce.lib.input.CombineFileInputFormat$OneFileInfo.<init>(CombineFileInputFormat.java:489)
at org.apache.hadoop.mapreduce.lib.input.CombineFileInputFormat.getMoreSplits(CombineFileInputFormat.java:280)
at org.apache.hadoop.mapreduce.lib.input.CombineFileInputFormat.getSplits(CombineFileInputFormat.java:240)
at org.apache.spark.rdd.WholeTextFileRDD.getPartitions(NewHadoopRDD.scala:220)
at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:204)
at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:202)
at scala.Option.getOrElse(Option.scala:120)
at org.apache.spark.rdd.RDD.partitions(RDD.scala:202)
at org.apache.spark.api.python.PythonRDD.getPartitions(PythonRDD.scala:56)
at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:204)
at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:202)
at scala.Option.getOrElse(Option.scala:120)
at org.apache.spark.rdd.RDD.partitions(RDD.scala:202)
at org.apache.spark.api.java.JavaRDDLike$class.partitions(JavaRDDLike.scala:50)
at org.apache.spark.api.java.JavaRDD.partitions(JavaRDD.scala:32)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:231)
at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:379)
at py4j.Gateway.invoke(Gateway.java:259)
at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:133)
at py4j.commands.CallCommand.execute(CallCommand.java:79)
at py4j.GatewayConnection.run(GatewayConnection.java:207)
at java.lang.Thread.run(Thread.java:745)

我的代码如下:

^{pr2}$

所以我的问题是,有没有可能在Spark中从S3读取整个文件?根据文件,这应该是可能的,但它似乎不适合我。在

当我这样做的时候:

sc = SparkContext(appName="Process wiki")
distData = sc.wholeTextFiles('s3n://wiki-dump/wikiinput').take(10)
print distData

那么我得到的错误是完全相同的。在

编辑:

我当然试过了sc.TEXT文件('s3n://wiki dump/wikiinput'),它读取文件时没有任何问题。在

编辑2:

我也尝试过从Scala运行相同的代码,但仍然得到相同的错误。尤其是我正在尝试运行val file = sc.wholeTextFiles("s3n://wiki-dump/wikiinput").first()


Tags: 文件orginputapachejavaatsparkfile
2条回答

问题似乎主要不在spark上,而是与Hadoop libs链接的版本有关。我在使用spark 1.3.0和Hadoop1时得到了这个结果,但是在使用Hadoop2时却看不到。如果您需要这个方法来使用s3,那么一定要安装一个spark版本链接到hadoop2libs。特别是,如果您使用spark-ec2脚本在AWS上设置集群,请确保包含选项hadoop major version=2

详细信息请参见: https://issues.apache.org/jira/browse/SPARK-4414

由于错误消息指向未指定的特定文件(/wikiinput/wiki.xml.gz),该文件可能已损坏,或者您没有访问该文件的正确权限。在

你用的是最新版本的Spark吗?我认为Python在旧的Spark版本中有点落后。在

gensim.corpora.wikicorpus.extract_pages期望什么输入呢?我很好奇,因为/wikiinput/wiki.xml.gz既不包含协议也不包含bucket,因此可能无法寻址正确的文件。当我使用Scala和HDFS上的wholeTextFiles时,文件名是hdfs://<host>:<port>/path/to/file。在

相关问题 更多 >