第四部分-推薦系統-項目介紹
行業背景:
快速:Apache Spark以內存計算為核心
通用 :一站式解決各個問題,ADHOC SQL查詢,流計算,數據挖掘,圖計算
完整的生態圈
只要掌握Spark,就能夠為大多數的企業的大數據應用場景提供明顯的加速
“猜你喜歡”為代表的推薦系統,從吃穿住行等
項目背景介紹:
本項目是一個基於Apache Spark 的電影推薦系統,
技術路線:離線推薦+實時推薦
項目架構:

-
存儲層:HDFS作為底層存儲,Hive作為數據倉庫 (Hive Metastore:Hive管理數據的schema)
-
離線數據處理:SparkSQL (做數據查詢引擎<===> 數據ETL)
-
實時數據處理:Kafka + Spark Streaming
-
數據應用層:MLlib 產生一個模型 als算法
-
數據展示和對接:Zeppelin
選用考量:
HDFS不管是在存儲的性能,穩定性 吞吐量 都是在主流文件系統中很占有優勢的
如果感覺HDFS存儲還是比較慢,可以采用SSD硬盤等方案數據處理層組件: Hive 在數據量不是很大或對實時性沒有那么高要求的時候,可以選用作為計算引擎 消息隊列一般還是Kafka,消費者端也可以使用Flink,Storm等... 同時,SparkStreaming的優勢就是: 已經有與各個組件比較好的集成 這里寫一個KafkaProducer作業實時將數據 放到Kafka 中 應用層:MLlib :Spark 對數據挖掘機器學習庫的封裝 ,ALS是其中一個算法 http://spark.apache.org/docs/1.6.3/mllib-guide.html http://spark.apache.org/docs/latest/ml-guide.html TensorFlow 偏向於深度學習 Zeppelin:包含各個圖標表展示,而且組件集成性更多。作業調度略差 HUE 數據展示+作業調度 系統采用standaone模式,更加簡單。 只有SPARK 環境,就使用standalone 脫機運行模式 Hadoop +Spark 就推薦:Spark On Yarn Spark On Docker : 任務封裝為一個個的Docker,不依賴於你的物理機環境,每個Docker 的資源可以更好的分配
主要模塊:
-
存儲模塊:搭建和配置HDFS分布式存儲系統,並Hbase和MySQL作為備用方案
-
ETL模塊:加載原始數據,清洗,加工,為模型訓練模塊 和 推薦模塊 准備所需的各種數據。
-
模型訓練模塊:負責產生模型,以及尋找最佳的模型
-
推薦模塊:包含離線推薦和實時推薦,離線推薦負責把推薦結果存儲到存儲系統中
實時推薦負責產生實時的消息隊列,並且消費實時消息產生推薦結果,最后存儲在存儲模塊中 -
數據展示模塊:負責展示項目中所用的數據
-
數據流向:

系統開發的重難點:
數據倉庫的准備 :Spark + Hive 數據ETL ,Zeppelin +Hive 數據展示
數據處理:
實時數據處理 : 1.數據實時性,完整性 、一致性 ,
2.保證應用不會崩潰掉,or 崩掉之后及時啟動起來 並 數據一致性處理
拓展:
1.數據倉庫怎么理解?兩種東西,其一是IBM微軟數據產品為代表的,其二是Hadoop+Hive
Apache Hive™數據倉庫軟件有助於使用SQL讀取,寫入和管理駐留在分布式存儲中的大型數據集。
可以將結構投影到已經存儲的數據上。
提供了命令行工具和JDBC驅動程序以將用戶連接到Hive。
2.數據源准備:
Data Source:Movielens Open Data
http://files.grouplens.org/datasets/movielens
http://files.grouplens.org/datasets/movielens/ml-latest.zip
[root@hadoop001 ml-latest]# pwd
/root/data/ml/ml-latest
[root@hadoop001 ml-latest]# ll -h
總用量 1.9G
-rw-r--r--. 1 root root 1.3M 10月 17 13:41 links.txt
-rw-r--r--. 1 root root 2.8M 10月 17 16:06 movies.txt
-rw-r--r--. 1 root root 725M 10月 17 16:07 ratings.txt
-rw-r--r--. 1 root root 38M 10月 17 16:08 tags.txt
[root@hadoop001 ml-latest]#
接下來就是開始Coding...
有任何問題,歡迎留言一起交流~~
更多文章:基於Spark的電影推薦系統:https://blog.csdn.net/liuge36/column/info/29285
