大數據背景
對于業務數據數據量的暴增,用戶智能化需求提升。在這個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管理計算任務,包含了資源調度,任務協調,任務監控。
在這里還是要推薦下我自己建的大數據學習交流群:199427210,群里都是學大數據開發的,如果你正在學習大數據 ,小編歡迎你加入,大家都是軟件開發黨,不定期分享干貨(只有大數據軟件開發相關的),包括我自己整理的一份最新的大數據進階資料和高級開發教程,歡迎進階中和進想深入大數據的小伙伴加入。
- 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.報表計算
報表計算過程平臺管理,任務提交,計算頻率等平臺的治理和數據的結果展示。