大資料workshop:《雲資料·大計算:海量日誌資料分析與應用》之《社交資料分析:好友推薦》篇

禕休發表於2017-03-21

大資料workshop:《雲資料·大計算:海量日誌資料分析與應用》之《社交資料分析:好友推薦》篇

實驗背景介紹

瞭解更多2017雲棲大會·成都峰會 TechInsight & Workshop.

本手冊為雲棲大會Workshop《雲端計算·大資料:海量日誌資料分析與應用》的《社交資料分析:好友推薦》篇而準備。主要闡述如何在大資料開發套件中使用MR實現好友推薦。

MapReduce應用場景

  • 搜尋:網頁爬取、倒排索引、PageRank;
  • Web訪問日誌分析:分析和挖掘使用者在web上的訪問、購物行為特徵,實現個性化推薦;
  • 文字統計分析:比如莫言小說的WordCount、詞頻TFIDF分析;學術論文、專利文獻的引用分析和統計;
  • 海量資料探勘:非結構化資料、時空資料、影像資料的挖掘;
  • 機器學習:監督學習、無監督學習、分類演算法如決策樹、SVM等;
  • 自然語言處理:基於大資料的訓練和預測;基於語料庫構建單詞同現矩陣,頻繁項集資料探勘、重複文件檢測等;
  • 廣告推薦:使用者點選(CTR)和購買行為(CVR)預測。

涉及大資料產品

好友推薦MapReduce演算法分析

現在,社交網路已經成為影響力巨大的資訊平臺,社交網站中,使用者可以通過“你可能感興趣的人”途徑增加交友方式。“你可能感興趣的人”也稱作“好友推薦”, 它主要是通過查詢兩個非好友之間的共同好友情況來實現的。下面,將通過一個例子,簡單介紹通過MapReduce的方式實現好友推薦功能。

例如:A,B,C,D,E五個人的好友關係如下圖,其中實線表示互為好友關係。那麼,如何獲取兩個不是好友的兩個人之間的好友數?並以此為參考,進行對使用者推薦陌生人。

1

首先,將好友關係分配到兩個Map進行處理,其中每個Map包含3條好友關係。對每一條好友關係進行拆分,若Key中的兩個人為朋友,則記錄value值為0,否則value值為1。將拆分的結果進行排序,其中(A B)和(B A)作為同一個key(A B)。

2

然後,將分別對兩個Map處理的記錄進行初步合併,若兩個記錄的Key值相同且每條記錄的Value都不為0,則Value值加1。注意:在Combine階段,必須保留Value為0的記錄,否則,在Reduce階段,獲取的結果會出錯。

3

最後,通過Reduce方式,合併兩個Map處理的Combine結果。首先,若兩個記錄的Key值相同且每條記錄的Value都不為0,則Value值加1;然後,將Value值為0的記錄刪除;最後,獲取不為好友的兩個使用者之間的公共好友數:Key為兩個不為好友的使用者,Value是兩個不是好友的使用者之間的共同好友數。社交網站或者APP可以根據這個數值對不是好友的兩個使用者進行推薦。

4

實驗詳情

下載實驗資料

點選下載實驗資料:friends_in_data.csv和MR jar包:friends_mr.jar至本地。

進入大資料開發套件

確保阿里雲賬號處於登入狀態。

專案列表

  • step2:點選已經建立的專案空間名稱,進入大資料開發套件。

點選進入專案

進入大資料開發套件

新建資料表

繼上實驗《資料採集:日誌資料上傳》和《資料加工:使用者畫像》中已經新建指令碼檔案,可以直接切換至指令碼開發tab下,雙擊開啟create_table_ddl指令碼檔案。若無新建指令碼檔案可通過如下詳細步驟進行建立指令碼檔案。

建表

附建表SQL

drop table if exists dual;--建立系統dual
create table dual(id bigint);--如project中不存在此偽表,則需建立並初始化資料
insert overwrite table dual select count(*)from dual;--向系統偽表初始化資料
---建立好友推薦MR的資料輸入表.其中uid表示某個使用者;friends表示uid使用者的好友
create table friends_in (uid string, friends string);
---建立好友推薦MR的資料輸出表.其中userA表示某個使用者;userB表示不是userA的使用者,cnt表示userA和userB之間的共同好友數。
create table friends_out (userA string, userB string, cnt bigint);

