Приложение Spark не пишет в ведро s3
Проблема в:
У меня есть приложение spark, которое не может записать данные в s3. Чтение в порядке.
Конфигурация искры:
SparkConf conf = new SparkConf();
...
conf.set("spark.hadoop.fs.s3a.endpoint", getCredentialConfig().getS3Endpoint());
System.setProperty("com.amazonaws.services.s3.enableV4", "true");// local works. enable aws v4 auth.
conf.set("spark.hadoop.fs.s3a.impl", org.apache.hadoop.fs.s3a.S3AFileSystem.class.getName());
conf.set("spark.hadoop.fs.s3a.access.key", getCredentialConfig().getS3Key());
conf.set("spark.hadoop.fs.s3a.secret.key", getCredentialConfig().getS3Secret());
conf.set("spark.hadoop.fs.hdfs.impl", org.apache.hadoop.hdfs.DistributedFileSystem.class.getName());
conf.set("spark.hadoop.fs.file.impl", org.apache.hadoop.fs.LocalFileSystem.class.getName());
...
Напишите конструкцию:
String fileName = "s3a://" + getCredentialConfig().getS3Bucket() + "/s3-outputs/test/";
getSparkSession()
.createDataset(list, Encoders.INT())
.write()
.format("com.databricks.spark.csv")
.mode("overwrite")
.csv(fileName);
Исключение составляет:
10:35:01.914 [main] DEBUG org.apache.hadoop.fs.s3a.S3AFileSystem - Not Found: s3a://mybucket/s3-outputs/test/_temporary-39c4ebc3-61bd-47e0-9ac6-d047af1965f3
10:35:01.914 [main] DEBUG org.apache.hadoop.fs.s3a.S3AFileSystem - Couldn't delete s3a://mybucket/s3-outputs/test/_temporary-39c4ebc3-61bd-47e0-9ac6-d047af1965f3 - does not exist
Это означает, что спарк не может найти папки шаблонов в целевой файловой системе.
Текущая версия hadoop: 2.7.3
Java 8
На Hadoop 2.8.1 - все отлично работает. Но AWS EMR на данный момент не поддерживает версию hadoop 2.8.*.