一、大資料簡介
1、基礎概念
大資料是指無法在一定時間範圍内用正常軟體工具進行捕捉、管理和處理的資料集合,是需要新處理模式才能具有更強的決策力、洞察發現力和流程優化能力的海量、高增長率和多樣化的資訊資産。大資料技術則主要用來解決海量資料的存儲和分析。
2、特點分析
大資料的5V特點(IBM提出):Volume(大量)、Velocity(高速)、Variety(多樣)、Value(低價值密度)、Veracity(真實性)。
3、發展過程
Google在2004年前後發表的三篇論文,分别是檔案系統GFS、計算架構MapReduce、NoSQL資料庫系統BigTable。海量資料檔案,分析計算,并存儲,确立了大資料的基本原理和思路。
天才程式員DougCutting,也是Lucene、Nutch項目發起人。根據Google論文原理初步實作類似GFS和MapReduce的功能,後來發展成為大名鼎鼎的Hadoop。
再後來,Hadoop經過高速的發展,已經形成一個生态體系,基于Hadoop之上,有實時計算,離線計算,NoSQL存儲,資料分析,機器學習等一系列内容。
從這一系列事情發展看技術規律:Google業務實踐中創造性的提出論文作為基礎,業務的成長和需求,迫使技術不斷更新換代。是以業務是技術不斷發展的關鍵。
二、Hadoop架構
1、Hadoop簡介
注意這裡基于Hadoop2.X版本描述。後續如果沒有特别說明,都是2.7版本。

Hadoop是一個由Apache基金會所開發的分布式系統基礎架構;
提供海量的資料存儲能力,和分析計算能力;
作為Apache的頂級項目,包含衆多子項目是一個生态圈;
2、架構特點
可靠性:Hadoop按位存儲和存儲多個資料副本,提供可靠服務;
擴充性:Hadoop利用計算機叢集配置設定資料并完成計算任務,可以友善地擴充到數以千計的節點中;
高效性:基于MapReduce思想,為海量的資料提供高效的并行計算;
容錯性:自動儲存資料的多個副本,并且能夠自動将失敗的任務重新配置設定;
3、組成結構
HDFS存儲
- NameNode
存儲檔案相關的中繼資料,例如:檔案名,檔案目錄,建立時間,權限副本數等。
- DataNode
檔案系統存儲檔案塊資料,以及和資料塊ID的映射關系。
Yarn排程
負責資源管理和作業排程,将系統資源配置設定給在Hadoop叢集中運作的各種應用程式,并排程要在不同叢集節點上執行的任務。
MapReduce計算
MapReduce将計算過程分為兩個階段:Map階段并行處理輸入資料,Reduce階段對Map結果進行彙總。
三、大資料技術棧
1、Kafka中間件
開源組織: Apache軟體
應用場景:
Kafka是一種高吞吐量的分布式釋出訂閱消息系統,通過磁盤資料結構提供消息的持久化,這種結構對于即使數以TB的消息存儲也能夠保持長時間的穩定性能。高吞吐量:即使是非常普通的硬體Kafka也可以支援每秒數百萬的消息。支援通過Kafka伺服器和消費機叢集來分區消息。支援Hadoop并行資料加載。
2、Flume日志系統
開源組織: Cloudera公司
Flume是Cloudera提供的一個高可用的,高可靠的,分布式的海量日志采集、聚合和傳輸的系統,Flume支援在日志系統中定制各類資料發送方,用于收集資料;同時,Flume提供對資料進行簡單處理,并寫到各種資料接受方(可定制)的能力。
3、Sqoop同步工具
Sqoop是一款開源的工具,主要用于在Hadoop、Hive與傳統的資料庫例如:MySql間進行資料的傳遞,可以将一個關系型資料庫(例如:MySQL,Oracle 等)中的資料導進到Hadoop的HDFS中,也可以将HDFS的資料導進到關系型資料庫中。
4、HBase資料庫
HBase是一個分布式的、面向列的開源資料庫,HBase在Hadoop之上提供了類似于Bigtable的能力。HBase是Apache的Hadoop項目的子項目。HBase不同于一般的關系資料庫,它是一個适合于非結構化資料存儲的資料庫,并且基于列的而不是基于行的存儲模式。
5、Storm實時計算
Storm用于實時計算,對資料流做連續查詢,在計算時就将結果以流的形式輸出給使用者。Storm相對簡單,可以與任何程式設計語言一起使用。
6、Spark計算引擎
Spark是專為大規模資料處理而設計的快速通用的計算引擎,擁有Hadoop的MapReduce所具有的優點;但不同于MapReduce的是——Job中間輸出結果可以儲存在記憶體中,進而不再需要讀寫HDFS,是以Spark能更好地适用于資料挖掘與機器學習等需要疊代的MapReduce的算法。Spark是在Scala 語言中實作的,它将Scala用作其應用程式架構。
7、R語言
開源組織: 微軟公司
R是用于統計分析、繪圖的語言和操作環境。R是屬于GNU系統的一個自由、免費、源代碼開放的軟體,它是一個用于統計計算和統計制圖的優秀工具。
8、Hive數倉工具
開源組織: 臉書公司
hive是基于Hadoop的一個資料倉庫工具,用來進行資料提取、轉化、加載,這是一種可以存儲、查詢和分析存儲在Hadoop中的大規模資料的機制。hive資料倉庫工具能将結構化的資料檔案映射為一張資料庫表,并提供SQL查詢功能,能将SQL語句轉變成MapReduce任務來執行。
9、Oozie元件
Oozie是一個管理Hdoop作業(job)的工作流程排程管理系統。
10、Azkaban元件
開源組織: Linkedin公司
批量工作流任務排程器。用于在一個工作流内以一個特定的順序運作一組工作和流程。Azkaban定義了一種KV檔案格式來建立任務之間的依賴關系,并提供一個易于使用的web使用者界面維護和跟蹤的工作流。
11、Mahout元件
Mahout提供一些可擴充的機器學習領域經典算法的實作,旨在幫助開發人員更加友善快捷地建立智能應用程式。Mahout包含許多實作,包括聚類、分類、推薦過濾、頻繁子項挖掘。
12、ZooKeeper元件
ZooKeeper是一個分布式的,開放源碼的分布式應用程式協調服務,是Google的Chubby一個開源的實作,是Hadoop和Hbase的重要元件。它是一個為分布式應用提供一緻性服務的軟體,提供的功能包括:配置維護、域名服務、分布式同步、組服務等。
四、技術棧分類
存儲體系:Hadoop-HDFS、HBase、MongoDB、Cassandra
計算體系:Hadoop-MapReduce、Spark、Storm、Flink
資料同步:Sqoop、DataX
資源排程:YARN、Oozie、Zookeeper
日志收集:Flume、Logstash、Kibana
分析引擎:Hive、Impala、Presto、Phoenix、SparkSQL
叢集監控:Ambari、Ganglia、Zabbix
五、源代碼位址
GitHub·位址
https://github.com/cicadasmile/big-data-parent
GitEE·位址
https://gitee.com/cicadasmile/big-data-parent