當前位置:首頁 » 操作系統 » 推薦演算法r

推薦演算法r

發布時間: 2022-08-01 01:57:12

㈠ 矩陣分解在協同過濾推薦演算法中的應用

矩陣分解在協同過濾推薦演算法中的應用
推薦系統是當下越來越熱的一個研究問題,無論在學術界還是在工業界都有很多優秀的人才參與其中。近幾年舉辦的推薦系統比賽更是一次又一次地把推薦系統的研究推向了高潮,比如幾年前的Neflix百萬大獎賽,KDD CUP 2011的音樂推薦比賽,去年的網路電影推薦競賽,還有最近的阿里巴巴大數據競賽。這些比賽對推薦系統的發展都起到了很大的推動作用,使我們有機會接觸到真實的工業界數據。我們利用這些數據可以更好地學習掌握推薦系統,這些數據網上很多,大家可以到網上下載。
推薦系統在工業領域中取得了巨大的成功,尤其是在電子商務中。很多電子商務網站利用推薦系統來提高銷售收入,推薦系統為Amazon網站每年帶來30%的銷售收入。推薦系統在不同網站上應用的方式不同,這個不是本文的重點,如果感興趣可以閱讀《推薦系統實踐》(人民郵電出版社,項亮)第一章內容。下面進入主題。
為了方便介紹,假設推薦系統中有用戶集合有6個用戶,即U={u1,u2,u3,u4,u5,u6},項目(物品)集合有7個項目,即V={v1,v2,v3,v4,v5,v6,v7},用戶對項目的評分結合為R,用戶對項目的評分范圍是[0, 5]。R具體表示如下:

推薦系統的目標就是預測出符號「?」對應位置的分值。推薦系統基於這樣一個假設:用戶對項目的打分越高,表明用戶越喜歡。因此,預測出用戶對未評分項目的評分後,根據分值大小排序,把分值高的項目推薦給用戶。怎麼預測這些評分呢,方法大體上可以分為基於內容的推薦、協同過濾推薦和混合推薦三類,協同過濾演算法進一步劃分又可分為基於基於內存的推薦(memory-based)和基於模型的推薦(model-based),本文介紹的矩陣分解演算法屬於基於模型的推薦。
矩陣分解演算法的數學理論基礎是矩陣的行列變換。在《線性代數》中,我們知道矩陣A進行行變換相當於A左乘一個矩陣,矩陣A進行列變換等價於矩陣A右乘一個矩陣,因此矩陣A可以表示為A=PEQ=PQ(E是標准陣)。
矩陣分解目標就是把用戶-項目評分矩陣R分解成用戶因子矩陣和項目因子矩陣乘的形式,即R=UV,這里R是n×m, n =6, m =7,U是n×k,V是k×m。直觀地表示如下:

高維的用戶-項目評分矩陣分解成為兩個低維的用戶因子矩陣和項目因子矩陣,因此矩陣分解和PCA不同,不是為了降維。用戶i對項目j的評分r_ij =innerproct(u_i, v_j),更一般的情況是r_ij =f(U_i, V_j),這里為了介紹方便就是用u_i和v_j內積的形式。下面介紹評估低維矩陣乘積擬合評分矩陣的方法。
首先假設,用戶對項目的真實評分和預測評分之間的差服從高斯分布,基於這一假設,可推導出目標函數如下:

最後得到矩陣分解的目標函數如下:

從最終得到得目標函數可以直觀地理解,預測的分值就是盡量逼近真實的已知評分值。有了目標函數之後,下面就開始談優化方法了,通常的優化方法分為兩種:交叉最小二乘法(alternative least squares)和隨機梯度下降法(stochastic gradient descent)。
首先介紹交叉最小二乘法,之所以交叉最小二乘法能夠應用到這個目標函數主要是因為L對U和V都是凸函數。首先分別對用戶因子向量和項目因子向量求偏導,令偏導等於0求駐點,具體解法如下:

上面就是用戶因子向量和項目因子向量的更新公式,迭代更新公式即可找到可接受的局部最優解。迭代終止的條件下面會講到。
接下來講解隨機梯度下降法,這個方法應用的最多。大致思想是讓變數沿著目標函數負梯度的方向移動,直到移動到極小值點。直觀的表示如下:

其實負梯度的負方向,當函數是凸函數時是函數值減小的方向走;當函數是凹函數時是往函數值增大的方向移動。而矩陣分解的目標函數L是凸函數,因此,通過梯度下降法我們能夠得到目標函數L的極小值(理想情況是最小值)。
言歸正傳,通過上面的講解,我們可以獲取梯度下降演算法的因子矩陣更新公式,具體如下:

(3)和(4)中的γ指的是步長,也即是學習速率,它是一個超參數,需要調參確定。對於梯度見(1)和(2)。
下面說下迭代終止的條件。迭代終止的條件有很多種,就目前我了解的主要有
1) 設置一個閾值,當L函數值小於閾值時就停止迭代,不常用
2) 設置一個閾值,當前後兩次函數值變化絕對值小於閾值時,停止迭代
3) 設置固定迭代次數
另外還有一個問題,當用戶-項目評分矩陣R非常稀疏時,就會出現過擬合(overfitting)的問題,過擬合問題的解決方法就是正則化(regularization)。正則化其實就是在目標函數中加上用戶因子向量和項目因子向量的二范數,當然也可以加上一范數。至於加上一范數還是二范數要看具體情況,一范數會使很多因子為0,從而減小模型大小,而二范數則不會它只能使因子接近於0,而不能使其為0,關於這個的介紹可參考論文Regression Shrinkage and Selection via the Lasso。引入正則化項後目標函數變為:

(5)中λ_1和λ_2是指正則項的權重,這兩個值可以取一樣,具體取值也需要根據數據集調參得到。優化方法和前面一樣,只是梯度公式需要更新一下。
矩陣分解演算法目前在推薦系統中應用非常廣泛,對於使用RMSE作為評價指標的系統尤為明顯,因為矩陣分解的目標就是使RMSE取值最小。但矩陣分解有其弱點,就是解釋性差,不能很好為推薦結果做出解釋。
後面會繼續介紹矩陣分解演算法的擴展性問題,就是如何加入隱反饋信息,加入時間信息等。

㈡ 如何讓Hadoop結合R語言做大數據分析

R語言和Hadoop讓我們體會到了,兩種技術在各自領域的強大。很多開發人員在計算機的角度,都會提出下面2個問題。問題1: Hadoop的家族如此之強大,為什麼還要結合R語言?
問題2: Mahout同樣可以做數據挖掘和機器學習,和R語言的區別是什麼?下面我嘗試著做一個解答:問題1: Hadoop的家族如此之強大,為什麼還要結合R語言?

