全部產品
Search
文件中心

E-MapReduce:常見問題

更新時間:Oct 12, 2024

本文介紹使用Trino時的常見問題。

Trino與Presto的區別與聯絡是什嗎?

Trino的前身是PrestoSQL,是Presto的創始人團隊從Facebook脫離之後成立的商業公司Starburst旗下的開源產品,於2021年正式更名為Trino。相應的,Presto依然由Facebook負責維護,一般被稱為PrestoDB。在分離之後,二者具有不同的發展方向。但是基本文法和使用方式相似。

EMR-3.44.0和EMR-5.10.0版本開始改用社區正式名稱Trino,之前各版本控制台顯示為Presto,核心其實是Trino,使用時請注意區分。

Trino的各個版本有什麼區別?

Trino各個版本的內容變化,可參見Trino官方更新日誌。Trino的效能表現隨著版本更新存在一些最佳化,因此建議您盡量選擇較新版本。

Trino在EMR上的部署形態是什麼樣的?是否支援高可用?

Trino具有標準的M/S架構,其Coordinator部署在master-1-1節點上;Worker部署在所有Core或Task節點上。

Trino目前不支援高可用。在高可用叢集上,Trino僅在master-1-1節點上部署Coordinator。在建立叢集時,如果您不需要混合部署Hadoop,只選用Trino服務即可。

重要

如果您不需要混合部署Hadoop,請注意不要開啟高可用開關,避免造成浪費。

Trino如何串連DLF?開啟了DLF後是否還能串連MetaStore?預設提供的連接器不夠用怎麼辦?

3.45.0之前版本和5.11.0之前版本的DataLake叢集,如果建立叢集時選中了Hive服務,且選擇了DLF中繼資料,hive、iceberg、hudi、delta lake等連接器將直接指向DLF,可直接使用;如果叢集中不包含Hive服務,可參見配置資料湖中繼資料自行配置。3.45.0及之後版本和5.11.0及之後版本的DataLake叢集可在建立Trino叢集時選擇DLF中繼資料。

對於開啟了DLF之後的叢集,預設的hive等連接器將無法訪問MetaStore。如果您有配置多Hive MetaStore、多MySQL的需求,或預設提供的連接器不包含您想要使用的服務時,您可以使用EMR Trino提供的5個佔位連接器,即connector1~connector5,您可以選擇其中任意一個,將其connector.name配置為hive或您所需要的連接器,再參考相應連接器的文檔增添其他配置項,指向所需的服務地址。

Trino如何訪問OSS?是否支援OSS-HDFS?

EMR預設安裝了Jindo SDK,且支援免密。您可以使用OSS的標準存取方法直接存取OSS,也可查詢儲存於OSS上的Hive表。

EMR Trino支援OSS-HDFS。

如何訪問Trino UI?如何理解Trino UI?

如果您的叢集安裝了Knox服務,可以使用Knox連結訪問Trino UI,詳情請參見Knox

如果您的叢集不包含Knox,可以使用公網連結,即訪問{公網IP:HTTP連接埠}進入UI。其中,HTTP連接埠可從http-server.http.port配置中擷取,預設為9090。如果無法進入,請確認9090連接埠的安全性群組已開放。

如果您的叢集啟用了高安全模式,預設的HTTP連接埠將無法使用。在確保網路許可權的前提下,若需訪問UI介面,請在Master節點群組的config.properties檔案中增加以下配置,然後使用原有方法進入UI介面。

web-ui.authentication.type=fixed
web-ui.user=trino

從Trino的UI中,可以擷取到Trino最近執行的查詢資訊,包括SQL語句、執行計畫等。Trino只會儲存最近的不超過200條的查詢,執行結果正常的查詢很快就會被新的查詢覆蓋;異常的查詢資訊會保留的更久一些。可調整query.max-history配置(預設為100)以增加儲存的SQL數量。

建立叢集時沒有選擇Trino,想要添加Trino,需要注意什嗎?

  • 對於DataLake叢集,在叢集剩餘資源可以滿足Trino使用時,直接添加即可。

  • 對於Hadoop叢集,需要確認叢集是否有某些服務做過手動升級處理。如果存在這種情況,Trino建立完成後可能報錯,此時可按照以下方式處理:

    • JindoSDK單獨進行過升級時,尤其是進行過跨大版本的更新時,需重新執行Presto或Trino相關的升級指令碼,手動將升級後的JindoSDK複製到Trino安裝路徑的對應連接器下。

    • 對於EMR-3.39.1版本,請查看服務日誌,其內容通常為找不到Delta相關的某個類。此時需要手動在各個節點下,將/opt/apps/ecm/service/deltalake/0.6.1-3.3/package/deltalake-0.6.1-3.3/presto-delta/delta-standalone-assembly-0.2.0.jar複製到/usr/lib/presto-current/plugin/delta路徑下。

