本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
修改 Athena 外部 Hive 中繼存放區連接器
如果您有特殊需求,您可以修改外部 Hive 中繼存放區的 Athena 連接器,以供自己使用。Athena 提供 GitHub.com 上連接器的參考實作,網址為 https://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– Lambda 函數擴展MetadataHandler的範例。 -
ThriftHiveMetaStoreClient– 與 Hive 中繼存放區通訊的 Thrift 用戶端。此用戶端是為 Hive 2.3.0 編寫的。如果您使用不同的 Hive 版本,可能需要更新這個類別,以確保回應物件是相容的。 -
ThriftHiveMetaStoreClientFactory– 控制 Lambda 函數的行為。例如,您可以透過覆寫getHandlerProvider()方法來提供自己的一組處理常式提供者。 -
hms.properties– 設定 Lambda 函數。大多數情況下只需要更新下列兩個屬性。-
hive.metastore.uris– Hive 中繼存放區的 URI,格式為thrift://。<host_name>:9083 -
hive.metastore.response.spill.location:當回應物件的大小超過指定的閾值 (例如 4 MB) 時,儲存回應物件的 Amazon S3 位置。閾值定義於hive.metastore.response.spill.threshold屬性中。不建議變更預設值。
-
注意
這兩個屬性可由 Lambda 環境變數
HMS_URIS和SPILL_LOCATION覆寫。當您想要使用具有不同 Hive 中繼存放區或溢出位置的函數時,請使用這些變數,而不要重新編譯 Lambda 函數的來源程式碼。 -
-
hms-lambda-layer– 將hms-service-api、hms-lambda-handler和其依存項目放入.zip檔案中的 Maven 組合專案。.zip檔案會註冊為 Lambda 層,以供多個 Lambda 函數使用。 -
hms-lambda-rnp– 記錄來自 Lambda 函數的回應,然後使用其重播回應。您可以使用此模型來模擬 Lambda 回應以進行測試。
自行建置成品
修改原始程式碼之後,您可以自行建置成品,並將其上傳至 Amazon S3 位置。
在建置成品之前,請先更新 hms-lambda-func 模組中 hive.metastore.response.spill.location 檔案內的屬性 hive.metastore.uris 和 hms.properties。
要建置成品,您必須安裝 Apache Maven 並執行命令 mvn install。如此會在模組 hms-lambda-layer 中名為 target 的輸出資料夾中產生層 .zip 檔案,以及在 hms-lambd-func 模組中產生 Lambda 函數 .jar 檔案。