Apache spark 如何从spark2.3(使用hadoop aws 2.7)访问us-east-2区域的拼花地板文件
我们可以从当前代码访问us-east-1,但无法访问us-east-2上的拼花地板文件。 请注意“us-east-2”连接,创建datafream在intellij上运行良好,但当我们尝试使用spark shell时会出现400错误 我想在spark shell上做些工作 /Users/test/Downloads/spark-2.3.3-bin-hadoop2.7/bin/spark-shell--jars/Users/test/Downloads/hadoop-aws-2.7.3.jar、/Users/test/Downloads/aws-java-sdk-1.7.4.jar val配置=sc.hadoopConfiguration set(“fs.s3a.impl.disable.cache”、“true”) set(“fs.s3a.impl”、“org.apache.hadoop.fs.s3a.S3AFileSystem”) set(“fs.defaultFS”,“s3a://parquet-dev”) set(“fs.s3a.endpoint”、“s3.us-east-2.amazonaws.com”) set(“fs.s3a.access.key”,“xyz”) set(“fs.s3a.secret.key”、“abc”) val fileName=“s3a://xyz:abc@parquet-dev/c000.snappy.镶木地板“ val df=spark.sqlContext.read.parquet(文件名) com.amazonaws.services.s3.model.amazons3异常:状态代码:400,AWS服务:Amazon s3,AWS请求ID:asadfas,AWS错误代码:null,AWS错误消息:错误请求Apache spark 如何从spark2.3(使用hadoop aws 2.7)访问us-east-2区域的拼花地板文件,apache-spark,hadoop,amazon-s3,Apache Spark,Hadoop,Amazon S3,我们可以从当前代码访问us-east-1,但无法访问us-east-2上的拼花地板文件。 请注意“us-east-2”连接,创建datafream在intellij上运行良好,但当我们尝试使用spark shell时会出现400错误 我想在spark shell上做些工作 /Users/test/Downloads/spark-2.3.3-bin-hadoop2.7/bin/spark-shell--jars/Users/test/Downloads/hadoop-aws-2.7.3.jar、/
fs.defaultFS
或fs.s3a.impl
值如果您试图通过S3A连接器使用S3,那么最好先升级到Hadoop 2.9 JARs和shaded AWS SDK,或者至少升级到2.8.x。hadoop aws代码发生了巨大的变化,更为流行的aws SDK也带来了巨大的变化这是一个简单的变化,但在aws文档或任何其他地方都很难找到 下面是我们所做的更改(可以完成特定于语言的代码) 很少有新的s3存储桶只支持签名版本v4支持,除非您指定,否则旧的SDK无法使用 System.getProperty(“com.amazonaws.services.s3.enableV4”) sc.hadoopConfiguration.set(“fs.s3a.endpoint”、“s3.us-east-2.amazonaws.com”) 及 --conf'spark.executor.extraJavaOptions=-Dcom.amazonaws.services.s3.enableV4=true' --conf'spark.driver.extraJavaOptions=-Dcom.amazonaws.services.s3.enableV4=true' System.getProperty(“com.amazonaws.services.s3.enableV4”)非常重要,必须通过指定上述标志为所有excutor JVM设置。
谢谢我已经解决了,几乎和你说的一样。下面是更多的细节作为答案。我很高兴事情进展顺利,但仍然认为你应该升级到hadoop 2.8.x或更高版本来读取拼花地板或ORC数据。为了改进那些文件读取所采用的随机IO读取模式,进行了大量的工作,特别的随机IO模式fs.s3a.experimental.input.fadvise=random明显更快。在Hadoop2.7中,每当您的客户端执行大的向前或向后操作时,都会看到整个HTTP连接被中止,并协商一个新的连接。
spark-shell \
--master local[4] \
--driver-memory 2g \
--conf 'spark.executor.extraJavaOptions=-Dcom.amazonaws.services.s3.enableV4=true' \
--conf 'spark.driver.extraJavaOptions=-Dcom.amazonaws.services.s3.enableV4=true' \
--jars aws-java-sdk-1.7.4.jar,hadoop-aws-2.7.7.jar
System.getProperty("com.amazonaws.services.s3.enableV4")
sc.hadoopConfiguration.set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem");
sc.hadoopConfiguration.set("fs.s3a.access.key", "access")
sc.hadoopConfiguration.set("fs.s3a.secret.key", "secret")
sc.hadoopConfiguration.set("fs.s3a.endpoint", "s3.us-east-2.amazonaws.com")
val fileName = "s3a://parquet123/c000.parquet"
val df = spark.sqlContext.read.parquet(fileName)
df.count