a. Hadoop家族的強大之處,在於對大數據的處理,讓原來的不可能(TB,PB數據量計算),成為了可能。
b. R語言的強大之處,在於統計分析,在沒有Hadoop之前,我們對於大數據的處理,要取樣本,假設檢驗,做回歸,長久以來R語言都是統計學家專屬的工具。
c. 從a和b兩點,我們可以看出,hadoop重點是全量數據分析,而R語言重點是樣本數據分析。 兩種技術放在一起,剛好是最長補短!
d. 模擬場景:對1PB的新聞網站訪問日誌做分析,預測未來流量變化
d1:用R語言,通過分析少量數據,對業務目標建回歸建模,並定義指標d2:用Hadoop從海量日誌數據中,提取指標數據d3:用R語言模型,對指標數據進行測試和調優d4:用Hadoop分步式演算法,重寫R語言的模型,部署上線這個場景中,R和Hadoop分別都起著非常重要的作用。以計算機開發人員的思路,所有有事情都用Hadoop去做,沒有數據建模和證明,」預測的結果」一定是有問題的。以統計人員的思路,所有的事情都用R去做,以抽樣方式,得到的「預測的結果」也一定是有問題的。所以讓二者結合,是產界業的必然的導向,也是產界業和學術界的交集,同時也為交叉學科的人才提供了無限廣闊的想像空間。問題2: Mahout同樣可以做數據挖掘和機器學習,和R語言的區別是什麼?

a. Mahout是基於Hadoop的數據挖掘和機器學習的演算法框架,Mahout的重點同樣是解決大數據的計算的問題。
b. Mahout目前已支持的演算法包括,協同過濾,推薦演算法,聚類演算法,分類演算法,LDA, 樸素bayes,隨機森林。上面的演算法中,大部分都是距離的演算法,可以通過矩陣分解後,充分利用MapRece的並行計算框架,高效地完成計算任務。
c. Mahout的空白點,還有很多的數據挖掘演算法,很難實現MapRece並行化。Mahout的現有模型,都是通用模型,直接用到的項目中,計算結果只會比隨機結果好一點點。Mahout二次開發,要求有深厚的java和Hadoop的技術基礎,最好兼有 「線性代數」,「概率統計」,「演算法導論」 等的基礎知識。所以想玩轉Mahout真的不是一件容易的事情。
d. R語言同樣提供了Mahout支持的約大多數演算法(除專有演算法),並且還支持大量的Mahout不支持的演算法,演算法的增長速度比mahout快N倍。並且開發簡單,參數配置靈活,對小型數據集運算速度非常快。
雖然,Mahout同樣可以做數據挖掘和機器學習,但是和R語言的擅長領域並不重合。集百家之長,在適合的領域選擇合適的技術,才能真正地「保質保量」做軟體。

如何讓Hadoop結合R語言?

從上一節我們看到,Hadoop和R語言是可以互補的,但所介紹的場景都是Hadoop和R語言的分別處理各自的數據。一旦市場有需求,自然會有商家填補這個空白。

1). RHadoop

RHadoop是一款Hadoop和R語言的結合的產品,由RevolutionAnalytics公司開發,並將代碼開源到github社區上面。RHadoop包含三個R包 (rmr,rhdfs,rhbase),分別是對應Hadoop系統架構中的,MapRece, HDFS, HBase 三個部分。

2). RHiveRHive是一款通過R語言直接訪問Hive的工具包,是由NexR一個韓國公司研發的。

3). 重寫Mahout用R語言重寫Mahout的實現也是一種結合的思路,我也做過相關的嘗試。

4).Hadoop調用R

上面說的都是R如何調用Hadoop,當然我們也可以反相操作,打通JAVA和R的連接通道,讓Hadoop調用R的函數。但是,這部分還沒有商家做出成形的產品。

5. R和Hadoop在實際中的案例

R和Hadoop的結合,技術門檻還是有點高的。對於一個人來說,不僅要掌握Linux, Java, Hadoop, R的技術,還要具備 軟體開發,演算法,概率統計,線性代數,數據可視化,行業背景 的一些基本素質。在公司部署這套環境,同樣需要多個部門,多種人才的的配合。Hadoop運維,Hadoop演算法研發,R語言建模,R語言MapRece化,軟體開發,測試等等。所以,這樣的案例並不太多。

㈢ 如何用R實現協同過濾的MapRece演算法

在本文中矩陣用斜體大寫字母表示(如:R),標量用小寫字母表示(如:i,j)。給定一個矩陣R, Rij表示它的一個元素,Ri.表示矩陣R的第i行,R.j表示矩陣R的第j列,RT 表示矩陣R的轉置。R-1 表示矩陣R的逆。在本文中給定的矩陣R表示具有m個用戶

㈣ 如何評價一個好的推薦系統演算法 – 我愛機器學習

如何更好地掌握機器學習Colorado是伯克利大學的在讀博士,同時也是Metacademy的創始人。Metacademy是一個優秀的開源平台,許多專業人員共同在這個平台上編寫wiki文章。目前,這些文章主要圍繞著機器學習和人工智慧這兩個主題。在Colorado的建議中,更好地學習機器學習的方法就是不斷的通過書本學習。他認為讀書的目的就是讓心中有書。一個博士在讀生給出這樣的建議並不令人驚訝,以前本站可能還推薦過類似的建議。這個建議還可以,但我不認為適用每個人。如果你是個開發者,想實現機器學習的演算法。下面列出的書籍是一個很好的參考,可以從中逐步學習。機器學習路線圖他的關於機器學習的路線圖分為5個級別,每個級別都對應一本書必須要掌握的書。這5個級別如下:Level0(新手):閱讀《DataSmart:》。需要了解電子表格、和一些演算法的高級數據流。Level1(學徒):閱讀《MachineLearningwithR》。學習在不同的情況下用R語言應用不同的機器學習演算法。需要一點點基本的編程、線性代數、微積分和概率論知識。Level2(熟練工):閱讀《》。從數學角度理解機器學習演算法的工作原理。理解並調試機器學習方法的輸出結果,同時對機器學習的概念有更深的了解。需要有演算法、較好的線性代數、一些向量積分、一些演算法實現經驗。Level3(大師):閱讀《ProbabilisticGraphicalModels:PrinciplesandTechniques》。深入了解一些高級主題,如凸優化、組合優化、概率論、微分幾何,及其他數學知識。深入了解概率圖模型,了解何時應該使用以及如何解釋其輸出結果。Leval4(宗師):隨便去學吧,記得反饋社區。Colorado針對每個級別中列出的書中章節閱讀建議,並給出了建議去了解的相關頂級項目。Colorado後來重新發布了一篇博客,其中對這個路線圖做了一點修改。他移除了最後一個級別,並如下定義了新的級別:好奇者、新手、學徒、熟練工、大師。他說道,Level0中的機器學習好奇者不應該閱讀相關書籍,而是瀏覽觀看與機器學習有關的頂級視頻。機器學習中被忽視的主題ScottLocklin也閱讀了Colorado的那篇博客,並從中受到了啟發,寫了一篇相應的文章,名為「機器學習中被忽視的想法」(文中有BorisArtzybasheff繪制的精美圖片)。Scott認為Colorado給出的建議並沒有充分的介紹機器學習領域。他認為很少有書籍能做到這一點,不過他還是喜歡PeterFlach所著的《MachineLearning:》這本書,因為書中也接觸了一些隱晦的技術。Scott列出了書本中過分忽視的內容。如下所示:實時學習:對流數據和大數據很重要,參見VowpalWabbit。強化學習:在機器人方面有過討論,但很少在機器學習方面討論。「壓縮」序列預測技術:壓縮數據發現學習模式。參見CompLearn。面向時間序列的技術。一致性預測:為實時學習精確估計模型。雜訊背景下的機器學習:如NLP和CV。特徵工程:機器學習成功的關鍵。無監督和半監督學習。這個列表很好的指出了機器學習中沒有注意到的領域。最後要說明的是,我自己也有一份關於機器學習的路線圖。與Colorado一樣,我的路線圖僅限於分類/回歸類型的監督機器學習,但還在完善中,需要進一步的調查和添加所有感興趣的主題。與前面的「讀這些書就可以了」不同,這個路線圖將會給出詳細的步驟。

