修改 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 文件。