使用 S3 Select Pushdown 搭配 Presto 以提升效能 - Amazon EMR

使用 S3 Select Pushdown 搭配 Presto 以提升效能

在 Amazon EMR 發行版本 5.18.0 及更高版本中,您可以將 S3 Select 與 Presto on Amazon EMR 搭配使用。此功能可讓 Presto 將投影操作 (例如 SELECT) 和述詞操作 (例如 WHERE) 的運算工作「下推」至 Amazon S3。這可讓查詢僅從 Amazon S3 擷取所需的資料,因而提升效能並減少某些應用程式中在 Amazon EMR 和 Amazon S3 之間傳輸的資料量。

S3 Select Pushdown 是否適合我的應用程式?

建議您使用和不使用 S3 Select Pushdown 對應用程式進行基準分析,確認其是否適用於您的應用程式。

利用下列的準則,來判斷您的應用程式是否可能使用 S3 Select:

  • 您的查詢會篩選掉原始資料集一半以上的資料。

  • 您的查詢篩選條件述詞使用之欄具有 Presto 和 S3 Select 支援的資料類型。S3 Select Pushdown 不支援時間戳記、實際和雙精確度資料類型。針對數值資料,建議使用小數資料類型。如需有關受 S3 Select 支援之資料類型的詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的資料類型

  • Amazon S3 與 Amazon EMR 叢集之間的網路連線具有良好的傳輸速度和可用頻寬。Amazon S3 不會壓縮 HTTP 回應,因此所壓縮輸入檔案的回應大小可能會增加。

考量與限制

  • 僅支援以 CSV 格式存放的物件。物件可以未壓縮或選擇以 gzip 或 bzip2 壓縮。

  • 不支援 AllowQuotedRecordDelimiters 屬性。如果指定此屬性,查詢會失敗。

  • 不支援使用客戶所提供加密金鑰 (SSE-C) 的 Amazon S3 伺服器端加密,也不支援用戶端加密。

  • S3 Select Pushdown 不能取代單欄或壓縮檔案格式,例如 ORC 或 Parquet。

啟用 S3 Select Pushdown 搭配 Presto 或 Trino

若要針對 Amazon EMR 上的 PrestoDB 啟用 S3 Select Pushdown,請使用 presto-connector-hive 組態分類將 hive.s3select-pushdown.enabled 設為 true,如以下範例所示。如需更多詳細資訊,請參閱 設定應用程式。hive.s3select-pushdown.max-connections 值也必須設定。對於大多數應用程式,500 的預設設定應當足夠。如需詳細資訊,請參閱下面的了解和調校 hive.s3select-pushdown.max-connections

對於 PrestoSQL on EMR 版本 6.1.0 - 6.3.0,使用 prestosql-connector-hive 取代以下範例中的 presto-connector-hive

Amazon EMR 版本 6.4.0 及更高版本使用新名稱 Trino,而非 PrestoSQL。如果您使用 Trino,請使用 trino-connector-hive 取代以下範例中的 presto-connector-hive

[ { "classification": "presto-connector-hive", "properties": { "hive.s3select-pushdown.enabled": "true", "hive.s3select-pushdown.max-connections": "500" } } ]

了解和調校 hive.s3select-pushdown.max-connections

根據預設,Presto 使用 EMRFS 做為其檔案系統。emrfs-site 組態分類中的設定 fs.s3.maxConnections 會指定透過適用於 Presto 之 EMRFS 連線至 Amazon S3 的允許用戶端數量上限。根據預設,此為 500。針對述詞操作存取 Amazon S3 時,S3 Select Pushdown 會略過 EMRFS。在此情況下,hive.s3select-pushdown.max-connections 的值會決定允許從工作者節點執行這些操作的用戶端連線數量上限。然而,由 Presto 向 Amazon S3 發出而未下推的請求,例如 GET 操作,仍取決於 fs.s3.maxConnections 之值。

如果您的應用程式發生「等待集區連線已逾時」錯誤,請增加 hive.s3select-pushdown.max-connectionsfs.s3.maxConnections 的值。