PySpark (шаг / задание) в EMR не может подключиться к каталогу данных клея AWS, но Zeppelin может - PullRequest
0 голосов
/ 24 мая 2019

Я настроил кластер EMR с включенным каталогом данных

enter image description here

Я могу получить доступ к каталогу данных, когда использую Zeppelin, но с заданиями / шагами, которые я отправляю, как:

aws emr add-steps --cluster-id j-XXXXXX --steps "Type=spark,Name=Test,Args=[--deploy-mode,cluster,--master,yarn,--conf,spark.yarn.submit.waitAppCompletion=false,--num-executors,2,--executor-cores,2,--executor-memory,8g,s3://XXXXXX/emr-test.py],ActionOnFailure=CONTINUE"

Я не вижу своего каталога данных, когда использую spark.sql("USE xxx") ИЛИ spark.sql("SHOW DATABASES") почему это так.

from pyspark import SparkContext
from pyspark.sql import SparkSession

sc = SparkContext()
spark = SparkSession \
    .builder \
    .appName("Test") \
    .config("hive.metastore.client.factory.class", "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory") \
    .getOrCreate()

spark.sql("USE ...")
spark.sql("SHOW TABLES").show()
spark.sql("SELECT querydatetime FROM flights LIMIT 10").show(10)

sc.stop()

Я получаю что-то вроде:

pyspark.sql.utils.AnalysisException: u"Database 'xxxxxx' not found;"

1 Ответ

0 голосов
/ 25 мая 2019

Я узнал из https://michael.ransley.co/2018/08/28/spark-glue.html, что

Чтобы получить доступ к таблицам из шага Spark, вам нужно создать экземпляр сеанса spark с помощью каталога клея:

spark = SparkSession.builder \
    .appName(job_name) \
    .config("hive.metastore.client.factory.class", "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory") \
    .enableHiveSupport() \
    .getOrCreate()
spark.catalog.setCurrentDatabase("mydatabase")

Мне не хватает строки .enableHiveSupport().К сожалению, это не отражено в официальных документах ...

...