摘要:本次由阿里雲駐雲科技資深架構師翟永東帶來了“基於 MaxCompute 搭建社交好友推薦系統”為主題的分享,主要對大數據在好友推薦系統中的應用、好友推薦系統的分析模型、好友推薦系統在阿里雲上的實現方式和 MaxCompute 技術進行了精彩的介紹。
大數據在好友推薦系統中的應用
給大家分享一下基於 MaxCompute 搭建社交好友推薦系統,使用 MaxCompute 阿里的大數據計算的方法可以做哪些事情,如果說是以社交好友的推薦,來給大家去演示一下。好友推薦系統它的一個場景介紹,現在大家都在講大數據,如果想去使用這些數據,我們認為它需要具備三個要素,第一個要素是海量的數據,數據量越多越好,只有數據量達到了足夠大,我們才能夠成為一個數據裡面潛在去挖掘出來。第二個是處理數據的能力,有了這樣很高的快速處理數據的能力,可以讓我們更快的去把數據裡面的信息挖掘出來。第三個是商業變現的一個場景,我們採集大數據的時候,並不是數據越多越好,一定要有一個具體的場景。以推薦系統為例來看一下大數據的一個應用。
左邊是支付寶,在支付寶一打開的時候,下面會有一欄推薦可能是你的好友,一般的話下面的那些人都是你認識的,可能還沒加他們為好友。右側是 Linkin,它是一個求職社交網站,Linkin 也會給你這樣的一個推薦,會告訴你哪一些用戶是你潛在的好友,而且 Linkin 會告訴你這個好友跟你是一度的關係的還是兩度的關係或者是三度的關係。潛在關聯性高的,會在前面直接顯示出來,潛在關聯性沒有那麼高的也會
在後面顯示出來,這兩個都是典型的一個好友推薦。
進行好友推薦的時候,怎麼給用戶進行推薦,首先這兩個人是非好友的關係,接著我們去看一下他們倆潛在共同好友的處理,通過這種方式去給用戶推送,比方說潛在好友數量多,我就認為這兩個人是好友關係,就是通過這種方式來實現的。
上圖的右側是人與人之間的一個社交關係的服務,比如說 A 跟 B 是一個好友,我們可以通過這五個方式畫出來,讓機器去分析這些數據,需要把右邊這種社交的關係,轉換成機器可以識別的數據,轉換成左側這樣的二維表的數據,比如說 A 跟 B、C、D 他們之間是好友,我們左側是 A 跟 B、C、D 是好友關係,剩下這些也是類似的,這樣就可以把這個表傳到機器裡面進行分析,比方說通過分析之後,發現 A 跟 E
有一個共同好友,B 跟 D 有兩個共同好友,然後 C 跟 E 有一個共同好友。這個時候就可以推薦 B 跟 D 他兩個是一個潛在的好友,而排在前面,A 跟 E 或者 C 跟 E 排在概率往下,稍微低一些,潛在好友多的排在前面,潛在好友少的排在後面,通過這種方式來進行排列,這個是我們期望的結果。
好友推薦系統的分析模型
我們怎麼來去計算呢?我們一般使用方式是什麼呢?使用的是 MapReduce 這樣的一個計算模型,MapReduce 是一種編程模型,用於大規模數據集的並行運算,它由三部分組成分別是 Map、Combine、Reduce。以好友推薦這樣的一個場景為例。
首先輸入左側機器可以識別的數據,輸入之後,在 Map 端先把數據做一個拆分,拆分成兩份不同的數據,在拆分的同時把它轉換成 key、value 的類型,比方說 A、B、D、E 這幾行數據轉換成什麼呢? A 跟 B,然後 value 是零,零代表他們兩個已經是好友。如果兩個不是好友的話,自定義這一行數據,B 跟 D 不是好友,就把他的值視為 1。下面的 B、E,還有 D 跟 E 也是 1。把原來一行數據轉換成 Key、Value這個形式的數據,類似於右邊這樣的數據,上面是 key、value 的一個類型,下面也是類似的。這個是在 Map 做的事情,把這個數據通過兩個 key、value 進行一個拆分,轉化成 key、value 這樣的一個類型。
Combine 是對數據先做一個本地的彙總,先看到有一些數據是重複的,比如說A 跟 B 是零,A 跟 B 是零,出現了兩次,這個時候就存一個就可以。其他類似的,這樣我把這些數據在本地做完彙總,類似於這張表,這兩個數據。
接著是第三步是 Reduce 階段,Reduce 是對這些數據進行一個彙總,把兩邊數據彙總到一起,然後對每一個 Key 值對應唯一的一個 value 值做一個彙總,這個就是它最終計算的一個結果。如果兩個用戶已經是好友了,Value 值是零的話,不需要再給他推薦。所以說 A、B 如果是零的話就剔掉,只需要知道它的 value 值是大於零的,有潛在好友,同時這兩個人目前還是非好友的關係,這個就達到了想要
的效果。
好友推薦系統在阿里雲上的實現方式
好友推薦阿里雲實現整個的架構是怎麼樣的呢?比方現在有一個社交軟件是一個業務系統,前端使用阿里雲的雲服務器 ECS 去部署整個的社交的軟件的應用,入庫的一些數據存到阿里的 RDS,這個就是當前的一個社交應用系統。業務系統裡面產生了一個數據,怎麼來對數據進行分析,首先需要在數據庫裡邊把這個數據提取出來,提取到阿里雲的大計算服務 MaxCompute 裡面,很類似於我們傳統做數倉的時
候 ETL 的一個過程,會利用阿里雲的大數據開發平臺對數據進行分析和處理。
使用它可以快速便捷的去開發我們數據植入或者數據這樣的一個流程,這個就是會使用大數據開發平臺和大數據製造,結果是一個數據分析結果,還需要前端的應用數據對分析出來的結果展示出來。
MaxCompute 的技術特點
對於 MaxCompute 的一些技術特點主要有一下幾點:
(1)分佈式:分佈式集群、跨集群技術、可靈活擴展。
(2)安全性:從安全性來講具有自動存儲糾錯、沙箱機制、多分備份。
(3)易用:具有標準 API、全面支持 SQL、上傳下載工具。
(4)權限控制:多租戶管理、用戶權限策略、數據訪問策略。
MaxCompute 的使用場景
對於 MaxCompute 的使用的場景,可以使用 MaxCompute 搭建自己的一個
數據倉庫,同時,MaxCompute 還可以提供一種分佈式的應用系統,比方說可以
通過圖計算,或者通過有效的寬幅的方式,可以搭建一個工作流;比方說數據分析
並不是說只分析一天就不分析了,其實是週期性的。如果數據每天要分析一次,可
以在 MaxCompute 裡面生成那樣的任務工作流,設置一個週期性的調度,每天要
讓它調度一次,MaxCompute 可以按照設計好的工作流,調動週期,然後去運行;
MaxCompute 在機器學習裡面也是有用的,因為機器學習會用到 MaxCompute 分
析出來的數據,其他相類似的服務對數據進行分析處理,分析出來的結果數據放到機
器學習平臺裡面,讓機器通過一些算法一些模型,去學習這裡邊的數據,生成一個希
望達到的一個模型。
大數據開發套件 DataIDE
另 外 一 個 除 了 MaxCompute 之 外 還 有 一 個 會 用 到 一 個 大 數 據 開 發 操 作DateIDE,大數據開發套件 DataIDE(現名:數據工場 DataWorks)提供一個高效、安全的離線數據開發環境。為什麼介紹它呢?是因為 DateIDE 只是對數據任務工作流的一個開發,其實底層的數據處理,數據分析,都是在 MaxCompute 上完成,可以簡單理解為DateIDE 就是一個圖象化的數據開發的服務,它是為了幫助我們更好去使用 MaxCompute。也可以看到,這我們可以在 DateIDE 進行一個開發,不需要直接在MaxCompute 裡面進行開發了,在 MaxCompute 開發的一個效果,跟在DateIDE 裡面開發的效果對比。
MaxCompute 的應用開發流程
MaxCompute 的應用開發流程一共需要六步分別是:
(1)安裝配置環境
(2)開發 MR 程序
(3)本地模式測試腳本
(4)導處 jar 包
(5)上傳到 MaxCompute 項目空間
(6)在 MaxCompute 中使用 MR
下面我們以一個好友推薦的事例來詳細講解一下這個過程。首先需要去安裝MaxCompute 客戶端,使用它的好處是可以在本地通過命令的方式去遠程使用阿里
雲的 MaxCompute,在本地只需要配置MaxCompute 信息就可以。另外還需要去配置自己的一個開發環境,因為現在阿里雲的 MaxCompute 主要是兩種語言,一種是 Java 一種是 Eclipse。然後新建項目,在開發新建項目的時候,大家可以看到這個紅包,這個紅包就是需要配置本地的客戶端的信息。在進入到寫代碼的過程 。
接下來就是簡單的測試,開發之後要測試,這個代碼是不是按照設想的方式去工作的。接著這邊輸入的是一個測試數據,這個輸出的數據類別,就是輸出的這樣的一個表格,表格有三列,第一類是用戶 A,第二類是用戶 B,第三類是兩個潛在的共同好友的數量,只需要關注這三個數據就可以,然後就可以測試。接著第三個本地運行的數據的代碼,運行的結果就是通過本地的開發測試,在本地測試的時候這邊有一個
數據,你第一步需要選擇是使用哪一個的一個項目處理。第二個要選擇輸入表和輸出表,要告訴他輸出表是哪個,輸出表的目的是什麼,告訴這個程序,你輸出的結果保存在表裡面,配置好點擊運行這個結果就出來了。
本地開發測試成功之後,接著要把它打成一個 Jar 包,然後上傳到阿里雲上,就是上傳到 MaxCompute 的集群裡邊。第二個打完 Jar 包以後添加資源,下面就把剛剛輸出的 Jar 包,通過資源的管理,把剛剛輸入的 Jar 包上傳上來。本地開發測試好的一個 MR 的 Jar 包已經上傳到 MaxCompute 集群裡邊。
上傳好了之後就可以使用它,去新建一個任務,然後這個任務去起個名字,這個任務跟哪一個 Jar 包相關聯,接著是 OPENBMR,我們選的是 MR 的程序,所以裡面選的是 OPENMR 模塊,生成這樣的一個任務,進入到編輯頁面,在編輯頁面裡面。首先告訴它,這個 OPENMR 這樣的一個任務,使用的是上傳的好友推薦的一個 Jar包,最下面告訴它 Jar 包裡面的程序的邏輯是什麼,在這個裡面制定好之後點擊運行結果就會出來。這個就是我們在本地開發測試,把資源上傳到 MaxCompute 的集群裡面,接著在集群裡面去使用我在本地開發好的 Jar 包,這個就是整個的一個開發和部署的一個流程。