本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
修改 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
— 處理所有 Hive 中繼存放區API呼叫的一組預設 Lambda 處理常式。類別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
— 在格thrift://
式URI的蜂巢中繼存儲.<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
檔案。