修改 Athena 外部 Hive 中繼存放區連接器 - Amazon Athena

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

修改 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://<host_name>:9083式URI的蜂巢中繼存儲.

      • hive.metastore.response.spill.location:當回應物件的大小超過指定的閾值 (例如 4 MB) 時,儲存回應物件的 Amazon S3 位置。閾值定義於 hive.metastore.response.spill.threshold 屬性中。不建議變更預設值。

    注意

    這兩個屬性可由 Lambda 環境變數 HMS_URISSPILL_LOCATION 覆寫。當您想要使用具有不同 Hive 中繼存放區或溢出位置的函數時,請使用這些變數,而不要重新編譯 Lambda 函數的來源程式碼。

  • hms-lambda-layer – 將 hms-service-apihms-lambda-handler 和其依存項目放入 .zip 檔案中的 Maven 組合專案。.zip 檔案會註冊為 Lambda 層,以供多個 Lambda 函數使用。

  • hms-lambda-rnp – 記錄來自 Lambda 函數的回應,然後使用其重播回應。您可以使用此模型來模擬 Lambda 回應以進行測試。

自行建置成品

修改原始程式碼後,您可以自行建立成品並將其上傳到 Amazon S3 位置。

在建置成品之前,請先更新 hms-lambda-func 模組中 hive.metastore.response.spill.location 檔案內的屬性 hive.metastore.urishms.properties

要建置成品,您必須安裝 Apache Maven 並執行命令 mvn install。如此會在模組 hms-lambda-layer 中名為 target 的輸出資料夾中產生層 .zip 檔案,以及在 hms-lambd-func 模組中產生 Lambda 函數 .jar 檔案。