AWS announces preview of AWS Interconnect - multicloud
AWS announces AWS Interconnect – multicloud (preview), providing simple, resilient, high-speed private connections to other cloud service providers. AWS Interconnect - multicloud is easy to configure and provides high-speed, resilient connectivity with dedicated bandwidth, enabling customers to interconnect AWS networking services such as AWS Transit Gateway, AWS Cloud WAN, and Amazon VPC to other cloud service providers with ease.
我該如何解決 "HIVE_CANNOT_OPEN_SPLIT" Athena 查詢錯誤?
我的 Amazon Athena 查詢失敗,並出現 "HIVE_CANNOT_OPEN_SPLIT" 錯誤。
簡短描述
Amazon Simple Storage Service (Amazon S3) 儲存貯體每秒每個前置詞僅支援 3,500 個 PUT/COPY/POST/DELETE 或 5,500 個 GET/HEAD 請求。此硬性限制適用於 AWS 帳戶所有使用者與服務。
根據預設,Amazon S3 會自動擴展以支援高請求速率。當您的請求速率提高時,S3 儲存貯體會自動分割以支援更高的請求速率。但是,如果超過請求臨界值,則會收到「5xx 速率減緩」錯誤。
例如,您可以在其中包含 10,000 個檔案的前置詞執行 Athena 查詢。Athena 使用 GET/HEAD 請求嘗試同時讀取所有 10,000 個文件。但是,由於前置詞每秒最多只支持 5,500 個 GET/HEAD 請求,因此您的 S3 請求會受到節流,並且您會收到「5xx 速率減緩」錯誤。
解決方法
使用以下一或多種方法可避免請求遭到節流。
在多個前置詞之間分配 S3 物件和請求
為了協助您在多個前置詞上分配物件和請求,請分割資料。請勿將大量檔案儲存在單一 S3 前置詞下。正確方法是使用多個前置詞將 S3 物件分配到這些前置詞。如需詳細資訊,請參閱 Partitioning data in Athena。
例如,請勿將所有檔案儲存在 s3://my-athena-bucket/my-athena-data-files 下,正確方法是分割資料,並將其儲存在以下的個別前置詞下:
s3://my-athena-bucket/jan
s3://my-athena-bucket/feb
s3://my-athena-bucket/mar
您可以進一步分割這些檔案中的資料,以增加物件的分佈,例如 s3://my-athena-bucket/jan/01。
減少每個前置詞中的檔案數
當您查詢具有大量小型物件的 S3 儲存貯體時,則可能會收到 "HIVE_CANNOT_OPEN_SPLIT" 錯誤。例如,如果 S3 儲存貯體中有一個 100 MB 檔案,則 Athena 必須提出一個 GET 請求才能讀取檔案。然而,如果 1,000 個檔案中每個檔案都是 100 KB,則 Athena 必須提出 1,000 個 GET 請求,才能讀取相同的 100 MB 資料。這樣一來,請求就會超過 S3 請求限制。
若要減少 Amazon S3 請求數量,請減少檔案數量。例如,使用 S3DistCp 工具將大量的小型檔案 (小於 128 MB) 合併為數量較少的大型檔案。如需詳細資訊,請參閱 Top 10 performance tuning tips for Amazon Athena 中的 Optimize file sizes 一節。
範例命令:
s3-dist-cp --src=s3://my_athena_bucket_source/smallfiles/ --dest=s3://my_athena_bucket_target/largefiles/ --groupBy='.*(.csv)'
**注意:**在上述命令中,將 my_athena_bucket_source 替換為小型檔案所在的來源 S3 儲存貯體。另外,將 my_athena_bucket_target 替換為儲存輸出的目標 S3 儲存貯體。
若要最佳化查詢效能和成本,請使用 groupBy 選項將小型檔案彙總為數量較少的大型檔案。
注意: S3DistCp 不支援 Apache Parquet 檔案的串連,請改用 PySpark。如需詳細資訊,請參閱 如何在 Amazon EMR 中連接 Parquet 檔案?
檢查 S3 儲存貯體是否已啟用版本控制
當您從使用版本控制的 S3 儲存貯體中刪除物件時,Amazon S3 不會永久移除該物件。Amazon S3 會改為插入刪除標記。如果 S3 儲存貯體中的許多檔案具有刪除標記,則可能會收到 "HIVE_CANNOT_OPEN_SPLIT" 錯誤。當您在啟用版本控制功能的儲存貯體上執行查詢時,Athena 必須檢查每個物件的不同版本。然後,在系統處理查詢時,Athena 會決定是否包含特定物件。
若要解決此問題,請從 S3 儲存貯體移除刪除標記。若要移除刪除標記,請執行下列其中一個動作:
- 手動刪除刪除標記。使用 ListObjectVersions API 列出 S3 儲存貯體中所有物件版本的中繼資料。從中繼資料中尋找物件的 versionId,然後永久移除刪除標記。
- 設定生命週期組態以刪除刪除標記。使用 S3 生命週期規則來定義您希望 Amazon S3 針對物件的生命週期所採取的動作。
檢查其他應用程式是否使用相同的 S3 前置詞
使用 Amazon CloudWatch 5xxErrors 指標和 S3 伺服器存取記錄,檢查您執行 Athena 查詢時,其他應用程式是否使用相同的 S3 前置詞。如果有多個應用程序嘗試從相同 S3 前置詞讀取資料,則可能會導致請求遭到節流。請勿排程同時存取相同前置詞的應用程式。此外,請將不同的 S3 前置詞用於 Athena 資料來源和應用程式資料來源。
為 S3 儲存貯體中的所有物件建立 CloudWatch 指標組態。您可以使用這些指標在特定時間點監控特定前置詞的 API 呼叫率指標。啟用前置詞的 S3 請求測量結果,以了解前置詞在特定時間點的整體 API 呼叫率。您可以將此資訊與 S3 伺服器存取日誌搭配使用,找出將 API 呼叫用於前置詞的應用程式。
若要在單一分區中分割資料,您還可以使用儲存貯體來儲存資料。如需詳細資訊,請參閱 What is bucketing?
相關資訊
相關內容
- 已提問 6 個月前
- 已提問 2 年前

