開啟native查詢加速
JindoTable提供Native Engine,支援查詢加速。系統預設不開啟加速,開啟之後可以提升在Spark、Hive或Presto上ORC或Parquet格式檔案的查詢速度。
前提條件
已建立EMR-3.35.0及後續版本或EMR-4.9.0及後續版本,且ORC或Parquet檔案已存放至JindoFS或OSS,建立叢集詳情請參見建立叢集。
背景資訊
Spark、Hive和Presto上服務支援的引擎和儲存格式如下。
|
引擎 |
ORC |
Parquet |
|
Spark2 |
支援 |
支援 |
|
Presto |
支援 |
不支援 |
|
Hive2 |
不支援 |
支援 |
使用限制
-
不支援Binary類型。
-
不支援分區列儲存在檔案中的分區表。
-
不支援EMR 5.X及後續版本的EMR叢集。
-
不支援代碼spark.read.schema(userDefinedSchema),userDefinedSchema不同於檔案schema issue。
-
支援Date類型區間為1400-01-01到9999-12-31。
-
同一個表中查詢列不支援區分大小寫。例如,NAME和name兩個列在同一個表中無法使用查詢加速。
提升Spark效能
-
開啟JindoTable ORC或Parquet加速。
說明-
因為查詢加速使用的是堆外記憶體,所以在Spark任務中建議添加配置
--conf spark.executor.memoryOverhead=4g提高Spark申請額外資源用來進行加速。 -
Spark調用讀取ORC或Parquet時,需要使用native來啟用加速。
-
全域設定
詳細請參見全域設定Spark。
-
Job層級設定
使用spark-shell或者spark-sql時可以添加Spark的啟動參數。
spark.sql.extensions==io.delta.sql.DeltaSparkSessionExtension,com.aliyun.emr.sql.JindoTableExtension作業詳情請參見Spark Shell作業配置或Spark SQL作業配置。
-
-
檢查開啟情況。
-
登入Spark History Server UI頁面。
-
在Spark的SQL頁面,查看執行任務。
當出現JindoDataSourceV2Scan時,表示開啟成功。否則,請排查步驟1中的操作。在 Spark SQL 頁面的 Details for Query 10 中,查詢耗時 2.3 min。DAG 執行計畫顯示 JindoDataSourceV2Scan 節點掃描了 15.6 GB 資料,讀取約 140 億行(read output rows 14,076,201,649),經過過濾後剩餘約 27 億行(filtered output rows 2,718,064,652),涉及 4,722 個分區;資料經 Project 節點流向 HashAggregate 節點,最終彙總輸出 4,722 行。
-
提升Presto效能
因為Presto已經內建JindoTable native加速的catalog: hive-acc,所以您可以直接使用catalog: hive-acc來啟用查詢加速。
樣本如下。
presto --server emr-header-1:9090 --catalog hive-acc --schema default
目前使用Presto查詢加速功能時,暫不支援複雜資料類型,例如Map、Struct或Array。
提升Hive效能
如果您對作業穩定性要求較高時,建議不要開啟native查詢加速。
因為EMR Hive 2.3.7(EMR-3.35.0)已經內建JindoTable Parquet加速的外掛程式,所以您可以直接設定hive.jindotable.native.enabled來啟用查詢加速,或者可以在控制台配置頁面的hive-site.xml頁簽,添加自訂參數hive.jindotable.native.enabled為true,來開啟查詢加速並重啟Hive,此方式適用於Hive on MR和Hive on Tez。
程式碼範例如下。
set hive.jindotable.native.enabled=true;
目前使用Hive查詢加速功能時,暫不支援複雜資料類型,例如Map、Struct或Array。
全域設定Spark
-
進入Spark頁面。
-
在頂部功能表列處,根據實際情況選擇地區和資源群組。
-
單擊上方的集群管理頁簽。
-
在集群管理頁面,單擊相應叢集所在行的详情。
-
在左側導覽列,選擇。
-
在Spark服務頁面,單擊配置頁簽。
-
搜尋參數spark.sql.extensions,修改參數值為io.delta.sql.DeltaSparkSessionExtension,com.aliyun.emr.sql.JindoTableExtension。
-
儲存配置。
-
單擊保存。
-
在确认修改對話方塊中,輸入执行原因,單擊确定。
-
-
重啟ThriftServer。
-
在右上方選擇。
-
在執行叢集操作對話方塊中,輸入执行原因,單擊确定。
-
在确认對話方塊中,單擊确定。
-