修改 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://
的 Hive 元存储 URI。<host_name>
:9083 -
hive.metastore.response.spill.location
:当响应对象的大小超过给定阈值(例如 4 MB)时,用于存储响应对象的 Amazon S3 位置。阈值是在属性hive.metastore.response.spill.threshold
中定义的。建议不要更改默认值。
-
注意
这两个属性可以由 Lambda 环境变量
HMS_URIS
和SPILL_LOCATION
覆盖。当您希望将 Lambda 函数用于不同的 Hive 元数据仓或溢出位置时,请使用这些变量而不是重新编译该函数的源代码。 -
-
hms-lambda-layer
– 一个 Maven 程序集项目,用于将hms-service-api
、hms-lambda-handler
及其依赖关系放入一个.zip
文件中。此.zip
文件将注册为 Lambda 层以供多个 Lambda 函数使用。 -
hms-lambda-rnp
– 记录来自 Lambda 函数的响应,然后将其用于重播响应。您可以使用此模型来模拟 Lambda 响应以进行测试。
自行构建构件
修改源代码后,您可以自行构建构件并将其上载到 Amazon S3 位置。
在构建构件之前,请更新 hms-lambda-func
模块中 hms.properties
文件中的属性 hive.metastore.uris
和 hive.metastore.response.spill.location
。
要构建构件,您必须已安装 Apache Maven 并运行命令 mvn install
。这将在模块 hms-lambda-layer
中的名为 target
的输出文件夹中生成层 .zip
文件,并在模块 hms-lambd-func
中生成 Lambda 函数 .jar
文件。