Каталог Spark с AWS Glue: база данных не найдена

Я создал кластер EMR с каталогом Glue Data. Когда я вызываю spark-shell, я могу успешно перечислять таблицы, хранящиеся в базе данных Glue, через

spark.catalog.setCurrentDatabase("test")
spark.catalog.listTables

Однако, когда я отправляю работу через spark-submit Я получаю фатальную ошибку

ERROR ApplicationMaster: User class threw exception: org.apache.spark.sql.AnalysisException: Database 'test' does not exist.;

Я создаю свою SparkSession в рамках задания, отправляемого через spark-submit с помощью

SparkSession.builder.enableHiveSupport.getOrCreate

6 ответов

Добавление hive.metastore.client.factory.class Конфигурация кода, инициирующего сеанс spark, решила проблему для меня:

SparkSession spark = SparkSession.builder()
...
            .config("hive.metastore.client.factory.class", "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory")
            .enableHiveSupport()
            .getOrCreate();

это та же конфигурация, которая определена в документах aws ( https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-glue.html) и добавлена ​​в конфигурацию кластера при проверке. Use for Hive table metadata при создании кластера, но по какой-то причине не работает должным образом (я использую emr 5.12.0).

У меня была такая же проблема: spark-submit не обнаружит библиотеки AWS Glue, но spark-shell работа над мастер-узлом будет.

Оказывается, мой spark-submit работа использует жир .jar который был составлен со стандартом org.apache.spark а также org.apache.hive библиотеки. Библиотеки jar использовались вместо пользовательских классов, установленных на EMR, Если это так с вами, обязательно исключите все:

'org.apache.spark:' 'org.apache.hive:' 'org.apache.hadoop:' модули от вас .jar

Вот ссылка, которую я использовал для .Gradle: http://unethicalblogger.com/2015/07/15/gradle-goodness-excluding-depends-from-shadow.html.

Добавление compileOnly Ключевое слово перед всеми библиотеками свечей исправлено.

Нашей проблемой были разрешения IAM для кластера EMR; убедитесь, что профиль экземпляра IAM кластера имеет полный доступ к клею.

Вам следует установить флажок «Использовать каталог данных Glue в качестве метахранилища Hive» внутри задания Glue; это фундаментально, иначе Spark не увидит каталог Glue и увидит только базу данных «по умолчанию», созданную Glue.

Моя проблема заключалась в том, что другая конфигурация классификации мешала spark-hive-siteодин. Я удалил все остальные, и он, наконец, смог подключиться.

EMR 5.9.0 только что выпущен - пожалуйста, сделайте это, он должен работать для вас.

Соответствующая документация:

http://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-release-components.html

http://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-glue.html

Другие вопросы по тегам