Каталог 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