這個分類 我主要想分享基於hadoop構建智能推薦系統的過程思路、程序設計和系統架構方面的一些技巧心得,至於hadoop、sqoop、hbase的安裝和使用我就很少講了,網上已經有不少這方面的文章了 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),可是 這些數據一般都是海量的,增加極快的,因此咱們最好把這些行爲數據導出到hadoop的hdfs文件系統中(或hbase中),這樣就能夠很方便的使用hadoop的分佈式計算框架去處理這些數據了。不過問題又來了,因爲數據是海量的,不斷增加的,咱們不能每次計算都將所有數據進行從新導入,這樣mysql會鴨梨很大的,因此咱們必需要作增量導入,第一次導入全部的數據,第二次開始只導入後來增加的數據。
4、下面介紹一個解決這個問題的強大工具:sqoop。
Sqoop支持mysql、hdfs文件、hbase、hive之間的導入導出,還能夠實現增量導入。
好比我要將 觀看記錄 從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了
這樣行爲數據的導入工做就完成了,下一篇我將分享利用hadoop的map-reduce計算框架 分析用戶行爲數據,最終得出咱們想要的 用戶偏好表
Ps:歡迎你們加q羣討論 325317874