全部產品
Search
文件中心

E-MapReduce:EMR Spark功能增強

更新時間:Jul 01, 2024

阿里雲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

  • Spark History Server支援預設使用OSS-HDFS儲存。

  • Spark3 Native Engine支援使用OSS和OSS-HDFS儲存。

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

  • 升級Spark至3.1.2版本。

  • Spark 3.x系列,SparkSQL最佳化了Distinct計算效能,即當彙總運算元中包含多個count(distinct case ... when ...)時會觸發最佳化功能。

  • 修複了AQE在Stats缺失情況下數組越界的問題。

  • 修複了AQE和Cache在特定情境下報錯的問題。

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

  • 修複Adaptive Execution部分情境無法生效的問題。

  • 修複統計彙總函式行為和Hive不一致的問題。

  • 修複讀取Hive ORC表char類型資料正確性的問題。

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

  • 升級至2.4.7版本。

  • 升級jQuery至3.5.1版本。

  • 相容Hive方式自動更新表和分區大小。

  • 支援Spark中繼資料和作業運行資訊輸出至DataWorks。

EMR-4.5.0

Spark 2.4.5

支援資料湖構建(DLF)中繼資料。

EMR-4.3.0

Spark 2.4.5

  • 升級至2.4.5版本。

  • 升級關聯的Delta Lake至0.6.0版本。

  • 修複開啟Ranger Hive後,Pyspark無法正常啟動並執行缺陷。

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

  • Spark History Server支援預設使用OSS-HDFS儲存。

  • Spark3 Native Engine支援使用OSS和OSS-HDFS儲存。

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

  • 移除了無效配置Log4j MetricsAppender。

  • 修複了SparkContext啟動過程中null 指標異常的問題。

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

  • 最佳化E-MapReduce控制台上,Spark服務配置頁面的spark-defaults頁簽的配置項名稱。

  • 最佳化輸出日誌效能。

  • 支援ZSTD(Zstandard)壓縮格式。

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

    • constraint feature,支援主鍵和外鍵。

    • 解決servlet等jar衝突問題。