从EMR迁移到AWS Glue后在Spark SQL中找不到表

时间:2019-02-08 16:28:30

标签: apache-spark amazon-emr aws-glue

我在EMR上有Spark作业,并且将EMR配置为对Hive和Spark元数据使用Glue目录。

我创建了Hive外部表,它们出现在Glue目录中,我的Spark作业可以在Spark SQL中像spark.sql("select * from hive_table ...")一样引用它们

现在,当我尝试在Glue作业中运行相同的代码时,它将失败,并显示“找不到表”错误。看来Glue作业没有使用Spark SQL在EMR中运行的相同方式使用Spark SQL的Glue目录。

我可以通过使用Glue API并将数据帧注册为临时视图来解决此问题:

create_dynamic_frame_from_catalog(...).toDF().createOrReplaceTempView(...)

但是有办法自动执行此操作吗?

3 个答案:

答案 0 :(得分:1)

这是一个期待已久的功能请求(将Glue数据目录与Glue ETL作业一起使用),最近已发布。 创建新工作时,您会发现以下选项

Use Glue data catalog as the Hive metastore

您还可以通过编辑作业并在不提供值的作业参数中添加--enable-glue-datacatalog来为现有作业启用该功能

答案 1 :(得分:0)

您应该使用SparkContext.getOrCreate(),而不要使用SparkSession.builder().enableHiveSupport().getOrCreate(),其中enableHiveSupport()是缺少的重要部分。我认为可能发生的情况是,您的Spark作业实际上不是在Glue中创建表,而是在Spark的嵌入式Hive元存储中创建表,因为您尚未启用Hive支持。

答案 2 :(得分:0)

有同样的问题。它在我的Dev端点上工作,但不在实际的ETL工作上。通过将作业从Spark 2.2编辑到Spark 2.4已修复。