1. 程式人生 > >hadoop家族簡介

hadoop家族簡介

一:什麼是ApacheHadoop呢?
首先來說Hadoop是一種分析和處理大資料的軟體平臺。
是Apache的一個用Java語言所實現的開源軟體的框架。

在大量計算機組成的叢集當中實現了對於海量的資料行

的分散式計算。下面呢給大家用一句話描述一下。


二:檔案儲存
1、HDFS(Hadoop分散式檔案系統)
Hadoop分散式檔案系統或HDFS是基於Java的分散式檔案系統,允許您在Hadoop叢集中的多個節點上儲存大量資料也就相當於在多塊硬碟上儲存資料。因此Hadoop是用HDFS作為底層儲存系統來儲存分散式環境中的資料。
2、Tachyon分散式記憶體檔案系統
Tachyon是一個分散式記憶體檔案系統,它是在最底層的分散式檔案儲存和上層的各種計算框架之間的一種中介軟體。主要作用是將那些不需要存放到DFS裡的檔案,落地到分散式記憶體檔案系統中,來達到共享記憶體。
特點: 1、支援多種部署方式 (包含啟動模式,資源管理框架,目標執行環境),3、靈活的讀寫機制,4、支援WebUI管理介面


三:離線計算
1、MapReduce
常用於離線的複雜的大資料計算。
2、Spark
Spark是UC Berkeley AMP lab所開源的類Hadoop MapReduce的通用的平行計算框架,可以用於離線的也可用於線上的實時的大資料計算,所以Spark基於map reduce演算法實現的分散式計算。


四:流式、實時計算
1 、Storm是由Twitter開源的分散式、高容錯的實時處理系統,它的出現令持續不斷的流計
算變得容易,彌補了Hadoop批處理所不能滿足的實時要求。
2、 Spark Streaming 是Spark核心API的擴充套件包,可以實現高吞吐量的、具備容錯機制的實時流資料的
處理。
3、S4-分散式流式計算平臺
S4(Simple Scalable Streaming System)最初是Yahoo!為提高搜尋廣告有效點
擊率的問題而開發的一個平臺,通過統計分析使用者對廣告的點選
率,排除相關度低的廣告,提升點選率。目前該專案剛啟動不久,所
以也可以理解為是他們提出的一個分散式流計算(Distributed Stream
Computing)的模型。
4、Heron是Twitter開源的分散式流處理系統,用來在Twitter內部替代Storm。它提供了和Storm相容的API。
5、Apache Hama: 是一個基於HDFS的BSP(Bulk Synchronous Parallel)平行計算框架, Hama可
用於包括圖、矩陣和網路演算法在內的大規模、大資料計算。


五:K-V、NOSQL資料庫
1、HBase是一個高可靠性、高效能、面向列、可伸縮、實時讀寫的分散式資料庫,利用HBase技術可在廉價PC Server上搭
建起大規模結構化儲存叢集。
特點.
1).儲存資料量大:一個表可以有上億行,上百萬列。
2).面向列:面向列表(簇)的儲存和許可權控制,列(簇)獨立檢索。
3).稀疏:對於為空(NULL)的列,並不佔用儲存空間,因此,表可以設計的非常稀疏。
4).無模式:每一行都有一個可以排序的主鍵和任意多的列,列可以根據需要動態增加,同一張表中不同的行可以有截然不
同的列。
5).資料多版本:每個單元中的資料可以有多個版本,預設情況下,版本號自動分配,版本號就是單元格插入時的時間戳。
6).資料型別單一:HBase中的資料都是字串,沒有型別。
優點:
1 列的可以動態增加,並且列為空就不儲存資料,節省儲存空間. 2 Hbase自動切分資料,使得資料儲存自動具有水平scalability. 3 Hbase可以提供高併發讀寫操作的支援
缺點:
單一RowKey固有的侷限性決定了它不可能有效地支援多條件查詢
不適合於大範圍掃描查詢
不直接支援 SQL 的語句查詢

