1. 程式人生 > >spark 釋出 2.2.0版本

spark 釋出 2.2.0版本

  • Apache Spark 2.2.0是2.x分支上的第三次主版本釋出,其他兩個版本分別2.0.x,2.1.x兩個主版本以及下屬的分支版本。這次釋出spark移除了Structured Streaming的實驗標籤。也就是說,這次釋出的版本的焦點在於其易用性、穩定性,並完善、解決了超過1100個問題(目前來看,實際上有1146個問題,具體內容可以在spark的 jira上看到)。
  • 這次版本主要對一下幾個模組著做了修改
    • Core and Spark SQL
    • Structured Streaming
    • MLlib
    • SparkR
    • GraphX
    • Deprecations
    • Changes of behavior
    • Known Issues
    • Credits

Core and Spark SQL(核心和spark SQL)

  • API更新
    • SPARK-19107:支援通過DataFrameWriter和catalog來建立hive表
      • DataFrameWriter是spark.sql下的一個介面,主要用於將資料集寫到外部儲存系統中
      • Catalog同樣是spark.sql的一個介面,用於提供標準API訪問spark SQL中的元資料
    • SPARK-13721:支援hive的LATERAL VIEW OUTER explode()功能
      • LATERAL VIEW OUTER explode()是hive所提供的一行轉多列的方法(詳情 現在這裡挖個坑,找個時間來添一下)
    • SPARK-18885:針對資料來源和hive的正/反序列化資料的同一建表語法
    • SPARK-16475:對sql查詢中的 BROADCAST, BROADCASTJOIN, and MAPJOIN增加廣播提示功能
    • SPARK-18350:支援本地回話時區(為了解決機器處於不同時區、或者不同使用者處於不同時區所產生的時間不同問題)
    • SPARK-19261:支援擴充套件的sql語法alter table table_name add cloumns
    • SPARK-20420:增加external catalog時間
      • external catalog
    • SPARK-18127:增加spark的鉤子和擴充套件點
      • 這是Srinath提出的一個改進點,其本意是希望通過自定義spark會話的方式來來實現以下目標:增加自定義的分析規則,如實現遞迴操作;增加自己的分析檢查,如對資料來源做特殊的檢查,在發現問題的時候可以提前發現;增加自定義優化等
    • SPARK-20576:在Dataset/DataFrame中支援通用的提示函式
    • SPARK-17203:資料來源操作不應該區分大小寫
    • SPARK-19139:為spark增加AES基礎認證機制
  • 效能和穩定
    • 代價優化器
      • 針對filter,join,aggregate,project和limit/sample操作的評估基數
      • 對join重排序進行優化
      • 對TPC-DS利用啟發式星型結構進行優化
    • 引入一個基於聚合操作的jvm物件
    • 部分聚合支援hive UDAF 函式
    • 對CSV和JSON的檔案列表/IO進行優化
    • 解決不可撤銷/不可殺死的任務耗盡系統資源的問題
    • 拓撲結構的塊複製問題
  • 其他值得注意的改變
    • 支援解析多行JSON檔案
    • 支援解析多行CSV檔案
    • 支援分割槽表的表分析命令
    • 在完成插入和建立hive表後丟棄階段字典和資料檔案
    • 檢視更加文健、標準而不需要大量的SQL擴充套件
    • 支援從hive 2.0/2.1的模型倉庫中讀取資料
    • 提供提交協議的RDD埠API
    • 對定時排程任務增加黑名單列表
    • 移除對hadoop 2.5和更早版本的支援
    • 移除對java7的支援

Structured Streaming(結構流)

  • 常規應用
    • Structured Streaming(結構流)的API現在屬於常規應用,不再具有實驗標籤
  • kafka 優化
    • 支援在流中或者批量從kafka中讀取/寫入資料
    • 使用一個快取的kafka生產者通過kafka sink向kafka寫入資料
  • API更新
    • 使用[flat]MapGroupWithState時支援複雜狀態執行和超時
    • 支援一次觸發器
  • 其他不重要的改變
    • 增加一個測試和基準的rate source(信率源)

MLlib

  • 基於data-frame的新演算法API
    • 線性SVC
      • SVC: support vector classification(支援向量聚類演算法)
    • 基於data-frame API的卡方檢驗
    • 基於data-frame API的相關分析
    • 基於特徵轉化的確實值處理
    • 廣義線性模型增加Tweedie分佈
    • 頻繁項集挖掘中的FPGrowth演算法和關聯規則
  • 已存在的演算法中增加python和R的api
    • Gradient Boosted Trees(梯度提升樹)
    • 二分k均值
    • 區域性敏感雜湊 參考
    • pySpark的分散式主成分分析和矩陣奇異值分解
  • 主要bug修復
    • DistributedLDAModel.logPrior計算準確率修復
    • EMLDAOptimizer因型別匹配錯誤失敗(由GraphX checkpointing的bug導致)
    • 修復在二項式廣義線性模型中計算資訊準則錯誤問題
      • AIC :AIC資訊準則即Akaike information criterion,是衡量統計模型擬合優良性的一種標準,由於它為日本統計學家赤池弘次創立和發展的, 因此又稱赤池資訊量準則
    • 在某些輸入資料中訓練二分K均值模型報"java.util.NoSuchElementException: key not found"錯誤
    • pyspark.ml.Pipeline 在多執行緒模式使用時會出問題
    • 框約束的邏輯迴歸

SparkR

  • SparkR在2.2.0版本焦點主要集中在:增加了大量現存Spark SQL特性的支援 *主要特徵
    • Structured Streaming API支援R語言
    • 完整的catalogAPI可以支援R語言
    • to_json,from_json的列函式
    • 合併dataFrame 和 合併列
    • 支援dataFrame的checkpointing
    • R中approxQuantile函式支援多列計算

GraphX圖計算

  • bug修復
    • 圖計算接收器從PageRank中獲取到了不準確的結果
    • 圖頂點Rdd/邊緣RDD做checkpoint操作時出現ClassCastException異常

不贊成

  • python
    • 放棄對python2.6的支援
  • MLlib
    • spark.ml LDA類不應該在spark.mllib的API中暴露,在spark.ml.LDAModel中,不提倡oldLocalModel 和 getModel
  • SparkR
    • 不提倡建立外部表

方式改變

  • MLlib
    • 開發API ALS.train()使用預設引數0.1代替1.0,為了匹配常規演算法API中的預設引數設定
  • sparkR:
    • 為SparkR的高斯矩陣模型增加對數似然估計,但是引入一個sparkR的模型不會持續相容:高斯矩陣模型在SparkR 2.1中已經被移除,可能不會在sparkR 2.2中重新引入。我們計劃在將來對其保持向後相容。
由於知識侷限,文中可能有些地方翻譯的不準確,歡迎批評指正。更多資訊請多關注ApacheCN