㈤ 大數據具體是學習什麼內容呢主要框架是什麼

首先,學習大數據是需要有java,python和R語言的基礎。
1) Java學習到什麼樣的程度才可以學習大數據呢?
java需要學會javaSE即可。javaweb,javaee對於大數據用不到。學會了javase就可以看懂hadoop框架。
2) python是最容易學習的,難易程度:python java Scala 。
python不是比java更直觀好理解么,因為會了Python 還是要學習java的,你學會了java,再來學習python會很簡單的,一周的時間就可以學會python。
3) R語言也可以學習,但是不推薦,因為java用的人最多,大數據的第一個框架Hadoop,底層全是Java寫的。就算學會了R還是看不懂hadoop。
java在大數據中的作用是構成大數據的語言,大數據的第一個框架Hadoop以及其他大數據技術框架,底層語言全是Java寫的,所以推薦首選學習java
大數據開發學習路線:
第一階段:Hadoop生態架構技術
1、語言基礎
Java:多理解和實踐在Java虛擬機的內存管理、以及多線程、線程池、設計模式、並行化就可以,不需要深入掌握。
Linux:系統安裝、基本命令、網路配置、Vim編輯器、進程管理、Shell腳本、虛擬機的菜單熟悉等等。
Python:基礎語法,數據結構,函數,條件判斷,循環等基礎知識。
2、環境准備
這里介紹在windows電腦搭建完全分布式,1主2從。
VMware虛擬機、Linux系統(Centos6.5)、Hadoop安裝包,這里准備好Hadoop完全分布式集群環境。
3、MapRece
MapRece分布式離線計算框架,是Hadoop核心編程模型。
4、HDFS1.0/2.0
HDFS能提供高吞吐量的數據訪問,適合大規模數據集上的應用。
5、Yarn(Hadoop2.0)
Yarn是一個資源調度平台,主要負責給任務分配資源。
6、Hive
Hive是一個數據倉庫,所有的數據都是存儲在HDFS上的。使用Hive主要是寫Hql。
7、Spark
Spark 是專為大規模數據處理而設計的快速通用的計算引擎。
8、SparkStreaming
Spark Streaming是實時處理框架,數據是一批一批的處理。
9、SparkHive
Spark作為Hive的計算引擎,將Hive的查詢作為Spark的任務提交到Spark集群上進行計算,可以提高Hive查詢的性能。
10、Storm
Storm是一個實時計算框架,Storm是對實時新增的每一條數據進行處理,是一條一條的處理,可以保證數據處理的時效性。
11、Zookeeper
Zookeeper是很多大數據框架的基礎,是集群的管理者。
12、Hbase
Hbase是一個Nosql資料庫,是高可靠、面向列的、可伸縮的、分布式的資料庫。
13、Kafka
kafka是一個消息中間件,作為一個中間緩沖層。
14、Flume
Flume常見的就是採集應用產生的日誌文件中的數據,一般有兩個流程。
一個是Flume採集數據存儲到Kafka中,方便Storm或者SparkStreaming進行實時處理。
另一個流程是Flume採集的數據存儲到HDFS上,為了後期使用hadoop或者spark進行離線處理。
第二階段:數據挖掘演算法
1、中文分詞
開源分詞庫的離線和在線應用
2、自然語言處理
文本相關性演算法
3、推薦演算法
基於CB、CF,歸一法,Mahout應用。
4、分類演算法
NB、SVM
5、回歸演算法
LR、DecisionTree
6、聚類演算法
層次聚類、Kmeans
7、神經網路與深度學習
NN、Tensorflow
以上就是學習Hadoop開發的一個詳細路線,如果需要了解具體框架的開發技術,可咨詢加米穀大數據老師,詳細了解。
學習大數據開發需要掌握哪些技術呢?
(1)Java語言基礎
Java開發介紹、熟悉Eclipse開發工具、Java語言基礎、Java流程式控制制、Java字元串、Java數組與類和對象、數字處理類與核心技術、I/O與反射、多線程、Swing程序與集合類
(2)HTML、CSS與Java
PC端網站布局、HTML5+CSS3基礎、WebApp頁面布局、原生Java交互功能開發、Ajax非同步交互、jQuery應用
(3)JavaWeb和資料庫
資料庫、JavaWeb開發核心、JavaWeb開發內幕
Linux&Hadoop生態體系
Linux體系、Hadoop離線計算大綱、分布式資料庫Hbase、數據倉庫Hive、數據遷移工具Sqoop、Flume分布式日誌框架
分布式計算框架和Spark&Strom生態體系
(1)分布式計算框架
Python編程語言、Scala編程語言、Spark大數據處理、Spark—Streaming大數據處理、Spark—Mlib機器學習、Spark—GraphX 圖計算、實戰一:基於Spark的推薦系統(某一線公司真實項目)、實戰二:新浪網(www.sina.com.cn)
(2)storm技術架構體系
Storm原理與基礎、消息隊列kafka、Redis工具、zookeeper詳解、大數據項目實戰數據獲取、數據處理、數據分析、數據展現、數據應用
大數據分析—AI(人工智慧)Data
Analyze工作環境准備&數據分析基礎、數據可視化、Python機器學習
以上的回答希望對你有所幫助

㈥ 推薦演算法如何提前劃分製造同類目日誌

做推薦演算法的質量工作將近一年,這一年嘗試了很多東西,踩了不少坑,也對推薦的評測工作稍微有了些自己的心得,現在分享出來,希望能和做這塊工作的同學一起交流、探討,也歡迎多拍磚,多提意見。

推薦系統

目前推薦技術的應用已經非常較普及了,新聞、商品、問答、音樂,幾乎都會用到推薦演算法來為你呈現內容。下面是淘寶、知乎、微博三個app的推薦模型,可以看到推薦都在非常重要的位置。

在介紹推薦演算法評測之前,我先簡單說下推薦系統,這里我以商品為例,簡單描述下推流程,讓大家更明白一些,一般推薦主要包含以下步驟:
召回->打分排序->透出

召回

