本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 S3 Select Pushdown 搭配 Presto 以提升效能
重要
Amazon S3 Select 不再提供給新客戶。Amazon S3 Select 的現有客戶可以繼續照常使用此功能。進一步了解
在 Amazon EMR 發行版本 5.18.0 及更高版本中,您可以將 S3 SelectSELECT
) 和述詞操作 (例如 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。
-
Amazon S3 Select 不支援 Presto 和 Trino 的跨區域查詢。
啟用 S3 Select Pushdown 搭配 Presto 或 Trino
若要針對 Amazon EMR 上的 PrestoDB 啟用 S3 Select Pushdown,請使用 presto-connector-hive
組態分類將 hive.s3select-pushdown.enabled
設為 true
,如以下範例所示。如需詳細資訊,請參閱設定應用程式。hive.s3select-pushdown.max-connections 值也必須設定。對於大多數應用程式,
的預設設定應當足夠。如需詳細資訊,請參閱下面的了解和調校 hive.s3select-pushdown.max-connections。500
對於 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-connections
和 fs.s3.maxConnections
的值。