為什麼我修改的配置沒有生效?

Trino的設定檔位於/etc/emr/trino-conf中,請確認機器上的設定檔是否正確反映了控制台上的變化,是否有之前新增或修改的內容:

  • 設定檔中沒有之前新增或修改的內容:需要確認修改的配置是否進行了儲存、是否執行了部署、配置修改範圍是否符合需求。

    重要

    如果某配置項單獨修改過節點群組或單個節點的配置,對應的叢集預設配置將不再起作用。

  • 設定檔中有之前新增或修改的內容:如果節點上的設定檔已經變成修改後的,請確認Trino的所有節點是否執行了重啟,Trino必須在執行重啟之後才會載入配置。

為什麼我在查詢卡住了?為什麼我的Worker節點掛掉了?

如果發現報錯資訊為:Could not communicate with the remote task. The node may have crashed or be under too much load. This is probably a transient issue, so please retry your query in a few minutes. No handle resolver for connector: hive ... Unrecognized token 'io': was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false'),表示Worker節點負載太高已無法提供服務或Worker節點出現了自動重啟。可能是某個Worker上的進程被系統終止,需要根據實際情況調整配置,尤其是記憶體相關配置,或限制並發請求數。

如何查看Trino日誌?

Trino的記錄檔預設儲存在/mnt/disk1/log/trino/var/log/路徑下。其中,輸出及異常堆棧資訊均在server.log檔案中。

如果僅想查看某個查詢的報錯詳情。可以在進入client時添加--debug命令,此時即可列印異常堆棧。

Trino的Coordinator和Worker之間通過HTTP協議通訊,當Coordinator節點出現HTTP返回異常時,說明報錯可能出現在某台Worker節點上。此時,如果沒有其他明顯的異常資訊,您需要逐一排查各Worker節點。

為什麼查詢不到資料或查詢失敗?

請按照以下方式排查:

  1. 使用Hive、Spark等其他引擎訪問或查詢資料。如果不能訪問,需要確認資料來源是否連通、資料是否完好。

  2. 如果僅Trino無法訪問或無法執行查詢,需要檢查配置的中繼資料資訊是否正確。

  3. 如果中繼資料正常,但查詢一個有資料的表的結果為空白,需要先檢查您是否有資料存取權限。

    • 如果資料所在的HDFS開啟了proxyuser,Trino也需要開啟hive.hdfs.impersonation.enabled配置。

    • 如果開啟了Ranger,請確認Ranger許可權配置是否正確。

    • 如果叢集進行過擴容等操作,需要檢查新增的節點群組或節點是否具有訪問相應檔案的許可權或能力。

為什麼查詢Hudi或Delta表時列的順序錯了?

需要檢查Trino的hive.properties中的hive.parquet.use-columns-names配置項是否已置為true。

為什麼新增一個配置後,重啟Trino失敗?

如果Server.log中包含了Error: Configuration property 'xxxxx' was not used,則說明您新增配置的位置不正確,或缺乏必要的前置配置。Trino對配置項的校正非常嚴格,如果新增的配置不存在、配置寫錯,或配錯檔案,都會導致配置無法識別,Trino無法啟動,所以請您仔細檢查新增的配置是否正確,或進行復原操作。

為什麼使用Hive連接器查詢Iceberg、Hudi或Delta Lake表時會報錯Cannot query xxx table

針對Iceberg、Hudi和Delta Lake,Trino分別提供了單獨的連接器。建議您使用各自的獨立連接器來執行查詢。如果您的作業必須使用Hive連接器,請使用提供的Table Redirection功能將查詢轉寄到相應的獨立連接器上。

例如,通過設定以下參數,您可以在Trino中配置Hive連接器,使其能夠正確地使用相應的連接器來查詢Iceberg、Delta Lake和Hudi表。

hive.iceberg-catalog-name=iceberg
hive.delta-lake-catalog-name=delta-lake
hive.hudi-catalog-name=hudi