召回階段通常的手段是協同過濾比較場景的i2i,u2i等這種x2x(有興趣可以看下我寫的基於itembase的推薦),也有使用embedding的方式通過向量之間的距離進行召回。以i2i為例,假如現在要針對我推薦一個商品,那麼首先要找到我感興趣的物品 ,這些數據是通過我的歷史行為來進行獲取,比如拿到我最近一段時間內的點擊、加購、收藏、購買的物品,將這些商品做為trigger進行召回,協同演算法的具體就不再這里敘述了,有興趣可以看下鏈接,最終我們按照協同過濾演算法算出商品之間的相似分值,然後按照一定數量進行截斷,因為這里截斷也是依靠分數來進行的,所以一般這一步也稱粗排。這樣召回截斷就完成了。

打分

召回完商品後,我們需要對這些商品進行再一次的精排,這里需要用模型來預估ctr,一般情況下LR、GBDT、FM用的比較多,這里深度網路相對用的少,主要為了考慮到性能,尤其是rt,因為絕大部分的精排都是需要實時預測的,所有對耗時有一定的要求。繼續說下模型預測的步驟,首先針對召回的商品進行特徵的補充,例如該商品的一級類目、葉子類目(一級類目代表比較,葉子類目代表最細分的類目)、被多少用戶購買等,然後再加入人的特徵,例如性別、年齡、收入、對類目的偏好等,然後將這些信息做為feature,用模型進行預測,然後根據模型預測的結果進行排序,輸出。

模型

打分過程中的模型是需要提前訓練和部署,訓練集的來源就是用戶的實時行為加上用戶和商品的特徵。feature的構成是用戶的特徵和商品的特徵,label則是用戶是否點擊了該商品。

質量方案

接下來說下如何保證這塊的質量。由於推薦系統最終對用戶需要提供實時的服務化,因此免不了有工程端的技術需要一起配合。因此我這塊主要分為兩個維度來開展,一方面是工程端的質量保證,一方面是演算法側的質量保證。

工程端質量

這一塊可以將演算法當成一個黑盒子,只把他當成一個有結果返回的介面。針對這方面前人已經有了豐富的經驗,我們可以做介面的單元測試和冒煙測試,另外就是壓測,在預估的qps下看rt是否滿足業務方的要求,load是否過大,超時和錯誤的比例是否符合一定的預期。這里就不細說了,重點說說第二部分。

演算法端質量

這里我再進行細分一下,分為三部分介紹:演算法數據、演算法模型、演算法效果;

演算法數據:

大家都知道演算法在做訓練前數據的處理部分非常的重要,有興趣可以看下特徵工程相關的內容,數據的來源,特徵的構造,數據抽取、加工整個的過程都有可能會出現錯誤,而且數據一般都是存儲在分布式系統資料庫里,因此需要藉助類似hive這樣的工具將sql轉換成MapRece的任務去進行離線的計算,離線任務的產出通常會耗費不少的時間,而對於一些日更新的模型通過對數據對產出時間有一定的要求。因此數據這塊最主要的保證點為:數據本身的質量,和數據的產出時間。數據本身的質量一般可以通過數據大小的整體抖動,以及關鍵欄位是否為空,主鍵是否重復,做法比較簡單可以通過簡單sql或者udf來完成,然後藉助工程能力做到預警、檢查、出報表等。

演算法模型:

模型的本身在迭代過程中也是需要關注的,不過通常演算法同學的訓練優化也是參考這些指標,所以我們也可以把這幾個指標做為模型本身好壞的評估。具體為:准確率、召回率、AUC。

演算法效果:

那麼這個演算法推薦出的效果究竟好不好呢,這個是一個非常主觀的事情,每個人的感受也不是一樣的,但是我們仍然要衡量它的好壞,這里我參考業內學者的推薦書籍以及自己的一些摸索,總結出下面一些方法,供大家參考。

人工評測:

顧名思義,邀請一幫人來對你的推薦系統的結果進行評測。這里想法來自於我在做翻譯評測時期的經驗,首先這個成本比較高,另外就是參雜了人的主觀性非常的高,翻譯的好壞我們可以通過制定一些細致的規則來進行約束,但是推薦的好壞我們卻不好制定詳細的規則,另外就是推薦之前的用戶行為如何模擬,如何讓評測者進行感知,這些都是比較難的,並且和基準的對比也不是很好做,所以這里不是很推薦用這個方法,但是還是要提一下。

指標評估:

指標化推薦結果,也就是將推薦的結果用不同的指標來進行說明,通過這些指標,你可以更加的了解你的推薦系統,部分指標不一定越高越好,但是你需要讓它保持在一定的范圍內。說到具體的例子的時候,我會提一下。下面我們看下這些指標。

覆蓋率

定義:
推薦系統能夠推薦出來的「商品/類目」占「總商品/類目」集合的比例。假設系統的用戶集合為U,推薦系統給每個用戶推薦一個長度為N的物品列表R(u) ,總物品為N。那麼:
覆蓋率 = ΣR(u)N
Σ
R
(
u
)
N

意義:
描述推薦結系統對物品長尾發掘能力;
舉個例子,淘寶上商品千千萬萬,推薦系統能否保證讓新的一些商品有足夠的機會曝光出去呢?還是有些商品永遠都無法得到推薦曝光的機會。這個指標反應的就是這個情況,顯然物品的覆蓋率是達不到100%的,但是我們可以看類目的覆蓋率來進行衡量,假設全網所有的一級大類目一共2千個(和全網上億的物品相比非常的少),那麼推薦系統一天之內推薦出去的商品對應的一級類目,這個就是我們要衡量的標准。如果覆蓋率

㈦ 大數據處理需要用到的九種編程語言

大數據處理需要用到的九種編程語言

隨著大數據的熱潮不斷升溫,幾乎各個領域都有洪水傾瀉般的信息涌來,面對用戶成千上萬的瀏覽記錄、記錄行為數據,如果就單純的Excel來進行數據處理是遠遠不能滿足的。但如果只用一些操作軟體來分析,而不怎麼如何用邏輯數據來分析的話,那也只是簡單的數據處理。

替代性很高的工作,而無法深入規劃策略的核心。

當然,基本功是最不可忽略的環節,想要成為數據科學家,對於這幾個程序你應該要有一定的認識:

R

若要列出所有程序語言,你能忘記其他的沒關系,但最不能忘的就是R。從1997年悄悄地出現,最大的優勢就是它免費,為昂貴的統計軟體像是Matlab或SAS的另一種選擇。

但是在過去幾年來,它的身價大翻轉,變成了資料科學界眼中的寶。不只是木訥的統計學家熟知它,包括WallStreet交易員、生物學家,以及矽谷開發者,他們都相當熟悉R。多元化的公司像是Google、Facebook、美國銀行以及NewYorkTimes通通都使用R,它的商業效用持續提高。

R的好處在於它簡單易上手,透過R,你可以從復雜的數據集中篩選你要的數據,從復雜的模型函數中操作數據,建立井然有序的圖表來呈現數字,這些都只需要幾行程序代碼就可以了,打個比方,它就像是好動版本的Excel。

