本文原始碼:GitHub·點這裡 || GitEE·點這裡
一、大資料簡介
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同步工具
開源組織: Apache軟體
應用場景:
Sqoop是一款開源的工具,主要用於在Hadoop、Hive與傳統的資料庫例如:MySql間進行資料的傳遞,可以將一個關係型資料庫(例如:MySQL,Oracle 等)中的資料導進到Hadoop的HDFS中,也可以將HDFS的資料導進到關係型資料庫中。
4、HBase資料庫
開源組織: Apache軟體
應用場景:
HBase是一個分散式的、面向列的開源資料庫,HBase在Hadoop之上提供了類似於Bigtable的能力。HBase是Apache的Hadoop專案的子專案。HBase不同於一般的關聯式資料庫,它是一個適合於非結構化資料儲存的資料庫,並且基於列的而不是基於行的儲存模式。
5、Storm實時計算
開源組織: Apache軟體
應用場景:
Storm用於實時計算,對資料流做連續查詢,在計算時就將結果以流的形式輸出給使用者。Storm相對簡單,可以與任何程式語言一起使用。
6、Spark計算引擎
開源組織: Apache軟體
應用場景:
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元件
開源組織: Apache軟體
應用場景:
Oozie是一個管理Hdoop作業(job)的工作流程排程管理系統。
10、Azkaban元件
開源組織: Linkedin公司
應用場景:
批量工作流任務排程器。用於在一個工作流內以一個特定的順序執行一組工作和流程。Azkaban定義了一種KV檔案格式來建立任務之間的依賴關係,並提供一個易於使用的web使用者介面維護和跟蹤的工作流。
11、Mahout元件
開源組織: Apache軟體
應用場景:
Mahout提供一些可擴充套件的機器學習領域經典演算法的實現,旨在幫助開發人員更加方便快捷地建立智慧應用程式。Mahout包含許多實現,包括聚類、分類、推薦過濾、頻繁子項挖掘。
12、ZooKeeper元件
開源組織: Apache軟體
應用場景:
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