大資料背景
對於業務資料資料量的暴增,使用者智慧化需求提升。在這個DT的時代,大資料的開發也就應運而生了,大資料開發必須解決兩個問題,大資料量如何統一儲存,大資料量如何統一計算。針對這些問題產生了很多大資料方面的技術框架。到今天為止,大資料方面的技術可以說已經相當成熟,BAT在大資料方面都應用十分的廣泛,大資料量的分析使得資料更有了價值,運營有了通過大資料的分析可以做出精確的營銷計劃,通過收集使用者的操作日誌,分析使用者行為,給出使用者精確和有價值的推薦。人工智慧也是通過海量資料做分析,通過演算法做出智慧準確的行為。
大資料hadoop的應用
大資料應用分析
- 統計
- 推薦
- 機器學習
- 人工智慧,預測(演算法)
SQL on Hadoop
- Hive
- Phoneix(基於HBase)
- Spark SQL
hadoop 2.x 的概述
- hadoop 包含的四大模組
==Hadoop Common== 為其他Hadoop模組提供基礎設施。 ==Hadoop HDFS== 一個高可靠、高吞吐量的分散式檔案系統 ==Hadoop MapReduce== 一個分散式的離線平行計算框架 ==Hadoop YARN== 一個新的MapReduce框架,任務排程與資源管理複製程式碼
上述可以看出Hadoop的重點就主要包含三部分,hdfs儲存,MapReduce分散式計算過程,Yarn管理計算任務,包含了資源排程,任務協調,任務監控。
-
HDFS 服務功能
==NameNode==主節點,儲存檔案的後設資料如檔名,檔案目錄結構,檔案屬性(生成時間,副本數,檔案許可權),以及每個檔案的塊列表和塊所在DataNode等。==DataNode==在本地檔案系統儲存檔案塊資料,以及塊資料的校驗和。== Secondary NameNode==用來監控HDFS狀態的輔助後臺程式,每隔一段時間獲取HDFS後設資料的快照複製程式碼
-
YARN 服務功能
==ResourceManager== 處理客戶端請求 啟動/監控ApplicationMaster 監控NodeManager 資源分配與排程 ==NodeManager== 單個節點上的資源管理 處理來自ResourceManager的命令 處理來自ApplicationMaster的命令 ==ApplicationMaster== 資料切分 為應用程式申請資源,並分配給內部任務 任務監控與容錯 ==Container== 對任務執行環境的抽象,封裝了CPU記憶體等多維資源以及環境變數、啟動命令等任務運 行相關的資訊.複製程式碼
-
離線計算框架 MapReduce
== map和reduce== map 階段並行處理輸入資料 reduce 階段對map 結果進行彙總。 ==shuffle == 連線map 和Reduce 兩個階段 map task 將資料寫到本地磁碟 reduce task 從每個map TASK 上讀取一份資料 特點: 僅適合 離線批處理 具有很好的容錯性和擴充套件性 適合簡單的批處理任務 缺點明顯 啟動開銷大,過多使用磁碟導致效率底下等。複製程式碼
大資料開發過程離線和實時常用的技術框架簡介
- ==nutch==爬蟲取文字資料;
資料是半結構化資料; - ==flume==準備日誌資料
- ==Scribe==是==Facebook==開源的日誌收集系統. 它能夠從各種日誌源上收集日誌,儲存到一箇中央儲存系統上,以便於進行集中統計分析處理。
- 結構化資料由RDBMS(關聯式資料庫管理系統)管理和存放在資料庫,
- ==sqoop==可以將一個關係型資料庫(例如 : MySQL ,Oracle ,Postgres等)中的資料導進到Hadoop的HDFS中,也可以將HDFS的資料導進到關係型資料庫中;
- ==Oozie==是一個工作流引擎伺服器,用於執行Hadoop Map/Reduce和Pig 任務工作流.
- ==Mapreduce==是主要操作邏輯和引擎, map是分配, reduce是合併;
- ==HDFS==是分散式檔案儲存系統
- ==HBase==快速儲存, 快速響應查詢
- ==Jaql== 是一個 JSON 的查詢語言,用於簡化 JSON 資料的建模和操作,主要用於分析大規模的半結構化資料。
- ==Hue==是一個可快速開發和除錯Hadoop生態系統各種應用的一個基於瀏覽器的圖形化使用者介面。
- ==mahout==對資料進行分析;
我們要學習好如何使用好來分析;
提供一些可擴充套件的機器學習領域經典演算法的實現,旨在幫助開發人員更加方便快捷地建立智慧應用程式。Mahout包含許多實現,包括聚類、分類、推薦過濾、頻繁子項挖掘。
針對上述的生態圈做一個簡單的說明:對於大資料開發的步驟,第一步當然是資料來源的來源,爬蟲技術,mutch當然也可以使用諸如python的其他框架,公司中常用的還有通過前端介面收集,flume日誌採集。採集到的資料入hdfs檔案,第二步資料採集之後,需要日誌解析,日誌解析公司一般會自己開發,實現方式可以是mapreduce計算實現原始日誌簡單清洗和入庫hive。第三步是日誌分析,通過簡單的sql可以實現對業務資料分析,簡單的編寫sql如hivesql,sparksql可以進行計劃,如何實現任務流管理就需要用到oozie,資料的分析計算結果最後結果寫入高效能,讀寫資料快的資料儲存系統,例如關係型資料庫mysql,sqlserver 或者HBase。以上基本的離線開發流程就。對於一些業務多維度的分析可能需要事先進行預計算比如使用kylin的cube。對於實時的技術,一般的資料來源是日誌收集之後寫入kafka,然後通過sparkStreaming或者Strom,現在比較流行的還有flink,這些框架都是基於記憶體去進行分散式計算,用空間換時間,達到實時的計算。
離線開發和實時開發系統架構說明
系統架構說明:
本系統架構基於真實的大資料平臺構建:基本的資料結構說明:
1.日誌資料 來源: 1.APP的介面埋點或者其他渠道埋點 2.外部資料DB同步到hive 3.維度資料,用做於一些關聯 對於日誌資料可以分為兩類,底層基礎業務資料和維度配置資料。 業務資料量龐大,一般天,小時分割槽,維度資料可以使用拉鍊。也可以做mr同步。 2.計算引擎 如何實現各個不同位置資料的互動,比如hive到mysql或hbase的資料交換 3.計算依賴 如何實現一個工作流的計算oozie,sprak中的有向無環圖,當然也可以自己實現計算依賴邏輯。 4.報表計算 報表計算過程平臺管理,任務提交,計算頻率等平臺的治理和資料的結果展示。 以下兩張圖是基於離線和實時的系統開發架構圖:複製程式碼
- 離線系統架構圖
- 實時系統架構圖
此外,大資料免費資料可通過百度雲連線獲取,連結為pan.baidu.com/s/1niyAtVLl…,獲取碼spty
91Code-就要編碼,關注公眾號獲取更多內容!