Я пытаюсь прочитать файл с s3 с моего ноутбука через IntelliJ, чтобы я мог легче разработать свою искровую работу.
Код RDD textFile работает в Zeppelin в кластере EMR, но не тогда, когдаЯ стараюсь на месте.
В Zeppelin мне не нужно было настраивать контекст зажигания, предположительно потому, что он делает это для меня, поскольку экземпляр Zeppelin находится в среде AWS.
Я написал код длясоздайте временные учетные данные AWS (используя мои пользовательские ключи IAM), чтобы я мог предоставить токен сеанса для контекста spark.Ключ доступа и секретный ключ также получены из временных учетных данных.
val sqlContext = sparkSession.sqlContext
sqlContext.sparkContext.hadoopConfiguration
.set("fs.s3a.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem")
sqlContext.sparkContext.hadoopConfiguration
.set("fs.s3a.awsAccessKeyId", accessKeyId)
sqlContext.sparkContext.hadoopConfiguration
.set("fs.s3a.access.key", accessKeyId)
sqlContext.sparkContext.hadoopConfiguration
.set("fs.s3a.awsSecretAccessKey", secretAccessKey)
sqlContext.sparkContext.hadoopConfiguration
.set("fs.s3a.secret.key", secretAccessKey)
sqlContext.sparkContext.hadoopConfiguration
.set("fs.s3a.session.token", sessionToken)
sqlContext.sparkContext.hadoopConfiguration.set("fs.s3a.credentialsType", "AssumeRole")
sqlContext.sparkContext.hadoopConfiguration
.set(
"fs.s3a.stsAssumeRole.arn",
"arn:aws:iam::1234:role/someRoleThatWasUsedInTheWorkingTempCredCode"
)
sqlContext.sparkContext.hadoopConfiguration.set(
"fs.s3a.aws.credentials.provider",
"org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider"
)
sqlContext.sparkContext.textFile(
"s3a://path/to/file/that/definitely/exists/3714bb50a146.gz"
).collect()
Я ожидал массив с данными из файла, вместо этого мне было отказано в разрешении.
org.apache.hadoop.security.AccessControlException: Permission denied: s3n://path/to/file/that/definitely/exists/3714bb50a146.gz
at org.apache.hadoop.fs.s3native.Jets3tNativeFileSystemStore.processException(Jets3tNativeFileSystemStore.java:449)
at org.apache.hadoop.fs.s3native.Jets3tNativeFileSystemStore.processException(Jets3tNativeFileSystemStore.java:427)
Два вопроса:
1) Возможно ли то, что я делаю (выполняя задание spark, которое читает из s3 локально)?
2) Если то, что я делаю, возможно, настроен ли мой контекст искрыкод действителен?Я чувствую, что пропустил свойство или использовал неправильный ключ свойства.