修改 Athena 外部 Hive 元存储连接器 - Amazon Athena

修改 Athena 外部 Hive 元存储连接器

如果您有特殊要求,则可以修改外部 Hive 元存储的 Athena 连接器以供自己使用。Athena 为 GitHub.com(网址为 https://github.com/awslabs/aws-athena-hive-metastore)上的连接器提供参考实现。在大多数使用案例中,无需修改参考实施。但是,如有必要,您可以修改源代码并自行构建构件。

参考实施是一个具有以下模块的 Apache Maven 项目:

  • hms-service-api – 包含 Lambda 函数和 Athena 服务客户端之间的 API 操作。这些 API 操作是在 HiveMetaStoreService 接口中定义的。由于这是一个服务合同,因此,您不应更改此模块中的任何内容。

  • hms-lambda-handler – 一组默认 Lambda 处理程序,用于处理所有 Hive 元数据仓 API 调用。类 MetadataHandler 是用于所有 API 调用的调度程序。您无需更改此程序包。

  • hms-lambda-func – 一个具有以下组件的示例 Lambda 函数。

    • HiveMetaStoreLambdaFunc – 一个扩展 MetadataHandler 的示例 Lambda 函数。

    • ThriftHiveMetaStoreClient – 一个与 Hive 元存储进行通信的 Thrift 客户端。此客户端是针对 Hive 2.3.0 编写的。如果您使用其他 Hive 版本,则可能需要更新此类以确保响应对象可兼容。

    • ThriftHiveMetaStoreClientFactory – 控制 Lambda 函数的行为。例如,您可以通过覆盖 getHandlerProvider() 方法来提供自己的一组处理程序提供程序。

    • hms.properties – 配置 Lambda 函数。在大多数情况下,只需更新以下两个属性。

      • hive.metastore.uris – 格式为 thrift://<host_name>:9083 的 Hive 元存储 URI。

      • hive.metastore.response.spill.location:当响应对象的大小超过给定阈值(例如 4 MB)时,用于存储响应对象的 Amazon S3 位置。阈值是在属性 hive.metastore.response.spill.threshold 中定义的。建议不要更改默认值。

    注意

    这两个属性可以由 Lambda 环境变量 HMS_URISSPILL_LOCATION 覆盖。当您希望将 Lambda 函数用于不同的 Hive 元数据仓或溢出位置时,请使用这些变量而不是重新编译该函数的源代码。

  • hms-lambda-layer – 一个 Maven 程序集项目,用于将 hms-service-apihms-lambda-handler 及其依赖关系放入一个 .zip 文件中。此 .zip 文件将注册为 Lambda 层以供多个 Lambda 函数使用。

  • hms-lambda-rnp – 记录来自 Lambda 函数的响应,然后将其用于重播响应。您可以使用此模型来模拟 Lambda 响应以进行测试。

自行构建构件

修改源代码后,您可以自行构建构件并将其上载到 Amazon S3 位置。

在构建构件之前,请更新 hms-lambda-func 模块中 hms.properties 文件中的属性 hive.metastore.urishive.metastore.response.spill.location

要构建构件,您必须已安装 Apache Maven 并运行命令 mvn install。这将在模块 hms-lambda-layer 中的名为 target 的输出文件夹中生成层 .zip 文件,并在模块 hms-lambd-func 中生成 Lambda 函数 .jar 文件。