Я публикую то, что в итоге сделал, чтобы устранить проблему для тех, кто может увидеть такое же исключение:
Я добавил hadoop-aws
к HADOOP_OPTIONAL_TOOLS
в has oop -env. sh , Я также удалил все конфигурации в спарк для s3a
, кроме доступа / секрета, и все работало. Мой код до изменений:
# Setup the Spark Process
conf = SparkConf() \
.setAppName(app_name) \
.set("spark.hadoop.mapred.output.compress", "true") \
.set("spark.hadoop.mapred.output.compression.codec", "true") \
.set("spark.hadoop.mapred.output.compression.codec", "org.apache.hadoop.io.compress.GzipCodec") \
.set("spark.hadoop.mapred.output.compression.`type", "BLOCK") \
.set("spark.speculation", "false")\
.set("fs.s3a.aws.credentials.provider", "org.apache.hadoop.fs.s3a.BasicAWSCredentialsProvider")\
.set("com.amazonaws.services.s3.enableV4", "true")
# Some other configs
spark_context._jsc.hadoopConfiguration().set(
"fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem"
)
spark_context._jsc.hadoopConfiguration().set(
"fs.s3a.access.key", s3_key
)
spark_context._jsc.hadoopConfiguration().set(
"fs.s3a.secret.key", s3_secret
)
spark_context._jsc.hadoopConfiguration().set(
"fs.s3a.multipart.size", "104857600"
)
И после:
# Setup the Spark Process
conf = SparkConf() \
.setAppName(app_name) \
.set("spark.hadoop.mapred.output.compress", "true") \
.set("spark.hadoop.mapred.output.compression.codec", "true") \
.set("spark.hadoop.mapred.output.compression.codec", "org.apache.hadoop.io.compress.GzipCodec") \
.set("spark.hadoop.mapred.output.compression.`type", "BLOCK") \
.set("spark.speculation", "false")
# Some other configs
spark_context._jsc.hadoopConfiguration().set(
"fs.s3a.access.key", s3_key
)
spark_context._jsc.hadoopConfiguration().set(
"fs.s3a.secret.key", s3_secret
)
Это, вероятно, означает, что это была проблема пути к классу. hadoop-aws
не добавлялся к пути к классам, и поэтому под прикрытием он по умолчанию использовался для какой-либо другой реализации S3AFileSystem.java
. * oop и искра - огромная боль в этой области, потому что есть так много разных мест и способов загрузки вещей, и java также касается порядка, потому что, если это не произойдет в правильном порядке, это будет просто go с тем, что было загружено последним. Надеюсь, что это поможет другим, сталкивающимся с той же проблемой.