Apache Hudi在AWS Glue和AWS EMR上同步元数据的异同

Posted bluishglc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache Hudi在AWS Glue和AWS EMR上同步元数据的异同相关的知识,希望对你有一定的参考价值。

继我们上篇文章《在AWS Glue中使用Apache Hudi》介绍了如何在Glue中同步Hudi元数据之后,本文我们再简短截说一下Hudi在EMR上的元数据同步。

首先,EMR对于元数据的存储提供两种方案:一是标准的Hive Metastore ,将元数据存储在一个外置关系型数据库上;二是使用Glue Catalog。显然,如果使用标准Hive Metastore,我们不必担心Hudi同步元数据有任何问题,需要我们确认的是在EMR使用Glue Catalog时,应该如何配置元数据同步。

先说结论:当EMR使用Glue Catalog时,Hudi依然可以正常同步元数据到Hive,不必做特殊配置,尤其是不必像在Glue中那样配置DataSourceWriteOptions.HIVE_USE_JDBC_OPT_KEY -> "false"。原因很简单,虽然EMR使用了Glue Catalog,但EMR上却有Glue上没有的HiveServer2服务,也就意味着Hudi可以通过JDBC与Glue Catalog交互。这背后的原因同样是因为EMR让HiveServer2使用AWSCatalogMetastoreClient与Glue Catalog交互,关于这一点,请参考《在AWS Glue中使用Apache Hudi》一文的 《3.4. 将Hudi元数据同步到Glue Catalog》

再延伸一下,如果我们在EMR中配置了DataSourceWriteOptions.HIVE_USE_JDBC_OPT_KEY -> "false"会怎样呢?在EMR 5上依然是可以正常工作的,只是同步方式从JDBC改为了由AWSCatalogMetastoreClient实现的IMetastoreClient,这与在Glue上使用Hudi的方式是一致的。但是,有一点要注意,在目前的EMR 6 + Hudi 0.7版本上,如果配置了DataSourceWriteOptions.HIVE_USE_JDBC_OPT_KEY -> "false",会报如下错误:

java.lang.ClassNotFoundException: org.apache.calcite.rel.type.RelDataTypeSystem

这是由于Hive3/Spark3移除了对于calcite包的依赖引起的,所以不建议在EMR上配置DataSourceWriteOptions.HIVE_USE_JDBC_OPT_KEY -> "false",这与Glue中的配置是完全相反的,因为Glue的Spark版本是2.4.3


关于作者:耿立超,架构师,15年IT系统开发和架构经验,对大数据、企业级应用架构、SaaS、分布式存储和领域驱动设计有丰富的实践经验,热衷函数式编程。对Hadoop/Spark 生态系统有深入和广泛的了解,参与过Hadoop商业发行版的开发,曾带领团队建设过数个完备的企业数据平台,个人技术博客:https://laurence.blog.csdn.net/ 作者著有《大数据平台架构与原型实现:数据中台建设实战》一书,该书已在京东和当当上线。

以上是关于Apache Hudi在AWS Glue和AWS EMR上同步元数据的异同的主要内容,如果未能解决你的问题,请参考以下文章

重磅!AWS升级对Apache Hudi的集成

双引号和逗号的 AWS Glue 问题

如何仅为 AWS Glue 脚本启用粘合日志记录

针对 AWS EMR 的 AWS Glue 定价

AWS Glue 布尔转换

使用 Python 在 AWS Glue 中打开和读取文件