1. 程式人生 > >大資料探勘方案

大資料探勘方案

一、設計背景

為了滿足大資料實時挖掘的需要

二、設計要求:

1、資料儲存

A、大資料儲存標準

系統需要滿足以T基本的資料儲存量設計標準。

B、規模可伸縮

平臺的規模可以平衡伸縮擴充套件

C、資料可以快速運算

資料必須是支援快速運算得出結果的

三、架構方案

1、架構圖

大資料探勘、分析的的通用流程如下:

1、先是資料採集,這裡我們叫做原始資料

2、採集完之後,資料經過資料清洗模組,進行清洗

3、清洗完之後,會被資料探勘模組進行運算

4、資料探勘模組執行的結果,會生成相關的可用模型

5、這些模型物件往往被儲存到模型伺服器裡面

6、然後業務伺服器就從模型伺服器裡面獲取相關的模型進行運算。

blob.png

2、資料清洗模組

2.1 用途

原始資料,都是寫雜亂的資料,沒法進行資料分析,和資料探勘,都需要經過清洗才能變成可用的資料,資料清洗,一般包含兩部分,第一部分,資料純提取,就是把一些沒用的資訊屬性,去掉,只留些和我們要分析和挖掘屬性相關的屬性,第二部分是建一般的屬性資訊轉換為可供運算的數學模型資訊,轉行為數學模型才能進行挖掘等運算。

2.2 結構圖

blob.png

2.3實現方式

資料採集,一般採用kafka才做資料採集,採集完的資料會儲存到資料中心裡面,這個資料中心,在我這這裡也叫原始資料來源,因為數量可能幾大,所以可以採用Hadoop dfs來存放。

有了原始資料後,資料清洗模組被業務伺服器觸發執行,它去原始資料來源那邊獲取原始資料,然後進行去雜過濾,和轉數字化處理,然後在把這些處理結果存放到資料伺服器裡面。

技術落地如下:

blob.png

資料採集,使用kafka、Flume

原始資料來源,使用hadoop dfs,或者hadoop hive等都可以

資料伺服器,使用 hadoop dfs(parquet) 或者hadoop hive

資料清洗模組,使用spark

2.4擴充套件

容量擴充套件:

採用hadoop 系統來做大資料儲存,方便橫向擴充套件

計算能力擴充套件:

使用spark來做計算能力的橫向擴充套件

3、資料探勘模組

3.1 用途

資料探勘模組,是對清洗後的資料,運用數學演算法,對其進行資料執行,並把運算後的結果模型儲存起來,供業務程式的呼叫。

3.2 結構圖

blob.png

3.3實現方式

資料探勘模組是一個數據挖掘的程式集合,這些挖掘程式需要放到演算法執行伺服器裡面執行。

技術落地如下:

blob.png

資料伺服器,使用 hadoop dfs(parquet) 或者hadoop hive

資料探勘模組,使用spark

3.4擴充套件

容量擴充套件:

採用hadoop 系統來做大資料儲存,方便橫向擴充套件

計算能力擴充套件:

使用spark來做計算能力的橫向擴充套件

4、演算法執行伺服器

採集層 主要可以使用Flume, Kafka兩種技術

4.1 用途:

在spark中要運算某些算,一般的做法是,把演算法上傳到spark伺服器中,然後通過指令碼來觸發執行,這樣的方式在我們的專案應用中,是可行的,但這樣的方式是封閉式的,不能讓第三方系統觸發執行,基本上都能夠通過手動觸發執行,或者給演算法加上一個定時器外殼,定時去執行XX演算法,基於這的特性不方便和我們的業務系統整合。

所以提出了演算法執行伺服器的需求,這個主要解決了,演算法可隨時被業務系統觸發,也可以向業務系統返回執行結果等。

4.2 結構圖:

blob.png

4.3實現方式

資料探勘模組是一個數據挖掘的程式集合,這些挖掘程式需要放到演算法執行伺服器裡面執行。

技術落地如下:

blob.png

4.4 執行說明:

演算法執行伺服器啟動時,會啟動一個socket監聽器,業務伺服器要呼叫某個演算法時,會往這個監聽器傳送一個呼叫請求,然後監聽器接收到呼叫請求後,呼叫具體的演算法(可能是資料清洗的演算法,也可以是資料探勘等的演算法)運算,然後演算法執行完畢後,會將執行的結果,返回給業務呼叫端。

5、資料伺服器

5.1 用途:

存放原始資料,和清洗後的資料。

5.2 結構圖:

blob.png

5.3 技術方式:

blob.png

6、模型伺服器

6.1 用途:

用於存放挖掘執行後的模型,這個模型其實就是一個可用的java物件,這個java物件,會被業務端讀取,然後載入後,用於業務執行。

6.2 結構圖:

blob.png

6.2 實現方式:

blob.png

四、架構使用

1、環境搭建

1.1 Hadoop安裝、配置

A、下載、copy到Linux下、解壓等,以及將hadoop下的bin和sbin目錄都新增到系統path 等這些略過。

新增過程如下:

vi /etc/profile

然後檔案末端這樣:

blob.png

配置這樣的好處就是,以後執行一些hadoop的命令,不用直接到XXbin目錄下。

注意編輯後,需要執行 source /etc/profile 後才生效

B、主要配置三個檔案

core-site.xml 檔案,配置如下:

blob.png

注意:這裡要配置一個臨時目錄,一定要注意名稱是hadoop.tmp.dir 以及值路徑是這樣寫:file:/hadoop-data/dfs/tmp (因為每個hadoop的屬性和值得表示方法不一樣)

hdfs-site.xml檔案,配置如下:

blob.png

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、請後,可以用命令檢視相關埠:

blob.png

H、可以開啟網頁看看

XXX:50070 即可

blob.png

1.2 spark安裝、配置

2、程式開發與實現

2.1 專案搭建

以test-salesRunInspark-project專案為基礎,或者重新命名該專案即可,大資料探勘的專案搭建。

2.2 專案開發

程式開發主要涉及到:清洗演算法的開發,和挖掘演算法的開發,其他部分不需要。

然後清洗演算法、挖掘演算法的開發,需要遵從2.1演算法編寫 規則。

需要開發的部分為紅色標識的部分:

blob.png

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環境下面即可。

步驟如下:

blob.png

注:本文著作權歸作者,由demo大師(http://www.demodashi.com)宣傳,拒絕轉載,轉載需要作者授權