Конфигурации Had oop S3 не могут быть установлены для сеанса Spark, запущенного в среде Cloudera (CDH 6.3.0) - PullRequest
0 голосов
/ 14 июля 2020

Мы можем установить следующие конфигурации в службе HDFS (core-site. xml) с помощью пользовательского интерфейса Cloudera Manager:

fs.s3a.access.key
fs.s3a.secret.key

Однако это повлияет на весь кластер. Все задания Spark, выполняемые в кластере, будут использовать одни и те же конфигурации для доступа к S3.

Мы хотели бы иметь возможность настраивать ведро S3 и доступ для каждого задания Spark независимо.

Использование Spark -shell, мы можем использовать следующие команды для успешного запроса таблицы Hive, хранящейся в S3:

scala> sc.hadoopConfiguration.set("fs.s3a.access.key","XXXXXXXXXXXXXXXX")
scala> sc.hadoopConfiguration.set("fs.s3a.secret.key","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
scala> spark.sql("select count(1) from <database>.<table>").show()
+--------+
|count(1)|
+--------+
| 100|
+--------+

Однако программная установка тех же конфигураций в нашем коде Java не будет работать для того же запроса для таблица Hive.

Подход 1 (с использованием конфигураций spark.had oop. *):

SparkConf sparkConf = new SparkConf();
sparkConf.set("spark.hadoop.fs.s3a.access.key", "XXXXXXXXXXXXXXXX");
sparkConf.set("spark.hadoop.fs.s3a.secret.key", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
SparkSession spark = SparkSession.builder().config(sparkConf).enableHiveSupport().getOrCreate();

Подход 2 (с использованием 'hadoopConfiguration' и без 'spark.had oop 'prefix):

SparkConf sparkConf = new SparkConf();
SparkSession spark = SparkSession.builder().config(sparkConf).enableHiveSupport().getOrCreate();
spark.sparkContext().hadoopConfiguration().set("fs.s3a.access.key", "XXXXXXXXXXXXXXXX");
spark.sparkContext().hadoopConfiguration().set("fs.s3a.secret.key", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");

Оба подхода не работают. Когда запускается задание Spark на основе Java, оно выдает ошибку:

The directory s3a://<bucket>/path/to/database/table/<table>/file_name=file_23300820194892734.parquet was not found. Was it deleted very recently?
+--------+
|count(1)|
+--------+
|0 |
+--------+

Это известная проблема? Есть ли способ обойти это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...