2、Redis 是以key-value的形式儲存資料,是一個非關係型的,分散式開源的,水平可擴充套件的快取伺服器。
優點:
1 讀寫效能優異
2 支援資料持久化,支援AOF和RDB兩種持久化方式
3 支援主從複製,主機會自動將資料同步到從機,可以進行讀寫分離。
4 資料結構豐富:除了支援string型別的value外還支援string、hash、set、sortedset、list等資料結構。
缺點:
1 Redis不具備自動容錯和恢復功能,主機從機的宕機都會導致前端部分讀寫請求失敗,需要等待機器重啟或者手動切換前端的IP才能恢復。
2 主機宕機,宕機前有部分資料未能及時同步到從機,切換IP後還會引入資料不一致的問題,降低了系統的可用性。
3 redis的主從複製採用全量複製,複製過程中主機會fork出一個子程序對記憶體做一份快照,並將子程序的記憶體快照儲存為檔案傳送給從機,這一過程需要確保主機有足夠多的空餘記憶體。若快照檔案較大,對叢集的服務能力會產生較大的影響,而且複製過程是在從機新加入叢集或者從機和主機網路斷開重連時都會進行,也就是網路波動都會造成主機和從機間的一次全量的資料複製,這對實際的系統運營造成了不小的麻煩。
4 Redis較難支援線上擴容,在叢集容量達到上限時線上擴容會變得很複雜。為避免這一問題,運維人員在系統上線時必須確保有足夠的空間,這對資源造成了很大的浪費。

3、MongoDB 是由C++語言編寫的,是一個基於分散式檔案儲存的開源資料庫系統。它提供l可擴充套件的
高效能資料儲存解決方案
優點:
1、面向文件儲存(類JSON資料模式簡單而強大)
2、第三方支援豐富。
這是它跟其它的NoSQL相比,MongoDB也具有的優勢,因為現在網路上的很多NoSQL開源資料庫完全屬於社群型的,沒有官方支援,給使用者帶來了很大的風險。
而開源的文件資料庫MongoDB背後有商業公司為它提供商業培訓和支援。

3、效能優越
在使用場合下,千萬級別的文件物件,近10G的資料,對有索引的ID的查詢不會比mysql慢,而對非索引欄位的查詢,則是全面勝出。 mysql實際無法勝任大資料量下任意欄位的查詢,而mongodb的查詢效能可以,同時它的寫入效能也很厲害,可以寫入百萬級別的資料。
缺點:
、MongoDB不支援事務操作
所以事務要求嚴格的系統,比如銀行系統就不能用它。

2、MongoDB佔用空間過大
2.1、空間的預分配:
當MongoDB的空間不足時它就會申請生成一大塊硬碟空間,而且申請的量都是有64M、128M、256M來增加直到2G為單個檔案的較大體積,並且隨著數量疊增,可以在資料目錄下看到整塊生成而且不斷遞增的檔案。

2.2、刪除記錄不釋放空間:
這很容易理解,為避免記錄刪除後的資料的大規模挪動,原記錄空間不刪除,只標記“已刪除”即可,以後還可以重複利用。

3、(開發和IT運營要注意)MongoDB沒有MySQL那樣成熟的維護工具

4
、Apache Cassandra:是一套開源分散式NoSQL資料庫系統。它最初由Facebook開發,用於儲存簡單格式資料,集Google
BigTable的資料模型與Amazon Dynamo的完全分散式的架構於一身


六:資源管理
1、 Yarn 是一個資源排程平臺,負責為運算程式提供伺服器運算資源,相當於一個分散式的作業系統平臺。
2、 Mesos(分散式資源管理器):與yarn類似,Mesos是一個資源統一管理和排程的平臺,同樣支援比如MR、steaming等多種運算框架,同時通過 API 為各種應用提供跨資料中心和雲的資源管理排程能力。


