Sri*_*her 8 amazon-emr apache-spark aws-glue hive-metastore aws-glue-data-catalog
我有一个带有 Spark(v2.2.1) 的 AWS EMR 集群 (v5.11.1),并尝试使用 AWS Glue 数据目录作为其元存储。根据官方 AWS 文档(下面的参考链接)中提供的指南,我已按照这些步骤操作,但在访问 Glue 目录数据库/表时遇到了一些差异。EMR 集群和 AWS Glue 都在同一个账户中,并提供了适当的 IAM 权限。
AWS 文档:https : //docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-glue.html
观察:
- 使用 spark-shell(来自 EMR 主节点):
- 作品。能够使用以下命令访问 Glue DB/Tables:
Run Code Online (Sandbox Code Playgroud)spark.catalog.setCurrentDatabase("test_db") spark.catalog.listTables- 使用 spark-submit(来自 EMR 步骤):
- 不起作用。不断收到错误“数据库'test_db'不存在”
错误跟踪如下:
INFO HiveClientImpl:Hive 客户端(版本 1.2.1)的仓库位置是 hdfs:///user/spark/warehouse
INFO HiveMetaStore: 0: get_database: 默认
INFO audit: ugi=hadoop ip=unknown-ip-addr cmd=get_database:默认
信息 HiveMetaStore:0:get_database:global_temp
信息审计:ugi=hadoop ip=unknown-ip-addr cmd=get_database:global_temp
WARN ObjectStore:无法获取数据库 global_temp,返回 NoSuchObjectException
INFO SessionState:创建的本地目录:/mnt3/yarn/ usercache / Hadoop的/应用程序缓存/ application_1547055968446_0005 / container_1547055968446_0005_01_000001的/ tmp / 6d0f6b2c-CCCD-4e90-a524-93dcc5301e20_resources
信息SessionState的:创建HDFS目录:/ tmp目录/蜂房/ Hadoop的/ 6d0f6b2c-CCCD-4e90-a524-93dcc5301e20
INFO SessionState的:创建本地目录:/ mnt3 /纱/ usercache / Hadoop的/应用程序缓存/ application_1547055968446_0005 / container_1547055968446_0005_01_000001的/ tmp /纱/ 6d0f6b2c-CCCD-4e90-a524-93dcc5301e20
信息SessionState的:创建HDFS目录:/ tmp目录/蜂房/ Hadoop的/ 6d0f6b2c -cccd-4e90-a524-93dcc5301e20/_tmp_space.db
INFO HiveClientImpl:Hive 客户端(版本 1.2.1)的仓库位置是 hdfs:///user/spark/warehouse
INFO StateStoreCoordinatorRef:注册的 StateStoreCoordinator 端点
INFO CodeGenerator :代码生成191.063411 ms
INFO CodeGenerator :代码生成时间为 10.27313 ms
INFO HiveMetaStore:0:get_database:test_db
INFO 审计:ugi=hadoop ip=unknown-ip-addr cmd=get_database:test_db
警告 ObjectStore:无法获取数据库 test_db,返回 NoSuchObjectException
org.apache.spark.sql.AnalysisException:数据库“test_db”不存在。在 org.apache.spark.sql.internal.CatalogImpl.requireDatabaseExists(CatalogImpl.scala:44) 在 org.apache.spark.sql.internal.CatalogImpl.setCurrentDatabase(CatalogImpl.scala:64) 在 org.griffin_test.GriffinTest.ingestGriffinRe (GriffinTest.java:97) at org.griffin_test.GriffinTest.main(GriffinTest.java:65) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$2.run( ApplicationMaster.scala:635)
经过大量研究和博客中的许多建议,我尝试了以下修复但无济于事,我们仍然面临差异。
参考博客:
修复尝试:
- 在 spark-defaults.conf 和 SparkSession(代码)中启用 Hive 支持:
Hive 类位于 CLASSPATH 上,并将 spark.sql.catalogImplementation 内部配置属性设置为 hive:
Run Code Online (Sandbox Code Playgroud)spark.sql.catalogImplementation hive添加 Hive 元存储配置:
Run Code Online (Sandbox Code Playgroud).config("hive.metastore.connect.retries", 15) .config("hive.metastore.client.factory.class", "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory")
代码片段:
SparkSession spark = SparkSession.builder().appName("Test_Glue_Catalog")
.config("spark.sql.catalogImplementation", "hive")
.config("hive.metastore.connect.retries", 15)
.config("hive.metastore.client.factory.class","com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory")
.enableHiveSupport()
.getOrCreate();
Run Code Online (Sandbox Code Playgroud)
找出这种差异的根本原因的任何建议都会非常有帮助。
感谢你的帮助!谢谢!
| 归档时间: |
|
| 查看次数: |
6356 次 |
| 最近记录: |