Amazon web services S3AFileSystem-当前缀是文件和目录树的一部分时,FileReadyExistsException
我们正在使用aws-java-sdk-1.7.4.jar和hadoop-aws-2.7.5.jar运行apachespark作业,以将拼花文件写入S3存储桶 我们在s3中有键“s3://mybucket/d1/d2/d3/d4/d5/d6/d7”(d7是一个文本文件)。我们还有键“s3://mybucket/d1/d2/d3/d4/d5/d6/d7/d8/d9/part_dt=20180615/a.parquet”(a.parquet是一个文件) 当我们运行spark作业在“s3://mybucket/d1/d2/d3/d4/d5/d6/d7/d8/d9/part_dt=20180616/”下编写b.parquet文件时(即希望在s3中创建“s3://mybucket/d1/d2/d3/d4/d5/d6/d8/d9/part_dt=20180616/b.parquet”),我们得到以下错误Amazon web services S3AFileSystem-当前缀是文件和目录树的一部分时,FileReadyExistsException,amazon-web-services,apache-spark,hadoop,amazon-s3,hdfs,Amazon Web Services,Apache Spark,Hadoop,Amazon S3,Hdfs,我们正在使用aws-java-sdk-1.7.4.jar和hadoop-aws-2.7.5.jar运行apachespark作业,以将拼花文件写入S3存储桶 我们在s3中有键“s3://mybucket/d1/d2/d3/d4/d5/d6/d7”(d7是一个文本文件)。我们还有键“s3://mybucket/d1/d2/d3/d4/d5/d6/d7/d8/d9/part_dt=20180615/a.parquet”(a.parquet是一个文件) 当我们运行spark作业在“s3://mybuc
org.apache.hadoop.fs.FileAlreadyExistsException: Can't make directory for path 's3a://mybucket/d1/d2/d3/d4/d5/d6/d7' since it is a file.
at org.apache.hadoop.fs.s3a.S3AFileSystem.mkdirs(S3AFileSystem.java:861)
at org.apache.hadoop.fs.FileSystem.mkdirs(FileSystem.java:1881)
如中所述。在“普通”FS中,目录下不能有文件;在S3A连接器中,您无法获取这些数据,至少在S3A连接器中进行了足够的尽职调查
它只是混淆了每一个树行走算法,重命名,删除,任何扫描文件的东西。这将包括spark分区逻辑。您试图创建的新目录树可能对调用方不可见。(您可以通过创建它来测试这一点,将该文本文件放置到位,看看会发生什么)
我们试图定义一个FS应该在中做什么,包括定义一些“非常明显”的事情,以至于没有人愿意写下来或为其编写测试,例如
- 只有目录才能有子目录
- 所有孩子都必须有父母
- 只有文件才能有数据(例外:ReiserFS)
- 文件和他们说的一样长(这就是为什么S3A不支持客户端加密,顺便说一句)