无法在本地连接 S3 和 Spark
Posted
技术标签:
【中文标题】无法在本地连接 S3 和 Spark【英文标题】:Unable to connect with S3 and Spark Locally 【发布时间】:2018-09-27 15:35:43 【问题描述】:以下是我的代码: 我正在尝试从本地 spark 访问 s3 文件。 但是出现错误: 线程“主”org.apache.hadoop.security.AccessControlException 中的异常:权限被拒绝:s3n://bucketname/folder 从 cmd 提交 spark 作业时,我也在使用 jars :hadoop-aws-2.7.3.jar,aws-java-sdk-1.7.4.jar,hadoop-auth-2.7.1.jar。
package org.test.snow
import org.apache.spark._
import org.apache.spark.SparkContext._
import org.apache.log4j._
import org.apache.spark.storage.StorageLevel
import org.apache.spark.sql.SparkSession
import org.apache.spark.util.Utils
import org.apache.spark.sql._
import org.apache.hadoop.fs.FileSystem
import org.apache.hadoop.fs.Path
object SnowS3
def main(args: Array[String])
val conf = new SparkConf().setAppName("IDV4")
val sc = new SparkContext(conf)
val spark = new org.apache.spark.sql.SQLContext(sc)
import spark.implicits._
sc.hadoopConfiguration.set("fs.s3a.impl","org.apache.hadoop.fs.s3native.NativeS3FileSystem")
sc.hadoopConfiguration.set("fs.s3a.awsAccessKeyId", "A*******************A")
sc.hadoopConfiguration.set("fs.s3a.awsSecretAccessKey","A********************A")
val cus_1=spark.read.format("com.databricks.spark.csv")
.option("header","true")
.option("inferSchema","true")
.load("s3a://tb-us-east/working/customer.csv")
cus_1.show()
任何帮助将不胜感激。 仅供参考:我使用的是 spark 2.1
【问题讨论】:
您能否使用 aws cli 使用相同的凭据访问s3a://tb-us-east/working/customer.csv
?
@Michael West 其实我很困惑。如何在 aws cli 中进行测试?意思是我需要 EMR 来测试 spark 代码..对吗?
我的意思是测试您的 aws 凭证的 s3 访问。如果是凭据问题,则可能没有代码问题。
不不,我可以使用该凭据连接到雪花。凭据没有问题。
我可以从 EMR 集群运行此代码,但不能在本地运行.. 不知道为什么 :(
【参考方案1】:
您不应该设置 fs.s3a.impl 选项;这是一种迷信,似乎在 spark 示例中仍然存在。
而是使用 S3A 连接器,只需使用 s3a:// 前缀与
hadoop-* jar 版本的一致版本。是的,hadoop-aws-2.7.3 需要 hadoop-common-2.7.3 设置 s3a 特定的身份验证选项,fs.s3a.access.key
和 `fs.s3a.secret.key'
如果这不起作用,请查看s3a troubleshooting docs
【讨论】:
以上是关于无法在本地连接 S3 和 Spark的主要内容,如果未能解决你的问题,请参考以下文章
本地Spark连接远程集群Hive(Scala/Python)
无法使用 Spark 中的 GSC 连接器连接 Google Storage 文件