匯入本地資料

  • step1:完成輸入和輸出表的建立後,點選頂部功能欄中的匯入,匯入本地資料。然後,開啟本地儲存的檔案friends_in_data.csv(點選本小節頂部的附件名“friends_in_data.csv” ,下載本次實驗的測試資料)。

選擇匯入本地資料

  • step2:所有配置均設為預設,並檢視匯入的資料。完成後,點選下一步

注意:在真實的工作環境中,資料必須以txt或csv的檔案型別匯入。

本地資料匯入框

  • step3:在本地資料匯入的頁面的“匯入至表”中,輸入friends_in,也就是將本次實驗的測試資料,匯入到好友推薦的輸入表friends_in中。確定目標欄位源欄位匹配。完成後點選匯入。開始執行匯入操作。由於資料量較大,請等待1-2分鐘。

本地資料匯入2

  • step4:完成表資料匯入後,頁面會自動退出匯入介面。點選頁面左側欄中的表查詢tab頁,雙擊開啟表friends_in。然後,點選資料瀏覽,就可以快速檢視friends_in表中存
    儲的資料。若顯示的資料與檔案 friends_in_data.csv資料相同,則證明本次實驗的測試資料匯入成功。

資料預覽

新增MR資源

  • step1:點選最左側欄中的資源管理,然後在左側欄的資源管理列表的頂部,點選最右側的第一個圖示上傳資源,開始配置上傳資源資訊。

資源管理

  • step2:在彈出的對話方塊中,配置如下所示的上傳資源資訊。完成後,點選提交,將本地的好友推薦Jar包上傳到Data IDE環境中。

資源上傳

在頁面左側的資源管理下,可以檢視到上傳成功的Jar包friends_mr.jar

確認資源

測試並驗證好友推薦

  • step1:點選頁面頂層欄中的新建新建任務,開始建立本次實驗的MR任務。

新建任務

  • step2:在彈出的對話方塊中,選擇新建任務的任務型別工作流任務,並輸入任務名稱為friends_odps_mr。預設“排程型別”為“同期排程”。完成後,點選“建立”。

配置任務

  • step3:此時,右側頁面變為friends_odps_mr的畫布,拖右側節點元件中的OPEN MR到右側畫布的空白位置。

新建mr節點

在畫布上,可以檢視到一個名稱為friends_mr的OPEN MR任務節點。雙擊,進入MR任務的編輯頁面。

MR節點

  • step4:輸入如下配置資訊,完成後,點選頂層欄中的儲存圖示,儲存MR任務的配置資訊。點選執行,執行本次配置的OPEN MR任務。

配置MR

配置專案說明:

  • MRJar包:點選文字框,並選擇friends_mr.jar
  • 資源:預設設定為friends_mr.jar
  • 輸入表:輸入friends_in
  • mapper:輸入friends_mr_odps.FriendsMapper,此為Jar包中Mapper的class全名
  • reducer:輸入friends_mr_odps.FriendsReducer,此為Jar包中Reducer的class全名
  • combiner:輸入friends_mr_odps.FriendsCombiner,此為Jar包中Combiner的class全名
  • 輸出表:輸入friends_out
  • 輸出Key:輸入userA:String, userB:String
  • 輸出Val:輸入cnt:Bigint
  • step5:在底部的日誌中,可以檢視到執行狀態和執行結果。大約40s左右,頁面顯示“Current task status:FINISH”,表示已執行結束。

執行成功

  • step6:在上述建表指令碼檔案中輸入如下的SQL命令,並點選執行。查詢共同好友超過2個的資料資訊。

資料預覽SQL

SELECT * FROM friends_out WHERE cnt>2 order by cnt desc limit 100;

恭喜大家完成《雲資料·大計算:海量日誌資料分析與應用》的Workshop,基於此相信大家也掌握了MaxCompute、大資料開發套件、Quick BI的基本操作,也能夠完成自己公司或個人的一些真實需求。關於更多的詳細內容,可以點選瞭解更多阿里雲數加


相關文章