阿里云E-MapReduce產(chǎn)品構建于阿里云云服務器ECS上,基于開源的Apache Hadoop和Apache Spark,做了大量優(yōu)化。本文為您介紹E-MapReduce(簡稱EMR)Spark相對開源增強的功能。
背景信息
阿里云EMR 100%采用社區(qū)開源組件,隨開源版本升級迭代,基于開源組件,優(yōu)化和增強阿里云部署環(huán)境。
功能增強
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函數(shù)支持IF語句以及優(yōu)化Case when的用法。 設置參數(shù)spark.sql.optimizer.rewriteConditionalDistinctAggregates為true。 Shuffle Hash Join支持fallback到Sort Merge Join。 設置參數(shù)spark.sql.join.preferSortMergeJoin為false,設置參數(shù)spark.sql.join.enableShuffledHashJoinFallback為true。 支持非動態(tài)分區(qū)自動合并小文件。 設置spark.sql.adaptive.merge.output.small.files.enabled參數(shù)為true。 GroupingSet以及Distinct等場景會自動調(diào)整并發(fā)度。 設置參數(shù)spark.sql.execution.optimizeExpand為true。 優(yōu)化了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)不兼容。 支持數(shù)據(jù)湖格式Delta Lake和Hudi。 支持Remote Shuffle Service。 支持Livy 。 優(yōu)化E-MapReduce控制臺上,Spark服務配置頁面的spark-defaults頁簽的配置項名稱。 優(yōu)化CBO(Cost-Based Optimization)、DPP(DynamicPartitionPruning)以及Z-Order等功能,性能比開源Spark 3版本提升50%。 支持阿里云Log Service、DataHub和消息隊列RocketMQ版(簡稱ONS)等數(shù)據(jù)源。
|
EMR-4.x系列
EMR版本 | 組件版本 | 功能增強 |
EMR-4.10.0 | Spark 2.4.8 | 升級至2.4.8版本。 修復了Adaptive Execution部分場景無法生效的問題。 修復了統(tǒng)計聚合函數(shù)行為和Hive不一致的問題。 修復了讀取Hive ORC表char 類型數(shù)據(jù)正確性問題。 優(yōu)化了Thriftserver的默認配置。 優(yōu)化E-MapReduce控制臺上,Spark服務配置頁面的spark-defaults頁簽的配置項名稱。 優(yōu)化了Hive on Spark。 修復了AQE在Stats缺失情況下數(shù)組越界的問題。 修復了AQE和Cache在特定場景下報錯的問題。 移除了無效配置Log4j MetricsAppender。 修復了SparkContext啟動過程中空指針異常的問題。 支持ZSTD(Zstandard)壓縮格式。
|
EMR-4.9.0 | Spark 2.4.7 | 修復Adaptive Execution部分場景無法生效的問題。 修復統(tǒng)計聚合函數(shù)行為和Hive不一致的問題。 修復讀取Hive ORC表char類型數(shù)據(jù)正確性的問題。
|
EMR-4.8.0 | Spark 2.4.7 | |
EMR-4.6.0 | Spark 2.4.7 | |
EMR-4.5.0 | Spark 2.4.5 | 支持數(shù)據(jù)湖構建(DLF)元數(shù)據(jù)。 |
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 | 優(yōu)化了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優(yōu)化了Distinct計算性能,即當聚合算子中包含多個count(distinct case ... when ...) 時會觸發(fā)優(yōu)化功能。 修復了AQE在Stats缺失情況下數(shù)組越界的問題。 修復了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部分場景無法生效的問題。
- 修復統(tǒng)計聚合函數(shù)行為和Hive不一致的問題。
- 修復讀取Hive ORC表char類型數(shù)據(jù)正確性的問題。
|
EMR-3.34.0 | Spark 2.4.7 | - 優(yōu)化了部分默認配置。
- 性能優(yōu)化:支持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方式,自動更新表和分區(qū)大小。
- 支持Spark元數(shù)據(jù)和作業(yè)運行信息輸出至DataWorks。
|
EMR-3.32.0 | Spark 2.4.5 | JindoTable支持打開或關閉數(shù)據(jù)采集功能。 |
EMR-3.30.0 | Spark 2.4.5 | - 支持阿里云DLF(Data Lake Formation)元數(shù)據(jù)。
- 升級HAS依賴至2.0.1。
- 修復Streaming SQL反引號問題。
- 移除Delta的JAR包,修改為Delta單獨部署。
- 修改日志路徑統(tǒng)一寫至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中支持日期類型分區(qū)字段。
- 調(diào)大Spark-Submit的stack深度。
|
EMR-3.25.0 | Spark 2.4.3 |
- 支持在控制臺配置
spark.sql.extensions 等Delta相關參數(shù)。
- 支持Hive讀取Delta table,避免set inputformat。
- 支持ALTER TABLE SET TBLPROPERTIES和UNSET TBLPROPERTIES語句。
|
EMR-3.24.0 | Spark 2.4.3 |
- 增加Delta相關參數(shù)支持。
- 增加對Ranger spark plugin配置的支持。
- JindoCube升級到0.3.0版本。
|
EMR-3.23.0 | Spark 2.4.3 | - 更新spark thriftserver,解決class loader問題。
- 重構spark事務相關代碼,提升穩(wěn)定性。
- 解決升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通過預計算加速用戶查詢。用戶可以創(chuàng)建Relational Cache對數(shù)據(jù)進行預計算,在執(zhí)行用戶查詢時,Spark Optimizer自動發(fā)現(xiàn)合適的Cache,并改寫SQL執(zhí)行計劃,基于Cache的數(shù)據(jù)繼續(xù)計算,從而提升查詢速度,適用于報表、Dashboard、數(shù)據(jù)同步和多維分析等場景。 - 通過DDL,進行CACHE、UNCACHE、ALTER、SHOW等操作,Cache的數(shù)據(jù)支持Spark的所有數(shù)據(jù)源和數(shù)據(jù)格式。
- 支持自動的Cache數(shù)據(jù)更新以及通過REFRESH命令更新Cache數(shù)據(jù),支持基于分區(qū)的增量更新。
- 支持基于Relational Cache的執(zhí)行計劃優(yōu)化。
- Streaming SQL
- 規(guī)范Stream Query Writer的參數(shù)配置。
- 優(yōu)化Kafka數(shù)據(jù)表Schema兼容性檢查。
- Kafka數(shù)據(jù)表Schema不存在時自動創(chuàng)建到SchemaRegistry。
- 優(yōu)化Kafka Schema不兼容時的日志信息。
- 修復查詢結果寫Kafka表時必須顯式指定列名的問題。
- 去掉流式SQL查詢只支持Kafka和Loghub數(shù)據(jù)輸入源的限制。
- Delta
新增Delta,用戶可使用Spark創(chuàng)建Delta datasource,以支持流式數(shù)據(jù)寫入、事務性讀寫、數(shù)據(jù)校驗和數(shù)據(jù)回溯等應用場景。詳情請參見Delta詳細信息。 - 支持使用DataFrame API從Delta讀取數(shù)據(jù)或者寫入數(shù)據(jù)到Delta。
- 支持使用Stuctured Streaming API以Delta作為source或者sink進行數(shù)據(jù)的讀或?qū)憽?/li>
- 支持使用Delta API對數(shù)據(jù)進行update、delete、merge、vaccum、optimize等操作。
- 支持使用SQL創(chuàng)建基于Delta的表、導入數(shù)據(jù)到Delta和讀取Delta表等操作。
- Others
- constraint feature,支持主鍵和外鍵。
- 解決servlet等jar沖突問題。
|