在 Hudi 上使用 Amazon EMR 的注意事项和限制 - Amazon EMR
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 Hudi 上使用 Amazon EMR 的注意事项和限制

  • 记录键字段不能为 Null 或空 – 您指定为记录键字段的字段不能具有 null 或空值。

  • 在更新插入时默认更新 架构– Hudi 提供一个接口 HoodieRecordPayload,该接口确定如何将输入 DataFrame 和现有 Hudi 数据集合并以生成新的、更新的数据集。Hudi 提供该类 OverwriteWithLatestAvroPayload 的默认实现,该实现将覆盖现有记录并按照输入 DataFrame 中指定的方式更新架构。 要自定义此逻辑以实现合并和部分更新,您可以使用 HoodieRecordPayload 参数提供 DataSourceWriteOptions.PAYLOAD_CLASS_OPT_KEY 接口的实现。

  • 删除需要架构 – 删除时,必须指定记录键、分区键和预组合键字段。其他列可以成为 null 或空,但需要完整的架构。

  • 表限制MoR – 表不支持保存点。MoR您可以使用读取优化的视图或者 Spark SQL、Presto 或 Hive 中的实时视图 (MoR) 查询 tablename_rt 表。使用读取优化的视图只会公开基本文件数据,而不会公开基本和日志数据的合并视图。

  • Hive

    • 要在 Hive 元存储中注册表,Hudi 需要 Hive Thrift 服务器在默认端口 10000 上运行。 如果您使用自定义端口覆盖此端口,请传递 HIVE_URL_OPT_KEY 选项,如以下示例所示。

      .option(DataSourceWriteOptions.HIVE_URL_OPT_KEY, "jdbc:hive2://localhost:override-port-number
    • Spark 中的 timestamp 数据类型在 Hive 中注册为 long 数据类型,而不注册为 Hive 的 timestamp 类型。

  • Presto

    • Presto 不支持在低于 0.6.0 的 Hudi 版本中读取 MoR 实时表。

    • Presto 仅支持快照查询。

    • 要使 Presto 正确解释 Hudi 数据集列,请将 hive.parquet_use_column_names 值设置为 true.

      • 要设置会话的值,请在 Presto shell 中运行以下命令:

        set session hive.parquet_use_column_names=true
      • 要在集群级别设置值,请使用 presto-connector-hive 配置分类将 hive.parquet.use_column_names 设置为 true,如以下示例所示。有关更多信息,请参阅 配置应用程序.

        [ { "Classification": "presto-connector-hive", "Properties": { "hive.parquet.use-column-names": "true" } } ]
  • HBase 索引

    • 用于HBase构建 版本 Hudi 可能与 EMR 版本指南中列出的版本不同。要拉入 Spark 会话的正确依赖项,请运行以下命令。

      spark-shell \ --jars /usr/lib/spark/external/lib/spark-avro.jar,/usr/lib/hudi/cli/lib/*.jar \ --conf "spark.serializer=org.apache.spark.serializer.KryoSerializer" \ --conf "spark.sql.hive.convertMetastoreParquet=false"