2016-11-17 112 views
0

当我看到它的工作原理特定文件:星火AVRO S3读不工作的分区数据

val filePath= "s3n://bucket_name/f1/f2/avro/dt=2016-10-19/hr=19/000000"   
val df = spark.read.avro(filePath) 

但是,如果我指向一个文件夹来读取日期分区数据失败:

VAL文件路径= “S3N:// BUCKET_NAME/F1/F2 /架Avro/DT = 2016年10月19日/”

我得到这个错误:

Exception in thread "main" org.apache.hadoop.fs.s3.S3Exception: org.jets3t.service.S3ServiceException: S3 HEAD request failed for '/f1%2Ff2%2Favro%2Fdt%3D2016-10-19' - ResponseCode=403, ResponseMessage=Forbidden 
at org.apache.hadoop.fs.s3native.Jets3tNativeFileSystemStore.handleServiceException(Jets3tNativeFileSystemStore.java:245) 
at org.apache.hadoop.fs.s3native.Jets3tNativeFileSystemStore.retrieveMetadata(Jets3tNativeFileSystemStore.java:119) 
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 org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:186) 
at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:102) 
at org.apache.hadoop.fs.s3native.$Proxy7.retrieveMetadata(Unknown Source) 
at org.apache.hadoop.fs.s3native.NativeS3FileSystem.getFileStatus(NativeS3FileSystem.java:414) 
at org.apache.hadoop.fs.FileSystem.exists(FileSystem.java:1397) 
at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$12.apply(DataSource.scala:374) 
at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$12.apply(DataSource.scala:364) 
at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241) 
at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241) 
at scala.collection.immutable.List.foreach(List.scala:381) 
at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:241) 
at scala.collection.immutable.List.flatMap(List.scala:344) 
at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:364) 
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:149) 
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:132) 
at com.databricks.spark.avro.package$AvroDataFrameReader$$anonfun$avro$2.apply(package.scala:34) 
at com.databricks.spark.avro.package$AvroDataFrameReader$$anonfun$avro$2.apply(package.scala:34) 
at BasicS3Avro$.main(BasicS3Avro.scala:55) 
at BasicS3Avro.main(BasicS3Avro.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 com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 

难道我错过什么东西?

+0

它看起来像是一个验证错误,服务以403响应。也许你应该检查与桶相关的策略。 – devsprint

+0

但是,当我访问特定文件时,相同的凭据起作用。另外,我可以使用aws命令行列出文件夹的内容。 – JNish

+0

好吧,让我试着在本地重现它... – devsprint

回答

0

更新的,维护的s3a客户报告什么?

+0

使用spark 2.0.0来重现问题。对不起,我可以重新解释你的问题吗? @Steve Loughran – JNish