天天看點

新版本來襲:Apache Spark 1.5新特性介紹

性能提升與Project Tungsten(鎢絲項目)

在1.5這個開發周期内最大的變化就是Tungsten項目的第一階段已經完成,并且在Spark1.5版本中正式加入了主要功能。該功能是由Spark自己來管理記憶體而不是使用JVM,這樣可以避免JVM GC帶來的性能損失。記憶體中的Java對象被存儲成Spark自己的二進制格式,計算直接發生在二進制格式上,省去了序列化和反序列化時間。同時這種格式也更加緊湊,節省記憶體空間,而且能更好的估計資料量大小和記憶體使用情況。

以下圖表給出了性能提升直覺的印象,在預設配置情況下,對比測試了spark1.4、Spark1.5在處理小規模和大規模資料量性能表現:

<a href="http://images2015.cnblogs.com/blog/107289/201509/107289-20150915163730117-1193338046.gif"></a>

在External Data Source方面,Parquet的支援有了很大的加強。Parquet的版本更新到1.7;更快的metadata discovery和schema merging;同時能夠讀取其他工具或者庫生成的非标準合法的parquet檔案;以及更快更魯棒的動态分區插入。

可用性和互操作性

Spark1.5增加了在UI界面中檢視SQL和DataFrame查詢計劃,能夠根據不同的操作和運作時的記憶體使用顯示不同的查詢計劃,以下圖為通過UI界面顯示查詢計劃:

<a href="http://images2015.cnblogs.com/blog/107289/201509/107289-20150915163731586-1033216459.gif"></a>

另外Spark1.5加入了其他的易用元件,在Hive子產品最大的變化是支援連接配接Hive 1.2版本的metastore,同時支援metastore partition pruning(通過spark.sql.hive.metastorePartitionPruning=true開啟,預設為false)。因為很多公司的Hive叢集都更新到了1.2以上,那麼這個改進對于需要通路Hive中繼資料的Spark叢集來說非常重要。Spark 1.5支援可以連接配接Hive 0.13, 0.14, 1.0/0.14.1, 1.1, 1.2的metastore。

機器學習MLlib

MLlib最大的變化就是從一個機器學習的library開始轉向建構一個機器學習工作流的系統,這些變化發生在ML包裡面。MLlib子產品下現在有兩個包:MLlib和ML。ML把整個機器學習的過程抽象成Pipeline,一個Pipeline是由多個Stage組成,每個Stage是Transformer或者Estimator。

以前機器學習工程師要花費大量時間在training model之前的feature的抽取、轉換等準備工作。ML提供了多個Transformer,極大提高了這些工作的效率。在1.5版本之後,已經有了25+個feature transformer,其中CountVectorizer, Discrete Cosine Transformation, MinMaxScaler, NGram, PCA, RFormula, StopWordsRemover, and VectorSlicer這些feature transformer都是1.5版本新添加的,做機器學習的朋友可以看看哪些滿足你的需求。

這裡面的一個亮點就是RFormula的支援,目标是使使用者可以把原來用R寫的機器學習程式(目前隻支援GLM算法)不用修改直接搬到Spark平台上來執行。不過目前隻支援集中簡單的R公式(包括'.', '~', '+'和 '-'),社群在接下來的版本中會增強這項功能。

另外越來越多的算法也作為Estimator搬到了ML下面,在1.5版本中新搬過來的有Naive Bayes, K-means, Isotonic Regression等。大家不要以為隻是簡單的在ML下面提供一個調用相應算法的API,這裡面變換還是挺多的。例如Naive Bayes原來的模型分别用Array[Double&gt;和Array[Array[Double]]來存儲pi和theta,而在ML下面新的API裡面使用的是Vector和Matrix來存儲。從這也可以看出,新的ML架構下所有的資料源都是基于DataFrame,所有的模型也盡量都基于Spark的資料類型表示。在ML裡面的public API下基本上看不到對RDD的直接操作了,這也與Tungsten項目的設計目标是一緻的。

除了這些既有的算法在ML API下的實作,ML裡面也增加了幾個新算法:

lMultilayerPerceptronClassifier(MLPC) 這是一個基于前饋神經網絡的分類器,它是一種在輸入層與輸出層之間含有一層或多層隐含結點的具有正向傳播機制的神經網絡模型,中間的節點使用sigmoid (logistic)函數,輸出層的節點使用softmax函數。輸出層的節點的數目表示分類器有幾類。MLPC學習過程中使用BP算法,優化問題抽象成logistic loss function并使用L-BFGS進行優化。

lMLlib包裡面增加了一個頻繁項挖掘算法PrefixSpan,AssociationRules能夠把FreqItemset生成關聯式規則。

l在MLlib的統計包裡面實作了Kolmogorov–Smirnov檢驗,用以檢驗兩個經驗分布是否不同或一個經驗分布與另一個理想分布是否不同。

l另外還有一些現有算法的增強:LDA算法,決策樹和ensemble算法,GMM算法。

lML裡面的多個分類模型現在都支援預測結果的機率而不像過去隻支援預測結果,像LogisticRegressionModel, NaiveBayesModel, DecisionTreeClassificationModel, RandomForestClassificationModel, GBTClassificationModel等,分别使用predictRaw, predictProbability, predict分别可以得到原始預測、機率預測和最後的分類預測。同時這些分類模型也支援通過設定thresholds指定各個類的門檻值。

lRandomForestClassificationModel和RandomForestRegressionModel模型都支援輸出feature importance

lGMM EM算法實作了當feature次元或者cluster數目比較大的時候的分布式矩陣求逆計算。實驗表明當feature次元&gt;30,cluster數目&gt;10的時候,這個優化性能提升明顯。

l對于LinearRegressionModel和LogisticRegressionModel實作了LinearRegressionTrainingSummary和LogisticRegressionTrainingSummary用來記錄模型訓練過程中的一些統計名額。

1.5版本的Python API也在不斷加強,越來越多的算法和功能的Python API基本上與Scala API對等了。此外在tuning和evaluator上也有增強。

其它

從1.5開始,Standalone, YARN和Mesos三種部署方式全部支援了動态資源配置設定。

SparkR支援運作在YARN叢集上,同時DataFrame的函數也提供了一些R風格的别名,可以降低熟悉R的使用者的遷移成本。

本文轉自shishanyuan部落格園部落格,原文連結:  http://www.cnblogs.com/shishanyuan/p/4810683.html  ,如需轉載請自行聯系原作者