参考实施 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

参考实施

Athena 提供 GitHub.com 上的外部 Hive 元存储连接器的参考实施,网址为: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-layer— 一个 Maven 汇编项目,将hms-service-apihms-lambda-handler,并且它们的依赖关系到.zip文件。这些区域有:.zip文件注册为 Lambda 图层以供多个 Lambda 函数使用。

  • hms-lambda-func— Lambda 函数示例,该函数具有以下组件。

    • HiveMetaStoreLambdaFunc— 扩展 Lambda 函数的示例 Lambda 函数MetadataHandler

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

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

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

      • hive.metastore.uris— 格式为的 Hive 元存储 URIthrift://<host_name>:9083

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

    注意

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

自行构建构件

在大多数使用案例中,无需修改参考实施。但是,如有必要,您可以修改源代码、自行构建构件并将其上传到 Amazon S3 位置。

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

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