EMR上Hue/Zeppelin中PySpark访问Glue数据目录报错问题
我来帮你梳理并解决你遇到的这两个常见问题,这在EMR结合Glue Catalog使用时挺容易碰到的:
问题1:导入GlueContext报错No module named awsglue.context
原因
EMR的默认PySpark环境并没有预装AWS Glue的Python SDK(awsglue模块)——这个模块是AWS Glue ETL作业环境自带的,EMR需要额外安装才能调用。
解决步骤
方法1:集群创建时通过Bootstrap Action安装
在创建EMR集群时,添加一个Bootstrap脚本,执行以下命令安装awsglue包(根据集群Python版本调整pip命令,比如pip或pip3):#!/bin/bash sudo pip-3.6 install awsglue方法2:已创建集群的会话内手动安装
如果集群已经启动,你可以在Hue或Zeppelin的PySpark单元格中先执行安装命令(需要管理员权限):import subprocess subprocess.check_call(["sudo", "pip-3.6", "install", "awsglue"])安装完成后再尝试导入
GlueContext即可。
问题2:Hue/Zeppelin中spark.sql("SHOW TABLES").show()返回空结果,但PySpark Shell正常
原因
Hue和Zeppelin的Spark解释器默认没有配置使用Glue Data Catalog作为元存储,而你在PySpark Shell中可能继承了集群的默认配置,或者手动指定了Glue Catalog的参数,所以能正常访问。
解决步骤
配置Zeppelin Spark解释器
- 打开Zeppelin的Interpreter设置,找到Spark解释器。
- 在
spark-defaults中添加以下配置项:spark.sql.catalogImplementation=hive hive.metastore.client.factory.class=com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory - 保存并重启Zeppelin的Spark解释器。
配置Hue的Spark环境
- 登录EMR主节点,编辑Hue的配置文件(通常路径为
/etc/hue/conf/hue.ini)。 - 在
[spark]段落下添加:
确保Spark的spark_conf_dir=/etc/spark/confspark-defaults.conf中已经包含了上面Zeppelin用的那两行Glue Catalog配置。 - 重启Hue服务:
sudo service hue restart。
- 登录EMR主节点,编辑Hue的配置文件(通常路径为
验证配置生效
在Hue/Zeppelin的PySpark单元格中先执行以下代码确认配置:print(spark.conf.get("hive.metastore.client.factory.class"))如果输出是
com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory,说明配置正确,再执行spark.sql("SHOW TABLES").show()就能看到Glue Catalog中的表了。
内容的提问来源于stack exchange,提问作者Brendan

