阿里雲E-MapReduce產品構建於阿里雲Elastic Compute Service上,基於開源的Apache Hadoop和Apache Spark,做了大量最佳化。本文為您介紹E-MapReduce(簡稱EMR)Spark相對開源增強功能。
背景資訊
阿里雲EMR 100%採用社區開源組件,隨開源版本升級迭代,基於開源組件,最佳化和增強阿里雲部署環境。
功能增強
Spark針對開源功能增強功能如下表。
EMR-5.x系列
EMR版本 | 組件版本 | 功能增強 |
EMR-5.17.0 | Spark 3.4.2 | Spark3升級至3.4.2版本。 |
EMR-5.16.0 | Spark 3.3.1 | 修複了Commons Text漏洞。 |
EMR-5.15.1 | Spark 3.3.1 | 移除了hive-site.xml中與jdo相關的配置。 |
EMR-5.12.1 | Spark 3.3.1 | |
EMR-5.10.0 | Spark 3.3.1 | 升級至3.3.1版本。 |
EMR-5.9.0 | Spark 3.3.0 | 升級至3.3版本。 支援開啟Kerberos身份認證。
|
EMR-5.8.0 | Spark 3.2.1 | 支援一鍵對接LDAP。 |
EMR-5.6.0 | Spark 3.2.1 | 升級至3.2.1版本。 |
EMR-5.5.0 | Spark 3.2.0 | COUNT DISTINCT函數支援IF語句以及最佳化Case when的用法。 設定參數spark.sql.optimizer.rewriteConditionalDistinctAggregates為true。 Shuffle Hash Join支援fallback到Sort Merge Join。 設定參數spark.sql.join.preferSortMergeJoin為false,設定參數spark.sql.join.enableShuffledHashJoinFallback為true。 支援非動態分區自動合并小檔案。 設定spark.sql.adaptive.merge.output.small.files.enabled參數為true。 GroupingSet以及Distinct等情境會自動調整並發度。 設定參數spark.sql.execution.optimizeExpand為true。 最佳化了Hive on Spark。 支援Time Travel文法。 適配JindoSDK。
|
EMR-5.4.0 | Spark 3.1.2 | |
EMR-5.3.0 | Spark 3.1.1 | 修複了與Delta Lake相容性的問題。 |
EMR-5.2.1 | Spark 3.1.1 |
重要 EMR-5.2.1版本的Spark(3.1.1)與Kudu(1.11.1)不相容。 支援資料湖格式Delta Lake和Hudi。 支援Remote Shuffle Service。 支援Livy 。 最佳化E-MapReduce控制台上,Spark服務配置頁面的spark-defaults頁簽的配置項名稱。 最佳化CBO(Cost-Based Optimization)、DPP(DynamicPartitionPruning)以及Z-Order等功能,效能比開源Spark 3版本提升50%。 支援阿里雲Log Service、DataHub和訊息佇列RocketMQ版(簡稱ONS)等資料來源。
|
EMR-4.x系列
EMR版本 | 組件版本 | 功能增強 |
EMR-4.10.0 | Spark 2.4.8 | 升級至2.4.8版本。 修複了Adaptive Execution部分情境無法生效的問題。 修複了統計彙總函式行為和Hive不一致的問題。 修複了讀取Hive ORC表char類型資料正確性問題。 最佳化了Thriftserver的預設配置。 最佳化E-MapReduce控制台上,Spark服務配置頁面的spark-defaults頁簽的配置項名稱。 最佳化了Hive on Spark。 修複了AQE在Stats缺失情況下數組越界的問題。 修複了AQE和Cache在特定情境下報錯的問題。 移除了無效配置Log4j MetricsAppender。 修複了SparkContext啟動過程中null 指標異常的問題。 支援ZSTD(Zstandard)壓縮格式。
|
EMR-4.9.0 | Spark 2.4.7 | |
EMR-4.8.0 | Spark 2.4.7 | 最佳化了部分預設配置。 效能最佳化:支援Window TopK下推。 增強Hive讀寫CSV或JSON表的相容性。 ANALYZE語句支援省略全表列名。 支援一鍵開啟或關閉LDAP功能。 改進Spark Beeline工具的易用性。
|
EMR-4.6.0 | Spark 2.4.7 | |
EMR-4.5.0 | Spark 2.4.5 | 支援資料湖構建(DLF)中繼資料。 |
EMR-4.3.0 | Spark 2.4.5 | |
EMR-3.x系列
EMR版本 | 組件版本 | 功能增強 |
EMR-3.51.0 | Spark 3.4.2 | Spark3升級至3.4.2版本。 |
EMR-3.50.0 | Spark 3.3.1 | 修複了Commons Text漏洞。 |
EMR-3.49.0 | Spark 3.3.1 | 移除了hive-site.xml中與jdo相關的配置。 |
EMR-3.46.1 | Spark 3.3.1 | |
EMR-3.44.0 | Spark 3.3.1 | 升級至3.3.1版本。 |
EMR-3.43.0 | Spark 3.3.0 | 升級至3.3版本。 支援開啟Kerberos身份認證。
|
EMR-3.40.0 | Spark 3.2.1 | 升級至3.2.1版本。 |
EMR-3.39.1 | Spark 2.4.8 | 最佳化了Hive on Spark。 適配JindoSDK。
|
EMR-3.38.1 | Spark 2.4.8 | |
EMR-3.38.0 | Spark 2.4.8 | 升級Spark至2.4.8版本。 同時支援Spark 2.4.8和Spark 3.1.2。
說明 Spark3暫不支援Delta和Remote Shuffle Service。 Spark 3.x系列,SparkSQL最佳化了Distinct計算效能,即當彙總運算元中包含多個count(distinct case ... when ...)時會觸發最佳化功能。 修複了AQE在Stats缺失情況下數組越界的問題。 修複了AQE和Cache在特定情境下報錯的問題。
|
EMR-3.37.0 | Spark 2.4.7 | 修複了與Delta Lake相容性的問題。 |
EMR-3.36.1 | Spark 2.4.7 | |
EMR-3.35.0 | Spark 2.4.7 | - 修複Adaptive Execution部分情境無法生效的問題。
- 修複統計彙總函式行為和Hive不一致的問題。
- 修複讀取Hive ORC表char類型資料正確性的問題。
|
EMR-3.34.0 | Spark 2.4.7 | - 最佳化了部分預設配置。
- 效能最佳化:支援Window TopK下推。
- 增強Hive讀寫CSV或JSON表的相容性。
- ANALYZE語句支援省略全表列名。
- 支援一鍵開啟或關閉LDAP功能。
- 改進Spark Beeline工具的易用性。
|
EMR-3.33.0 | Spark 2.4.7 | - 升級至2.4.7版本。
- 升級jQuery至3.5.1版本。
- 相容Hive方式,自動更新表和分區大小。
- 支援Spark中繼資料和作業運行資訊輸出至DataWorks。
|
EMR-3.32.0 | Spark 2.4.5 | JindoTable支援開啟或關閉資料擷取功能。 |
EMR-3.30.0 | Spark 2.4.5 | - 支援阿里雲DLF(Data Lake Formation)中繼資料。
- 升級HAS依賴至2.0.1。
- 修複Streaming SQL反引號問題。
- 移除Delta的JAR包,修改為Delta單獨部署。
- 修改日誌路徑統一寫至HDFS下。
|
EMR-3.29.0 | Spark 2.4.5 | - Spark升級至2.4.5.2.0。
- 支援第三方Metastore的功能。
- 增加datalake metastore-client。
|
EMR-3.28.0 | Spark 2.4.5 |
- 升級至2.4.5版本。
- 相容DataFactory的streaming-sql指令碼。
- 支援Delta 0.6.0版本。
|
EMR-3.27.0 | Spark 2.4.3 |
- CUBE中支援日期類型分區欄位。
- 調大Spark-Submit的stack深度。
|
EMR-3.25.0 | Spark 2.4.3 |
- 支援在控制台配置
spark.sql.extensions等Delta相關參數。
- 支援Hive讀取Delta table,避免set inputformat。
- 支援ALTER TABLE SET TBLPROPERTIES和UNSET TBLPROPERTIES語句。
|
EMR-3.24.0 | Spark 2.4.3 |
- 增加Delta相關參數支援。
- 增加對Ranger spark plugin配置的支援。
- JindoCube升級到0.3.0版本。
|
EMR-3.23.0 | Spark 2.4.3 | 更新spark thriftserver,解決class loader問題。 重構spark事務相關代碼,提升穩定性。 解決升builtin hive至2.3版本後orc格式讀寫問題。 支援merge into文法。 支援scan和stream文法。 Structured Streaming Kafka sink支援EOS。 delta更新至0.4.0。
|
EMR-3.22.0 | Spark 2.4.3 | Relational Cache 支援Relational Cache,Relational Cache通過預計算加速使用者查詢。使用者可以建立Relational Cache對資料進行預計算,在執行使用者查詢時,Spark Optimizer自動探索合適的Cache,並改寫SQL執行計畫,基於Cache的資料繼續計算,從而提升查詢速度,適用於報表、Dashboard、資料同步和多維分析等情境。 通過DDL,進行CACHE、UNCACHE、ALTER、SHOW等操作,Cache的資料支援Spark的所有資料來源和資料格式。 支援自動的Cache資料更新以及通過REFRESH命令更新Cache資料,支援基於分區的累加式更新。 支援基於Relational Cache的執行計畫最佳化。
Streaming SQL 規範Stream Query Writer的參數配置。 最佳化Kafka資料表Schema相容性檢查。 Kafka資料表Schema不存在時自動建立到SchemaRegistry。 最佳化Kafka Schema不相容時的日誌資訊。 修複查詢結果寫Kafka表時必須顯式指定列名的問題。 去掉流式SQL查詢只支援Kafka和Loghub資料輸入源的限制。
Delta 新增Delta,使用者可使用Spark建立Delta datasource,以支援流式資料寫入、事務性讀寫、資料校正和資料回溯等應用情境。詳情請參見Delta詳細資料。 支援使用DataFrame API從Delta讀取資料或者寫入資料到Delta。 支援使用Structured Streaming API以Delta作為source或者sink進行資料的讀或寫。 支援使用Delta API對資料進行update、delete、merge、vacuum、optimize等操作。 支援使用SQL建立基於Delta的表、匯入資料到Delta和讀取Delta表等操作。
Others
|