Чтение нескольких файлов в ведре minio с помощью Spark

Я пытаюсь прочитать несколько файлов с помощью Spark. Файлы являются файлами avro и хранятся в корзине Minio с именем datalake.

Я использую: Spark 2.2.1, скомпилированный без hasoop

Minio (последний докер minio / minio)

2 пакета: com.databricks: spark-avro_2.11: 4.0.0 и org.apache.hadoop: hadoop-aws: 2.8.3

В настоящее время я тестирую pyspark:

PYSPARK_PYTHON=python3 /usr/local/spark/pyspark --packages com.databricks:spark-avro_2.11:4.0.0,org.apache.hadoop:hadoop-aws:2.8.3

Инициализация соединения с Minio:

AWS_ID='localKey'
AWS_KEY='localSecret'
sc._jsc.hadoopConfiguration().set("fs.s3a.access.key", AWS_ID)
sc._jsc.hadoopConfiguration().set("fs.s3a.secret.key", AWS_KEY)
sc._jsc.hadoopConfiguration().set("fs.s3a.endpoint", "http://127.0.0.1:9000")

Когда файлы хранятся непосредственно в корне корзины, я могу использовать такие подстановочные знаки:

DF_RANDOM = spark.read.format("com.databricks.spark.avro").load("s3a://datalake/random-random_table+0+000000001*.avro")

результат в порядке:

DF_RANDOM.show()
+-----+-------------------+---+-------------+
|index|                  A|  B|    timestamp|
+-----+-------------------+---+-------------+
|   12| 0.5680445610939323|  1|1530017325000|
|   13|  0.925596638292661|  5|1530017325000|
|   14|0.07103605819788694|  4|1530017325000|
|   15|0.08712929970154071|  7|1530017325000|
+-----+-------------------+---+-------------+

Однако, если файлы хранятся во вложенной папке:

DF_RANDOM = spark.read.format("com.databricks.spark.avro").load("s3a://datalake/random/random-random_table+0+000000001*.avro")

Возникает ошибка:

Py4JJavaError: An error occurred while calling o111.load. : java.nio.file.AccessDeniedException: s3a://datalake/random: getFileStatus on s3a://datalake/random: com.amazonaws.services.s3.model.AmazonS3Exception: Forbidden (Service: Amazon S3; Status Code: 403; Error Code: 403 Forbidden; Request ID: null), S3 Extended Request ID: null

Я не понимаю почему? Подпапки создаются коннектором kafka.

Обратите внимание, что если я не использую подстановочные знаки, я могу получить доступ к файлам, хранящимся в этой подпапке, например:

DF_RANDOM = spark.read.format("com.databricks.spark.avro").load("s3a://datalake/random/random-random_table+0+0000000012.avro")

Есть ли какая-либо политика или доступ для установки? Инструкция spark.read, кажется, читает s3: // datalake / random как файл, но это папка для просмотра

Любая идея ?

Спасибо, в любом случае


person Ftagn    schedule 26.06.2018    source источник


Ответы (1)


Это была проблема Minio

Исправлено в выпуске 2018-06-26T17: 56: 31Z

https://github.com/minio/minio/pull/5966

person Ftagn    schedule 11.12.2018