大資料簡介,技術體系分類整理
阿新 • • 發佈:2020-09-15
本文原始碼:[GitHub·點這裡](https://github.com/cicadasmile/big-data-parent) || [GitEE·點這裡](https://gitee.com/cicadasmile/big-data-parent)
# 一、大資料簡介
## 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版本。
![](https://img2020.cnblogs.com/blog/1691717/202009/1691717-20200915085247245-604939281.png)
Hadoop是一個由Apache基金會所開發的分散式系統基礎架構;
提供海量的資料儲存能力,和分析計算能力;
作為Apache的頂級專案,包含眾多子專案是一個生態圈;
## 2、框架特點
可靠性:Hadoop按位儲存和儲存多個數據副本,提供可靠服務;
擴充套件性:Hadoop利用計算機叢集分配資料並完成計算任務,可以方便地擴充套件到數以千計的節點中;
高效性:基於MapReduce思想,為海量的資料提供高效的平行計算;
容錯性:自動儲存資料的多個副本,並且能夠自動將失敗的任務重新分配;
## 3、組成結構
**HDFS儲存**
- NameNode
儲存檔案相關的元資料,例如:檔名,檔案目錄,建立時間,許可權副本數等。
- DataNode
檔案系統儲存檔案塊資料,以及和資料塊ID的對映關係。
**Yarn排程**
負責資源管理和作業排程,將系統資源分配給在Hadoop叢集中執行的各種應用程式,並排程要在不同叢集節點上執行的任務。
**MapReduce計算**
MapReduce將計算過程分為兩個階段:Map階段並行處理輸入資料,Reduce階段對Map結果進行彙總。
# 三、大資料技術棧
![](https://img2020.cnblogs.com/blog/1691717/202009/1691717-20200915085232995-1313068236.png)
## 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
```
![](https://img2020.cnblogs.com/blog/1691717/202008/1691717-20200811231321146-174169065.png)