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中的操作。
提升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。
在右上方選擇 。
在執行叢集操作對話方塊中,輸入執行原因,單擊確定。
在確認對話方塊中,單擊確定。