R最棒的資產就是活躍的動態系統,R社群持續地增加新的軟體包,還有以內建豐富的功能集為特點。目前估計已有超過200萬人使用R,最近的調查顯示,R在數據科學界里,到目前為止最受歡迎的語言,佔了回復者的61%(緊追在後的是39%的Python)。

它也吸引了WallStreet的注目。傳統而言,證券分析師在Excel檔從白天看到晚上,但現在R在財務建模的使用率逐漸增加,特別是可視化工具,美國銀行的副總裁NiallO』Conno說,「R讓我們俗氣的表格變得突出」。

在數據建模上,它正在往逐漸成熟的專業語言邁進,雖然R仍受限於當公司需要製造大規模的產品時,而有的人說他被其他語言篡奪地位了。

「R更有用的是在畫圖,而不是建模。」頂尖數據分析公司Metamarkets的CEO,MichaelDriscoll表示,

「你不會在Google的網頁排名核心或是Facebook的朋友們推薦演算法時看到R的蹤影,工程師會在R里建立一個原型,然後再到Java或Python里寫模型語法」。

舉一個使用R很有名的例子,在2010年時,PaulButler用R來建立Facebook的世界地圖,證明了這個語言有多豐富多強大的可視化數據能力,雖然他現在比以前更少使用R了。

「R已經逐漸過時了,在龐大的數據集底下它跑的慢又笨重」Butler說。

所以接下來他用什麼呢?

Python

如果說R是神經質又令人喜愛的Geek,那Python就是隨和又好相處的女生。

Python結合了R的快速、處理復雜數據采礦的能力以及更務實的語言等各個特質,迅速地成為主流,Python比起R,學起來更加簡單也更直觀,而且它的生態系統近幾年來不可思議地快速成長,在統計分析上比起R功能更強。

Butler說,「過去兩年間,從R到Python地顯著改變,就像是一個巨人不斷地推動向前進」。

在數據處理范疇內,通常在規模與復雜之間要有個取捨,而Python以折衷的姿態出現。IPythonNotebook(記事本軟體)和NumPy被用來暫時存取較低負擔的工作量,然而Python對於中等規模的數據處理是相當好的工具;Python擁有豐富的資料族,提供大量的工具包和統計特徵。

美國銀行用Python來建立新產品和在銀行的基礎建設介面,同時也處理財務數據,「Python是更廣泛又相當有彈性,所以大家會對它趨之若鶩。」O』Donnell如是說。

然而,雖然它的優點能夠彌補R的缺點,它仍然不是最高效能的語言,偶爾才能處理龐大規模、核心的基礎建設。Driscoll是這么認為的。

Julia

今日大多數的數據科學都是透過R、Python、Java、Matlab及SAS為主,但仍然存在著鴻溝要去彌補,而這個時候,新進者Julia看到了這個痛點。

Julia仍太過於神秘而尚未被業界廣泛的採用,但是當談到它的潛力足以搶奪R和Python的寶座時,數據黑客也難以解釋。原因在於Julia是個高階、不可思議的快速和善於表達的語言,比起R要快的許多,比起Python又有潛力處理更具規模的數據,也很容易上手。

「Julia會變的日漸重要,最終,在R和Python可以做的事情在Julia也可以」。Butler是這么認為的。

就現在而言,若要說Julia發展會倒退的原因,大概就是它太年輕了。Julia的數據小區還在初始階段,在它要能夠和R或Python競爭前,它還需要更多的工具包和軟體包。

Driscoll說,它就是因為它年輕,才會有可能變成主流又有前景。

Java

Driscoll說,Java和以Java為基礎的架構,是由矽谷里最大的幾家科技公司的核心所建立的,如果你從Twitter、Linkedin或是Facebook里觀察,你會發現Java對於所有數據工程基礎架構而言,是非常基礎的語言。

Java沒有和R和Python一樣好的可視化功能,它也不是統計建模的最佳工具,但是如果你需要建立一個龐大的系統、使用過去的原型,那Java通常會是你最基的選擇。

Hadoop and Hive

為了迎合大量數據處理的需求,以Java為基礎的工具群興起。Hadoop為處理一批批數據處理,發展以Java為基礎的架構關鍵;相較於其他處理工具,Hadoop慢許多,但是無比的准確和可被後端資料庫分析廣泛使用。和Hive搭配的很好,Hive是基於查詢的架構下,運作的相當好。

Scala

又是另一個以Java為基礎的語言,和Java很像,對任何想要進行大規模的機械學習或是建立高階的演算法,Scala會是逐漸興起的工具。它是善於呈現且擁有建立可靠系統的能力。

「Java像是用鋼鐵建造的;Scala則是讓你能夠把它拿進窯烤然後變成鋼的黏土」Driscoll說。

Kafka andStorm

說到當你需要快速的、實時的分析時,你會想到什麼?Kafka將會是你的最佳夥伴。其實它已經出現五年有了,只是因為最近串流處理興起才變的越來越流行。

Kafka是從Linkedin內誕生的,是一個特別快速的查詢訊息系統。Kafka的缺點呢?就是它太快了,因此在實時操作時它會犯錯,有時候會漏掉東西。

魚與熊掌不可兼得,「必須要在准確度跟速度之間做一個選擇」,Driscoll說。所以全部在矽谷的科技大公司都利用兩個管道:用Kafka或Storm處理實時數據,接下來打開Hadoop處理一批批處理數據系統,這樣聽起來有點麻煩又會有些慢,但好處是,它非常非常精準。

Storm是另一個從Scala寫出來的架構,在矽谷逐漸大幅增加它在串流處理的受歡迎程度,被Twitter並購,這並不意外,因為Twitter對快速事件處理有極大的興趣。

Matlab

Matlab可以說是歷久不衰,即使它標價很高;在非常特定的利基市場它使用的相當廣泛,包括密集的研究機器學習、信號處理、圖像辨識等等。

Octave

Octave和Matlab很像,除了它是免費的之外。然而,在學術信號處理的圈子,幾乎都會提到它。

GO

GO是另一個逐漸興起的新進者,從Google開發出來的,放寬點說,它是從C語言來的,並且在建立強大的基礎架構上,漸漸地成為Java和Python的競爭者。

這么多的軟體可以使用,但我認為不見得每個都一定要會才行,知道你的目標和方向是什麼,就選定一個最適合的工具使用吧!可以幫助你提升效率又達到精準的結果。

以上是小編為大家分享的關於大數據處理需要用到的九種編程語言的相關內容,更多信息可以關注環球青藤分享更多干貨

㈧ 網易雲音樂的歌單推薦演算法是怎樣的