七:日誌收集
1、 Flume是一個分佈的、可靠的、高可用的海量日誌聚合的系統,可用於日誌資料收集,日誌資料處理,日誌資料傳輸。
2、 Scribe是Facebook開源的日誌收集系統,在Facebook內部已經得到的應用。它能夠從各種日誌源上收集日誌,儲存到一個儲存系統(例如分散式檔案系統等)上,以便於進行集中統計分析處理。
3、 Logstash 是一個開源的資料收集引擎,它具有備實時資料傳輸能力。它可以統一過濾來自不同源的資料,並按照開發者的制定的規範輸出
到目的地。 Logstash 收集資料物件就是日誌檔案由於日誌檔案來源多
(如:系統日誌、伺服器 日誌等),且內容雜亂,不便於進行觀
察。因此,我們可以使用 Logstash 對日誌檔案進行收集和統一過濾,
變成可讀性高的內容,方便開發者或運維人員觀察,從而有效的分析
系統/專案執行的效能,做好監控和預警的準備工作等。
4、 Kibana是一個開源的分析與視覺化平臺,用於和Elasticsearch一起使用的。你可以用kibana搜尋、檢視、互動存放在Elasticsearch索引裡的資料,使用各種不同的圖表、表格、地圖等kibana能夠很輕易地展示高階資料分析與視覺化。


八:訊息系統
1、Kafka分散式訊息佇列具有高效能、持久化、多副本備份、橫向擴充套件能力。生產者往佇列裡寫訊息,消費者從佇列裡取訊息進行業務邏輯。一般在架構設計中起到解耦、削峰、非同步處理的作用。
2、ZeroMQ是一個為可伸縮的分散式或併發應用程式設計的高效能非同步訊息庫。它提供一個訊息佇列, 但是與面向訊息的中介軟體不同,ZeroMQ的執行不需要專門的訊息代理。該庫設計成常見的套接字風格的API。
3、RabbitMQ是一個開源的訊息佇列框架。
它用於在分散式系統中儲存轉發訊息,在易用性、擴充套件性、高可用性
等方面都非常的優秀並支援多種客戶端如:.NET、Java、PHP


九:查詢分析
1、Hive 是基於 Hadoop 的一個數據倉庫工具,實質就是一款基於 HDFS 的 MapReduce 計算框架,對儲存在 HDFS 中的資料進行分析和
管理
2、Impala是用於處理儲存在Hadoop叢集中的大量資料的SQL查詢引擎。 它是一個用C ++和Java編寫的開源軟體。換句話說,Impala是
效能最高的SQL引擎,它提供了訪問儲存在Hadoop分散式檔案系統中的資料的最快方法。
3、Pig最早是雅虎公司的一個基於Hadoop的並行處理架構,後來Yahoo將Pig捐獻給Apache的一個專案,由Apache來負責維護,Pig是一
個基於 Hadoop的大規模資料分析平臺。
4、Presto是一個分散式的查詢引擎,本身並不儲存資料,但是可以接入多種資料來源,
並且支援跨資料來源的級聯查詢,所以Presto就是一個可以滿足大資料量分析計算需求
的一個工具。
5、Phoenix是一個HBase的開源SQL引擎。你可以使用標準的JDBC API代替HBase客戶端API來建立表,插入資料,查詢你的HBase資料。
6、 SparkSQL是Spark用來處理結構化資料的一個模組,它提供了一個程式設計抽象叫做DataFrame並
且作為分散式SQL查詢引擎的作用。
7、Apache Drill是一個能夠對大資料進行實時的分散式查詢引擎,Drill是開源版本的Google Dremel。支援對本地檔案,
HDFS,HIVE,HBASE,MongeDB作為儲存的資料查詢,
檔案格式支援Parquet,CSV, TSV,以及JSON的資料。所有這些資料都可以像使用傳
統資料庫的針對表查詢一樣進行快速實時的查詢。
8、Apache Kylin是一個開源的分散式分析引擎,提供Hadoop/Spark之上的SQL查詢介面及多維分析(OLAP)能力以支援超大規模資料
9、Druid 是一個為在大資料集之上做實時統計分析而設計的開源資料儲存
10、 Apache Crunch是基於Google的FlumeJava庫編寫的Java庫,用於建立MapReduce程式。與Hive,Pig類似,Crunch提供了用於實現如連線資料、執行聚
合和排序記錄等常見任務的模式庫


