Spark 1.6今天發布
今天,我們很開心的宣布發布Apache Spark 1.6!這也是開源社區開發的一個里程碑,2015年貢獻spark的代碼是1000行,是2014一整年的兩倍,見下圖。
接下來揭開Spark 1.6新發布的功能。
Spark 1.6包含了超過1000個patches,在這里我們主要展示三個方面的主題:新的Dataset API,性能提升(讀取Parquet 50%的性能提升,自動內存管理,streaming state management十倍的性能提升),以及大量新的機器學習和統計分析算法。
性能提升
根據2015年Spark官方調研發現,91%的用戶覺得性能提升是Spark最重要的方面。因此,性能優化是Spark開發一直的關注點。
讀取Parquet性能提升:Parquet是在Spark使用中最常用的數據格式。Parquet讀取性能對海里數據應用有著極其重大的影響。在過去,Spark中讀取Parquet依賴于Parquet的(parquert-mr)MR來讀取并解析Parquet文件。當我們優化Spark程序時,你會發現太多的時間消耗在從Parquet列解析成記錄集的過程中。而在Spark 1.6中我們采用一種新型的Parquet reader讀取器,它可以避開”parquert-mr”式的記錄集解析,并使用更加優化的字節碼路徑來解析Parquet的schemas。在我們的基準測試中可以發現,新型的Parquet reader讀取器讀取Parquet文件有 50%的性能提升(從2.9 million/秒提升到4.5million/秒)。
自動內存管理:Spark 1.6另外一個性能提升是在內存管理方面。在Spark 1.6之前,Spark靜態地把內存劃分成兩部分:execution memory 和 cache memory。Execution memory主要用來做sort,hash和shuff。Cache memory是用來緩存熱點數據的。Spark 1.6引進新的內存管理機制能自動調節這兩種內存的區域,運行時自動增長,回收時根據執行的應用適時進行。
這意味著在無需用戶干預的情況下使用join和aggregation操作時內存的自適應有大幅的提升。
對于讀取Parquet和自動內存管理兩種性能提升也不需要開發者更改老版本的代碼。
streaming state management十倍的性能提升:State management是Spark Streaming應用開發里重要的功能,經常用來保存聚合信息或session信息。通過社區開發者的反饋,我們重新設計了state management API,并引入 mapWithState API (可隨updates的數目線性擴展)。這意味著能更有效的跟蹤增量變化,而不是每次update都要對數據進行一次全scan。我們已經創建了一個 notebook 來展示怎么使用這個new feature,后面會發blog進一步對這個功能進行詳細講解。
Dataset API
在今年早些時候我們引入DataFrame,它可以提供high-level functions讓Spark更好的處理數據結構和計算。這讓 Catalyst optimizer 和 Tungsten execution engine 自動加速大數據分析。
發布DataFrame之后我們收到了很多反饋,其中一個主要的是大家反映缺乏編譯時類型安全。為了解決這個問題,我們采用新的Dataset API (DataFrame API的類型擴展)。
Dataset API擴展DataFrame API支持靜態類型和運行已經存在的Scala或Java語言的用戶自定義函數。對比傳統的RDD API,Dataset API提供更好的內存管理,特別是在長任務中有更好的性能提升,請參見 blog 。
新的數據科學功能
機器學習管道持久化:現在許多機器學習的應用采用Spark的ML pipeline功能來構建機器學習pipelines。老版本中,如果想在外部存儲pipeline,需要用戶自己完成持久化代碼部分。在Spark 1.6中已經提供了對應的function來存儲和重新加載pipelines,并把先前的models應用到新的數據中。
大量新的機器學習和統計分析算法:
這次發布增加了以下算法:
· 無偏估計統計
· 生成分析
· 最小二乘法的歸一化
· 二分k均值聚類算法
· 在線假設檢驗
· LDA算法
· 支持R語言的廣義線性模型的統計
· 公式的交互
· 支持R語言的廣義線性模型的權重
· LIBSVM數據源
· 支持非標準的JSON數據
這篇blog只顯示了這次發布中的主要功能,我們也編譯了一個更詳細的 release notes 。
來自: http://www.infoq.com/cn/news/2016/01/spark-16-release