「這個只能說是理論基礎。歌曲不考慮熱門冷門,同時不考慮用戶數和歌曲數計算復雜度的話第一一天內離線數據計算不完的(當然網易雲音樂用戶量小全量暴力計算當我沒說),實際應用起來復雜很多了。現在的推薦系統並不存在一種演算法通吃,除了演算法上的問題,還需要考慮基礎數據的影響因素,比如兩張歌單有多少歌曲重合,歌單的質量是怎麼樣的。」 我上一帖也說了,'向量夾角餘弦' 解決的是『量化顧客口味相似度』的問題(是最經典的解法,也有別的解法),不是有了它就能輕易實現第一類演算法的,難處在後面咯。繼續第一類演算法的話題,目標「每日歌曲推薦」(其實題主感興趣的是這個吧,旁邊『根據你喜歡的xxx推薦的yyy歌單』我覺得不咋樣)。首先就是如何定維度。 直接用『歌』當維度是不行的,第一是太多了算不過來,第二維度數一直猛漲也不是個事。用『歌單』或者『專輯』,『演唱/演奏者』呢?也有類似的困難。說到這里大家應該都意識到了,咱不是還有『tag』嘛!雲音樂初期,tag是可以由大家自己填的,我記得我填過『莫扎特』,『鋼協』,『交響』這樣的tag,現在都不見了吧。一段時間之後,tag無法自填了,只能從雲音樂給的tag lib中選,這肯定有原因的。我的推測就是,他們需要用tag來當作維度,所以不希望tag數經常變化。第一階段,他們需要搜集用戶的輸入來做出tag lib,第二階段,他們構建了多維度空間,就不希望再動維度了,因此關閉了自填tag的功能。假設就用tag做為維度,那麼第二個難處在於,維度上的'刻度'必須有正有負才好使,用戶沒有機會直接表達對tag的好惡(不能收藏,播放,跳過一個tag),如何定刻度呢。我認為每一首歌背後是有其所屬tags這個屬性的,這個屬性在UI上看不到很可能是因為比較容易引起口水。歌往往隸屬於很多歌單,而那些歌單都是有tags的,根據那些歌單的播放數收藏數分享數可以決定其'權威性',取'權威性'高的歌單的tag,就可以得到每首歌的tag屬性。然後用戶在表達對一首首歌的好惡的時候,其實就不知不覺地影響了他在相應維度上的刻度。假設維度和刻度都這樣解決,那麼我們可以對每個用戶做出『口味向量』了,接下來的難處是,啥時候算/如何保存『用戶相似性』?所有用戶兩兩算一下相似性,存為一個NxN的矩陣。

㈨ 技術解析Transwarp Inceptor是怎樣煉成的

