基於hadoop構建智能推薦系統:第1篇 用戶行爲數據分析並導出到hdfs

這個分類 我主要想分享基於hadoop構建智能推薦系統的過程思路、程序設計和系統架構方面的一些技巧心得,至於hadoopsqoophbase的安裝和使用我就很少講了,網上已經有不少這方面的文章了 mysql

讓咱們直奔主題吧。 算法

1、 咱們要搭建一個智能推薦系統最重要的是什麼呢?不是算法、也不是系統的自己,最關鍵是準確分析用戶的行爲數據,最終得出一個用戶偏好表。有了這個用戶偏好 表,咱們能夠作的事太多了,好比計算用戶的類似度、計算物品的類似度、把用戶按照行爲進行聚類。。。可是這一切的前提都必須有一個「用戶偏好表」(如圖表1-1)。 sql

圖表1-1  用戶偏好表 shell

Uid(用戶id 數據庫

Itemid(物品id 架構

Preference(偏好值) app

Timestamp(時間戳) 框架

1001 分佈式

1005 工具

4.5

123278545

1002

1008

3.5

123577865

1001

1008

5.0

123478588

 

2(下面我將以視頻網站的智能推薦系統爲例子)

爲了獲得這樣的一張表,咱們首先要對用戶的行爲進行分析,視頻網站的用戶行爲通常爲 觀看記錄、評分記錄、頂/踩、評論記錄。。。

咱們按照預先設定的權重(圖表2-1),將這些行爲數據進行簡單的權重相加,得出一個比較粗糙的偏好評分。

圖表2-1 行爲權重(後面的行爲記分 覆蓋前面的行爲記分)

行爲:

權重:

觀看記錄

每觀看一次+2 若是看了3次以上 直接給滿分

/

頂記3  踩記1 

評論記錄

對評論內容關鍵詞進行智能分析

中評記3.5 差評記1 好評記4.5

評分記錄

打多少分 就是多少分

  

3、好了,經過上面這兩步分析,咱們已經知道咱們須要什麼樣的數據了,固然也知道這些數據通常都存放在傳統的數據庫中(如mysql),可是 這些數據一般都是海量的,增加極快的,因此咱們最好把這些行爲數據導出到hadoophdfs文件系統中(或hbase中),這樣就能夠很方便的使用hadoop的分佈式計算框架去處理這些數據了。不過問題又來了,因爲數據是海量的,不斷增加的,咱們不能每次計算都將所有數據進行從新導入,這樣mysql會鴨梨很大的,因此咱們必需要作增量導入,第一次導入全部的數據,第二次開始只導入後來增加的數據。

4、下面介紹一個解決這個問題的強大工具:sqoop
Sqoop
支持mysqlhdfs文件、hbasehive之間的導入導出,還能夠實現增量導入。

好比我要將 觀看記錄 mysql導出到hdfs中:

這是
Shell腳本:(注意這個腳本可能有錯 我臨時寫的,但思路確定是對的 ,你們本身調吧 哈哈)

ConnectURL=jdbc:mysql://localhost:3306/user_action

UserName=root

PassWord=123456

OutputPath=/hdfs/recommend/user_action/watch_record

TableName= watch_record

Columns=id,uid,mid,timestamp


IfJobCreated =`sqoop job list | grep import_ watch_record`

#檢查import_ watch_record這個job是否已經建立 若是未建立則建立

if [ $IfJobCreated = ’’ ] then

sqoop  job  import_ watch_record /

  --create  --import /

  --connect  $ConnectURL/

  --username  $UserName/

  --password  $PassWord/

  --target-dir  $OutputPath/

  --m  1/

  --table  $TableName/

  –columns  $Columns/

  --incremental  append/

  --check-column  id/

  --last-value  0 

fi

 

sqoop  job --exec import_ watch_record
 

5、若是watch_record這個表作了大量的分表分庫設計 怎麼辦呢?

很簡單把上面的shell寫個循環就ok

 

這樣行爲數據的導入工做就完成了,下一篇我將分享利用hadoopmap-reduce計算框架 分析用戶行爲數據,最終得出咱們想要的 用戶偏好表

 

Ps:歡迎你們加q羣討論 325317874

相關文章
相關標籤/搜索