十:分散式協調服務
1、Zookeeper 分散式服務框架是Apache Hadoop 的一個子專案,它主要是用來解決分散式應用中經常遇到的一些資料管理問題,如:統一命名服務、狀態同步服務、叢集管理、分散式應用配置項的管理等


十一:叢集管理與監控
1、Apache Ambari 的作用來說,就是建立、管理、監視 Hadoop 的叢集,是為了讓 Hadoop 以及相關的大資料軟體更容易
使用的一個web工具。
2、Ganglia是UC Berkeley發起的一個開源叢集監視專案,設計用於測量數以千計的節點,主要是用來監控系統性能如:
cpu 、mem、硬碟利用率, I/O負載、網路流量情況等,通過曲線很容易見到每個節點的工作狀態,對合理調整、分配系統資源,提高系統
整體效能起到重要作用。
3、 Nagios是一款開源的免費網路監視工具,能有效監控Windows、Linux和Unix的主機狀態,交換機路由器等網路設定,
印表機等。在系統或服務狀態異常時發出郵件或簡訊報警第一時間通知網站運維人員,在狀態恢復後發出正常的郵件或簡訊通知。
4、Cloudera Manager則是為了便於在叢集中進行Hadoop等大資料處理相關的服務安裝和監控管理的元件,對叢集中主機、Hadoop、Hive、
Spark等服務的安裝配置管理做了極大簡化。
5、Cloudera Hue: 是一個基於WEB的監控和管理系統,實現對HDFS,
MapReduce/YARN, HBase, Hive, Pig的web化操作和管理。
6、Apache Chukwa: 是一個開源的用於監控大型分散式系統的資料收集系統,它可以將各種
各樣型別的資料收整合適合 Hadoop 處理的檔案儲存在 HDFS 中供 Hadoop 進行各種 MapRedu
7、 Apache Bigtop: 是一個對Hadoop及其周邊生態進行打包,分發和測試的工具。
8、Apache HCatalog: 是基於Hadoop的資料表和儲存管理,實現中央的元資料和模式管理,跨越Hadoop和RDBMS,利用Pig
和Hive提供關係檢視。


十二:資料探勘、機器學習
1、Apache Mahout是基於Hadoop的機器學習和資料探勘的一個分散式框架。Mahout用MapReduce實現了部分資料探勘演算法,解決了並行挖掘的問題。
2、Spark MLlib是一個機器學習庫,它提供了各種各樣的演算法,這些演算法用來在叢集上針對分類、迴歸、聚類、協同過濾等
3、 Apache Giraph: 是一個可伸縮的分散式迭代圖處理系統


十三:資料同步
1、Apache Sqoop: 是一個用來將Hadoop和關係型資料庫中的資料相互轉移的工具,可以將一個關係型資料庫(MySQL ,Oracle ,Postgres等)中的資料導進到Hadoop的HDFS中,也可以將HDFS的資料導進到關係型資料庫中。


十四:任務排程
Apache Oozie: 是一個工作流引擎伺服器, 用於管理和協調執行在Hadoop平臺上(HDFS、Pig和MapReduce)的任務。


十五:資料序列化系統
Apache Avro: 是一個數據序列化系統,設計用於支援資料密集型,大批量資料交換的應用。Avro是新的資料序列化格式與傳輸工具,將逐步取代Hadoop原有的IPC機制


16:雲服務的類庫
Apache Whirr: 是一套運行於雲服務的類庫(包括Hadoop),可提供高度的互補性。