大資料探勘方案
一、設計背景
為了滿足大資料實時挖掘的需要
二、設計要求:
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環境下面即可。
步驟如下: