概述
詳細
一、設計背景
為了滿足大數據實時挖掘的需要
二、設計要求:
1、數據存儲
A、大數據存儲標准
系統需要滿足以T基本的數據存儲量設計標准。
B、規模可伸縮
平台的規模可以平衡伸縮擴展
C、數據可以快速運算
數據必須是支持快速運算得出結果的
三、架構方案
1、架構圖
大數據挖掘、分析的的通用流程如下:
1、先是數據采集,這里我們叫做原始數據
2、采集完之后,數據經過數據清洗模塊,進行清洗
3、清洗完之后,會被數據挖掘模塊進行運算
4、數據挖掘模塊運行的結果,會生成相關的可用模型
5、這些模型對象往往被保存到模型服務器里面
6、然后業務服務器就從模型服務器里面獲取相關的模型進行運算。
2、數據清洗模塊
2.1 用途
原始數據,都是寫雜亂的數據,沒法進行數據分析,和數據挖掘,都需要經過清洗才能變成可用的數據,數據清洗,一般包含兩部分,第一部分,數據純提取,就是把一些沒用的信息屬性,去掉,只留些和我們要分析和挖掘屬性相關的屬性,第二部分是建一般的屬性信息轉換為可供運算的數學模型信息,轉行為數學模型才能進行挖掘等運算。
2.2 結構圖
2.3實現方式
數據采集,一般采用kafka才做數據采集,采集完的數據會保存到數據中心里面,這個數據中心,在我這這里也叫原始數據源,因為數量可能幾大,所以可以采用Hadoop dfs來存放。
有了原始數據后,數據清洗模塊被業務服務器觸發運行,它去原始數據源那邊獲取原始數據,然后進行去雜過濾,和轉數字化處理,然后在把這些處理結果存放到數據服務器里面。
技術落地如下:
數據采集,使用kafka、Flume
原始數據源,使用hadoop dfs,或者hadoop hive等都可以
數據服務器,使用 hadoop dfs(parquet) 或者hadoop hive
數據清洗模塊,使用spark
2.4擴展
容量擴展:
采用hadoop 系統來做大數據存儲,方便橫向擴展
計算能力擴展:
使用spark來做計算能力的橫向擴展
3、數據挖掘模塊
3.1 用途
數據挖掘模塊,是對清洗后的數據,運用數學算法,對其進行數據運行,並把運算后的結果模型保存起來,供業務程序的調用。
3.2 結構圖
3.3實現方式
數據挖掘模塊是一個數據挖掘的程序集合,這些挖掘程序需要放到算法運行服務器里面運行。
技術落地如下:
數據服務器,使用 hadoop dfs(parquet) 或者hadoop hive
數據挖掘模塊,使用spark
3.4擴展
容量擴展:
采用hadoop 系統來做大數據存儲,方便橫向擴展
計算能力擴展:
使用spark來做計算能力的橫向擴展
4、算法運行服務器
采集層 主要可以使用Flume, Kafka兩種技術
4.1 用途:
在spark中要運算某些算,一般的做法是,把算法上傳到spark服務器中,然后通過腳本來觸發運行,這樣的方式在我們的項目應用中,是可行的,但這樣的方式是封閉式的,不能讓第三方系統觸發運行,基本上都能夠通過手動觸發運行,或者給算法加上一個定時器外殼,定時去執行XX算法,基於這的特性不方便和我們的業務系統集成。
所以提出了算法運行服務器的需求,這個主要解決了,算法可隨時被業務系統觸發,也可以向業務系統返回執行結果等。
4.2 結構圖:
4.3實現方式
數據挖掘模塊是一個數據挖掘的程序集合,這些挖掘程序需要放到算法運行服務器里面運行。
技術落地如下:
4.4 運行說明:
算法運行服務器啟動時,會啟動一個socket監聽器,業務服務器要調用某個算法時,會往這個監聽器發送一個調用請求,然后監聽器接收到調用請求后,調用具體的算法(可能是數據清洗的算法,也可以是數據挖掘等的算法)運算,然后算法運行完畢后,會將運行的結果,返回給業務調用端。
5、數據服務器
5.1 用途:
存放原始數據,和清洗后的數據。
5.2 結構圖:
5.3 技術方式:
6、模型服務器
6.1 用途:
用於存放挖掘運行后的模型,這個模型其實就是一個可用的java對象,這個java對象,會被業務端讀取,然后加載后,用於業務運行。
6.2 結構圖:
6.2 實現方式:
四、架構使用
1、環境搭建
1.1 Hadoop安裝、配置
A、下載、copy到Linux下、解壓等,以及將hadoop下的bin和sbin目錄都添加到系統path 等這些略過。
添加過程如下:
vi /etc/profile
然后文件末端這樣:
配置這樣的好處就是,以后執行一些hadoop的命令,不用直接到XXbin目錄下。
注意編輯后,需要執行 source /etc/profile 后才生效
B、主要配置三個文件
core-site.xml 文件,配置如下:
注意:這里要配置一個臨時目錄,一定要注意名稱是hadoop.tmp.dir 以及值路徑是這樣寫:file:/hadoop-data/dfs/tmp (因為每個hadoop的屬性和值得表示方法不一樣)
hdfs-site.xml文件,配置如下:
C、配置完上面的路徑后,先用命令格式化一下文件系統:
hdfs namenode -format
這個作用就是建立一個臨時temp目錄,以及相關的臨時庫。
注意:每次在修改了和路徑有關的配置后,都必須執行一次
D、設置免密碼登錄
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
E、到shin目錄下,執行啟動命令, start-dfs.sh 即可(關閉則是 stop-dfs.sh)
F、有問題記得查看log文件。
G、請后,可以用命令查看相關端口:
H、可以打開網頁看看
XXX:50070 即可
1.2 spark安裝、配置
略
2、程序開發與實現
2.1 項目搭建
以test-salesRunInspark-project項目為基礎,或者重命名該項目即可,大數據挖掘的項目搭建。
2.2 項目開發
程序開發主要涉及到:清洗算法的開發,和挖掘算法的開發,其他部分不需要。
然后清洗算法、挖掘算法的開發,需要遵從2.1算法編寫 規則。
需要開發的部分為紅色標識的部分:
2.3 算法編寫規則
算法(包含數據清洗算法、挖掘算法等)都是只需要遵從以下規則即可:
必須規則:
定義一個普通class,然后為這個類加入精通的job方法即可
public static void job() { }
可選規則:
也可以定義一個main方法,這個主要作為單獨運行的入口(即不是通過運算服務器調用)
public static void main(String[] args) { }
2.4 api使用
Api的使用主要涉及到以下兩個方面:
1、在spark中如何hadoop集成通訊,如何讀取hadoop中的數據和將結果保存到hadoop中
2、清洗的算法如何實現、挖掘的算法如何編寫
具體參考項目代碼中的:
數據清洗和轉換算法參考:UserJsonLog2Parquet.java
數據挖掘算法參考:UserClassModel.java
3、程序發布
數據挖掘項目以java項目方式存在,程序發布只需要將程序導出為jar包,當然換個jar包,也把所依賴的jar包也打包進去,然后把這個jar包,一起拷貝到 spark環境下面即可。
步驟如下:
注:本文著作權歸作者,由demo大師發表,拒絕轉載,轉載需要作者授權