技術解析Transwarp Inceptor是怎樣煉成的
當前Hadoop技術蓬勃發展,用於解決大數據的分析難題的技術平台開始涌現。Spark憑借性能強勁、高度容錯、調度靈活等技術優勢已漸漸成為主流技術,業界大部分廠商都提供了基於Spark的技術方案和產品。根據Databricks的統計,目前有11個商業的Spark版本。
在使用Spark作出計算平台的解決方案中,有兩種主流編程模型,一類是基於SparkAPI或者衍生出來的語言,另一種是基於SQL語言。SQL作為資料庫領域的事實標准語言,相比較用API(如MapReceAPI,SparkAPI等)來構建大數據分析的解決方案有著先天的優勢:一是產業鏈完善,各種報表工具、ETL工具等可以很好的對接;二是用SQL開發有更低的技術門檻;三是能夠降低原有系統的遷移成本等。因此,SQL語言也漸漸成為大數據分析的主流技術標准。本文將深入解析Inceptor的架構、編程模型和編譯優化技術,並提供基準測試在多平台上的性能對比數據。
1.Inceptor架構
TranswarpInceptor是基於Spark的分析引擎,如圖1所示,從下往上有三層架構:最下面是存儲層,包含分布式內存列式存儲(TranswarpHolodesk),可建在內存或者SSD上;中間層是Spark計算引擎層,星環做了大量的改進保證引擎有超強的性能和高度的健壯性;最上層包括一個完整的SQL99和PL/SQL編譯器、統計演算法庫和機器學習演算法庫,提供完整的R語言訪問介面。
TranswarpInceptor可以分析存儲在HDFS、HBase或者TranswarpHolodesk分布式緩存中的數據,可以處理的數據量從GB到數十TB,即使數據源或者中間結果的大小遠大於內存容量也可高效處理。另外TranswarpInceptor通過改進Spark和YARN的組合,提高了Spark的可管理性。同時星環不僅僅是將Spark作為一個預設計算引擎,也重寫了SQL編譯器,提供更加完整的SQL支持。
同時,TranswarpInceptor還通過改進Spark使之更好地與HBase融合,可以為HBase提供完整的SQL支持,包括批量SQL統計、OLAP分析以及高並發低延時的SQL查詢能力,使得HBase的應用可以從簡單的在線查詢應用擴展到復雜分析和在線應用結合的混合應用中,大大拓展了HBase的應用范圍。
2.編程模型
TranswarpInceptor提供兩種編程模型:一是基於SQL的編程模型,用於常規的數據分析、數據倉庫類應用市場;二是基於數據挖掘編程模型,可以利用R語言或者SparkMLlib來做一些深度學習、數據挖掘等業務模型。
2.1SQL模型
TranswarpInceptor實現了自己的SQL解析執行引擎,可以兼容SQL99和HiveQL,自動識別語法,因此可以兼容現有的基於Hive開發的應用。由於TranswarpInceptor完整支持標準的SQL 99標准,傳統資料庫上運行的業務可以非常方便的遷移到Transwarp Inceptor系統上。此外Transwarp Inceptor支持PL/SQL擴展,傳統數據倉庫的基於PL/SQL存儲過程的應用(如ETL工具)可以非常方便的在Inceptor上並發執行。另外Transwarp Inceptor支持部分SQL 2003標准,如窗口統計功能、安全審計功能等,並對多個行業開發了專門的函數庫,因此可以滿足多個行業的特性需求。
2.2數據挖掘計算模型
TranswarpInceptor實現了機器學習演算法庫與統計演算法庫,支持常用機器學習演算法並行化與統計演算法並行化,並利用Spark在迭代計算和內存計算上的優勢,將並行的機器學習演算法與統計演算法運行在Spark上。例如:機器學習演算法庫有包括邏輯回歸、樸素貝葉斯、支持向量機、聚類、線性回歸、關聯挖掘、推薦演算法等,統計演算法庫包括均值、方差、中位數、直方圖、箱線圖等。TranswarpInceptor可以支持用R語言或者SparkAPI在平台上搭建多種分析型應用,例如用戶行為分析、精準營銷、對用戶貼標簽、進行分類。
3.SQL編譯與優化
TranswarpInceptor研發了一套完整的SQL編譯器,包括HiveQL解析器、SQL標准解析器和PL/SQL解析器,將不同的SQL語言解析成中間級表示語言,然後經過優化器轉換成物理執行計劃。SQL語言解析後經過邏輯優化器生成中間級表示語言,而中間表示語言再經過物理優化器生成最終的物理執行計劃。從架構上分,邏輯優化器和物理優化器都包含基於規則的優化模塊和基於成本的優化模塊。
為了和Hadoop生態更好的兼容,Inceptor為一個SQL查詢生成MapRece上的執行計劃和Spark上的執行計劃,並且可以通過一個SET命令在兩種執行引擎之間切換。
3.1SQL編譯與解析
TranswarpInceptor的SQL編譯器會根據輸入的SQL查詢的類型來自動選擇不同的解析器,如PL/SQL存儲過程會自動進入PL/SQL解析器並生成一個SparkRDD的DAG從而在Spark平台上並行計算,標准SQL查詢會進入SQL標准解析器生成Spark或MapRece執行計劃。由於HiveQL和標準的SQL有所出入,為了兼容HiveQL,Transwarp Inceptor保留了HiveQL解析器,並可以對非標准SQL的Hive查詢生成Spark或者Map Rece執行計劃。
3.1.1SQL標准解析器
TranswarpInceptor構建了自主研發的SQL標准解析器,用於解析SQL99& SQL 2003查詢並生成Spark和Map Rece的執行計劃。詞法和語法分析層基於Antlr語法來構建詞法範式,通過Antlr來生成抽象語義樹,並會通過一些上下文的語義來消除沖突並生成正確的抽象語義樹。語義分析層解析上層生成的抽象語義樹,根據上下文來生成邏輯執行計劃並傳遞給優化器。首先Transwarp Inceptor會將SQL解析成TABLE SCAN、SELECT、FILTER、JOIN、UNION、ORDER BY、GROUP BY等主要的邏輯塊,接著會根據一些Meta信息進一步細化各個邏輯塊的執行計劃。如TABLE SCAN會分成塊讀取、塊過濾、行級別過濾、序列化等多個執行計劃。
3.1.2PL/SQL解析器
PL/SQL是Oracle對SQL語言的模塊化擴展,已經在很多行業中有大規模的應用,是數據倉庫領域的重要編程語言。
為了讓存儲過程在Spark上有較好的性能,PL/SQL解析器會根據存儲過程中的上下文關系來生成SQLDAG,然後對各SQL的執行計劃生成的RDD進行二次編譯,通過物理優化器將一些沒有依賴關系的RDD進行合並從而生成一個最終的RDDDAG。因此,一個存儲過程被解析成一個大的DAG,從而stage之間可以大量並發執行,避免了多次執行SQL的啟動開銷並保證了系統的並發性能。
解析並生成SQL級別的執行計劃
3.2SQL優化器
TranswarpInceptor使用Spark作為默認計算引擎,並且開發了完善的SQL優化器,因此在大量的客戶案例性能測試中,TranswarpInceptor的性能領先MapRece 10-100倍,並超越部分開源MPP資料庫。SQL優化器對平台性能的提升居功至偉。
3.2.1基於規則的優化器(RuleBasedOptimizer)
目前為止,TranswarpInceptor共實現了一百多個優化規則,並且在持續的添加新的規則。按照功能劃分,這些規則主要分布在如下幾個模塊:
文件讀取時過濾
在文件讀取時過濾數據能夠最大化的減少參與計算的數據量從而最為有效的提高性能,因此TranswarpInceptor提供了多個規則用於生成表的過濾條件。對於一些SQL中的顯示條件,TranswarpInceptor會盡量將過濾前推到讀取表中;而對於一些隱式的過濾條件,如可以根據joinkey生成的過濾規則,Inceptor會根據語義保證正確性的前提下進行規則生成。
過濾條件前置
TranswarpInceptor能夠從復雜的組合過濾條件中篩選出針對特定表的過濾規則,然後通過SQL語義來確定是否能將過濾條件前推到盡量早的時候執行。如果有子查詢,過濾條件可以遞歸前推入最低層的子查詢中,從而保證所有的冗餘數據被刪除。
超寬表的讀取過濾
對一些列超多的表進行處理的時候,TranswarpInceptor首先會根據SQL語義來確定要讀取的列,並在讀取表的時候進行跨列讀取減少IO和內存消耗。而如果表有過濾條件,Inceptor會做進一步優化,首先只讀取過濾條件相關的列來確定該行記錄是否需要被選擇,如果不是就跳過當前行的所有列,因此能夠最大程度上的減少數據讀取。在一些商業實施中,這些優化規則能夠帶來5x-10x的性能提升。
Shuffle Stage的優化與消除
Spark的shuffle實現的效率非常低,需要把結果寫磁碟,然後通過HTTP傳輸。TranswarpInceptor添加了一些shuffle消除的優化規則,對SQL的DAG中不必要或者是可以合並的shufflestage進行消除或者合並。對於必須要做Shuffle的計算任務,Inceptor通過DAGScheler來提高shuffle的效率:MapTask會直接將結果返回給DAGScheler,然後DAGScheler將結果直接交給Rece Task而不是等待所有Map Task結束,這樣能夠非常明顯的提升shuffle階段的性能。
Partition消除
TranswarpInceptor提供單一值Partition和RangePartition,並且支持對Partition建Bucket來做多次分區。當Partition過多的時候,系統的性能會因為內存消耗和調度開銷而損失。因此,Inceptor提供了多個規則用於消除不必要的Partition,如果上下文中有隱式的對Partition的過濾條件,Inceptor也會生成對partition的過濾規則。
3.2.2基於成本的優化器(CostBasedOptimizer)
基於規則的優化器都是根據一些靜態的信息來產生的,因此很多和動態數據相關的特性是不能通過基於規則的優化來解決,因此TranswarpInceptor提供了基於成本的優化器來做二次優化。相關的原始數據主要來自Meta-store中的表統計信息、RDD的信息、SQL上下文中的統計信息等。依賴於這些動態的數據,CBO會計算執行計劃的物理成本並選擇最有效的執行計劃。一些非常有效的優化規則包括如下幾點:
JOIN順序調優
在實際的案例中,join是消耗計算量最多的業務,因此對join的優化至關重要。在多表JOIN模型中,TranswarpInceptor會根據統計信息來預估join的中間結果大小,並選擇產生中間數據量最小的join順序作為執行計劃。
JOIN類型的選擇
TranswarpInceptor支持Left-mostJoinTree 和 Bush Join Tree,並且會根據統計信息來選擇生成哪種Join模型有最佳性能。此外,Transwarp Inceptor會根據原始表或者中間數據的大小來選擇是否開啟針對數據傾斜模型下的特殊優化等。此外,針對HBase表是否有索引的情況,Transwarp Inceptor會在普通Join和Look-up Join間做個均衡的選擇。
並發度的控制
Spark通過線程級並發來提高性能,但是大量的並發可能會帶來不必要的調度開銷,因此不同的案例在不同並發度下會有最佳性能。TranswarpInceptor通過對RDD的一些屬性進行推算來選擇最佳並發控制,對很多的案例有著2x-3x的性能提升。
4.TranswarpHolodesk內存計算引擎
為了有效的降低SQL分析的延時,減少磁碟IO對系統性能的影響,星環科技研發了基於內存或者SSD的存儲計算引擎TranswarpHolodesk,通過將表數據直接建在內存或者SSD上以實現SQL查詢全內存計算。另外TranswarpHolodesk增加了數據索引功能,支持對多個數據列建索引,從而更大程度的降低了SQL查詢延時。
4.1存儲格式
TranswarpHolodesk基於列式存儲做了大量的原創性改進帶來更高的性能和更低的數據膨脹率。首先數據被序列化後存儲到內存或SSD上以節省者資源佔用。如圖3所示,每個表的數據被存儲成若干個Segment,每個Segment被劃分成若干個Block,每個Block按照列方式存儲於SSD或內存中。另外每個Block的頭部都加上Min-MaxFilter和BloomFilter用於過濾無用的數據塊,減少不必要的數據進入計算階段。
TranswarpHolodesk根據查詢條件的謂詞屬性對每個數據塊的對應列構建數據索引,索引列採用自己研發的Trie結構進行組織存儲,非索引列採用字典編碼的方式進行組織存儲。Trie不僅能對具有公共前綴的字元串進行壓縮,而且可以對輸入的字元串排序,從而可以利用二分查找快速查詢所需數據的位置,從而快速響應查詢需求。
HDFS2.6支持StorageTier讓應用程序可以選擇存儲層為磁碟或者SSD,但是沒有專用的存儲格式設計是無法有效利用SSD的讀寫吞吐量和低延,因此現有的Text以及行列混合(ORC/Parquet)都不能有效的利用SSD的高性能。為此驗證存儲結構對性能的影響,我們將HDFS構建在SSD上並選用某基準測試來做了進一步的性能對比,結果如圖4所示:採用文本格式,PCI-ESSD帶來的性能提升僅1.5倍;採用專為內存和SSD設計的Holodesk列式存儲,其性能相比較SSD上的HDFS提升高達6倍。
4.2性能優勢
某運營商客戶在12台x86伺服器上搭建了TranswarpInceptor,將TranswarpHolodesk配置在PCIE-SSD上,並與普通磁碟表以及DB2來做性能對比測試。最終測試數據如圖5所示:
在純粹的count測試一項,Holodesk性能相對於磁碟表最高領先32倍;對於join測試一項,TranswarpHolodesk最高領先磁碟表多達12倍;在單表聚合測試中,Holodesk提升倍數達10~30倍。另外TranswarpHolodesk在和DB2的對比中也表現優秀,兩個復雜SQL查詢在DB2資料庫中需要運行1小時以上,但是在使用TranswarpHolodesk均是分鍾級和秒級就返回結果。
內存的價格大約是同樣容量SSD的十倍左右,為了給企業提供更高性價比的計算方案,TranswarpHolodesk針對SSD進行了大量的優化,使得應用在SSD上運行具有與在內存上比較接近的性能,從而為客戶提供了性價比更高的計算平台。
在對TPC-DS的IO密集型查詢的測試中,無論上構建在PCI-ESSD還是內存上,Holodesk對比磁碟表有一個數量級上的性能提升;而SSD上的Holodesk性能只比內存差10%左右。
5.穩定的Spark執行引擎
企業目前應用開源Spark的主要困難在穩定性、可管理性和功能不夠豐富上。開源Spark在穩定性上還有比較多的問題,在處理大數據量時可能無法運行結束或出現Outofmemory,性能時快時慢,有時比Map/Rece更慢,無法應用到復雜數據分析業務中。
TranswarpInceptor針對各種出錯場景設計了多種解決方法,如通過基於成本的優化器選擇最合適的執行計劃、加強對數據結構內存使用效率的有效管理、對常見的內存出錯問題通過磁碟進行數據備份等方式,極大提高了Spark功能和性能的穩定性,上述問題都已經解決並經過商業案例的考驗。TranswarpInceptor能穩定的運行7*24小時,並能在TB級規模數據上高效進行各種穩定的統計分析。
6.SQL引擎效能驗證
TPC-DS是TPC組織為DecisionSupportSystem設計的一個測試集,包含對大數據集的統計/報表生成/聯機查詢/數據挖掘等復雜應用,測試用的數據有各種不同的分布與傾斜,與真實場景非常接近。隨著國內外各代表性的Hadoop發行版廠商以TPC-DS為標准測評產品,TPC-DS也就逐漸成為了業界公認的Hadoop系統測試准則。
6.1驗證對比的平台和配置
我們搭建了兩個集群分別用於TranswarpInceptor與ClouderaDataHub/Impala的測試。
6.2TranswarpInceptorVS Cloudera Impala
TranswarpInceptor由於有完善的SQL支持,能夠運行全部所有的99個SQL查詢。而由於Cloudera官方發布的TPC-DS測試集只包含19個SQL案例,因此我們只能運行這19個SQL,實驗證明這部分查詢在Impala上全部正常運行完成。
6.3TranswarpInceptorVS Map Rece
我們使用了同樣的硬體和軟體配置完成和開源的Hive執行效率相比,TranswarpInceptor能夠帶來10x-100x的性能提升。圖8是TPC-DS的部分SQL查詢在Inceptor和CDH5.1Hive的性能提升倍數,其中最大的提升倍數竟可達到123倍。
7.結語
隨著在大數據領域國內外開始處於同一起跑線,我們相信像星環科技這樣國內具有代表性的Hadoop發行版廠商將在中國的廣闊市場空間中獲得長足發展,並且由於中國市場激烈的競爭與磨練,逐步打磨出超越國外先進廠商的技術與實力。
劉汪根。2013年加入星環,作為早期員工參與了星環大數據平台的構建,現擔任數據平台部研發經理,主要負責與管理星環大數據平台數據平台的研發工作,如SQL編譯器,Spark執行引擎等工作,產品涵括TranswarpInceptor/TranswarpStream等軟體。
【編者按】星環科技從2013年6月開始研發基於Spark的SQL執行引擎,在2013年底推出TranswarpInceptor1.0,並落地了國內首個7x24小時的商用項目。經過1年多的持續創新與改進,星環已經在國內落地了數十個Inceptor的商用項目。這是一篇星環Spark解決方案的技術解析,也是Spark用戶可以效仿的優化之道。

熱點內容
為什麼安卓手機玩游戲沒有聲音 發布:2025-01-18 08:11:56 瀏覽:420
androidtextview字體 發布:2025-01-18 07:51:18 瀏覽:555
c語言在哪下載 發布:2025-01-18 07:43:29 瀏覽:566
c語言pq 發布:2025-01-18 07:42:40 瀏覽:83
個人精選蘿莉本解壓碼 發布:2025-01-18 07:42:37 瀏覽:696
演算法是什麼意思 發布:2025-01-18 07:42:02 瀏覽:732
安卓手機怎麼加速進程 發布:2025-01-18 07:29:48 瀏覽:681
塞恩拐彎腳本 發布:2025-01-18 07:29:37 瀏覽:742
師資配置含哪些內容 發布:2025-01-18 07:17:35 瀏覽:706
江西腳本 發布:2025-01-18 07:14:38 瀏覽:392