BigData-- 大數據常用開源組件一覽

概述

最近有一個項目是跟公司的大數據平臺有關,這裏梳理一下常用的大數據組件,做個記錄,同時,還有一個原因,就是希望用比較簡潔的語言讓我女朋友能對大數據的整體架構有個大致瞭解。
大數據平臺的架構不一而足,市面上的開源工具非常多,所選用的組件也是因人而異,不過都是爲了具體業務應用場景而服務,這裏選取一些常用的開源組件,試圖從大數據處理的整個流程出發,將各個開源組件的功能特點,適用場景等講清楚,個人觀點,難免紕漏。

大數據處理流程

在介紹大數據組件之前,先把大數據的整體處理流程梳理一下,因爲要想了解整個大數據組件體系,首先得清楚我們要面臨的問題,瞭解了問題才能去找相應的解決方案,如果只是一猛子扎進hadoop 體系裏,反而會越看越迷糊。
大數據的處理流程大致包括數據收集,數據存儲,數據計算與數據分析這四個階段,其實數據計算與分析算是一個階段,這裏爲了以後區分組件的方便將其分開,數據計算可以理解爲計算引擎那部分,數據分析就是更上層的BI分析工具等等。接下來就從這四個流程出發,簡單介紹下常用工具。

數據收集

在大數據還未興盛之前,我們一般是將數據存儲到關係型數據庫(Mysql等),或者文本文件(日誌文件等)中,這種方法在數據量不大的情況下是可以的,但在數據量達到TB,甚至PB級別,這種情況就不適用了。爲了能夠存儲這種量級的數據,大數據存儲組件應運而生,這裏先暫時不說大數據存儲,先說數據收集。出現了大數據存儲組件之後,有一個問題就是要將數據收集到大數據存儲組件中,於是,相應的組件也就出現了:

以下是收集組件:

  • Sqoop:Sqoop是一個工具,用來在關係型數據庫和Hadoop之間傳輸數據。你可以使用Sqoop來從RDBMS(MySQL or Oracle)導入數據到Hadoop環境裏,或者通過MapReduce轉換數據,把數據導回到RDBMS。
  • Flume: Flume 是Cloudera提供的一個高可用的、高可靠的、分佈式的海量日誌採集、聚合和傳輸的系統。Flume支持在日誌系統中定製各類數據發送方,用於收集數據。同時,Flume支持對數據進行簡單處理,並寫入各種數據接受方(可定製)。
  • Logstash:也是一個應用程序日誌、事件的傳輸、處理、管理和搜索的平臺。可以用它來統一對應用程序日誌進行收集管理,提供了Web接口用於查詢和統計。

除了收集之外,因爲巨大的IO壓力,我們通常會在收集組件與數據存儲組件之間加一層消息隊列用於削峯填谷,降低IO壓力,常用的組件包括:

  • Kafka 是一種高吞吐量的分佈式發佈訂閱消息系統,它可以處理消費者規模網站中的所有動作流數據,目前已成爲大數據系統在異步和分佈式消息之間的最佳選擇。
  • RabbitMQ 是一個受歡迎的消息代理系統,通常用於應用程序之間或者程序的不同組件之間通過消息來進行集成。RabbitMQ提供可靠的應用消息發送、易於使用、支持所有主流操作系統、支持大量開發者平臺。
  • ActiveMQ 是Apache出品,號稱“最流行的,最強大”的開源消息集成模式服務器。ActiveMQ特點是速度快,支持多種跨語言的客戶端和協議,其企業集成模式和許多先進的功能易於使用,是一個完全支持JMS1.1和J2EE 1.4規範的JMS Provider實現。

MQ組件的對比可以參考阿里中間件團隊做的壓測RocketMQ與kafka對比(18項差異),Kafka、RabbitMQ、RocketMQ消息中間件的對比 —— 消息發送性能

數據存儲

數據存儲這塊分爲兩個部分,一部分是底層的文件系統,還有一部分就是之上的數據庫或數據倉庫。

文件系統

大數據文件系統其實是大數據平臺架構最爲基礎的組件,其他的組件或多或少都會依賴這個基礎組件,

目前應用最爲廣泛的大數據存儲文件系統非Hadoop 的HDFS莫屬,除此之外,簡單介紹下號稱可以取代HDFS的Ceph。

  • HDFS:HDFS是一個高度容錯性(多副本,自恢復)的分佈式文件系統,能提供高吞吐量的數據訪問,非常適合大規模數據集上的訪問,不支持低延遲數據訪問,不支持多用戶寫入、任意修改文件。HDFS是Hadoop 大數據工具棧裏最基礎有也是最重要的一個組件,基於Google的GFS開發。
  • Ceph:Ceph是一個符合POSIX、開源的分佈式存儲系統。最早是加州大學聖克魯茲分校(USSC)博士生 Sage Weil 博士期間的一項有關存儲系統的研究項目,Ceph的主要目標是設計成基於POSIX的沒有單點故障的分佈式文件系統,使數據能容錯和無縫的複製。真正讓ceph叱吒風雲的是開源雲計算解決方案Openstack,Openstack+Ceph的方案已被業界廣泛使用。

數據庫或數據倉庫

針對大數據的數據庫大部分是NOSQL數據庫,這裏順便澄清一下,NOSQL的真正意義是“ not only sql”,並非NOSQL是RMDB的對立面。

  • Hbase:是一個開源的面向列的非關係型分佈式數據庫(NoSQL),它參考了谷歌的BigTable建模,實現的編程語言爲Java。它是Apache軟件基金會的Hadoop項目的一部分,運行於HDFS文件系統之上,爲 Hadoop 提供類似於BigTable規模的服務。因此,它可以容錯地存儲海量稀疏的數據。
  • MongoDB:一個基於分佈式文件存儲的數據庫,面向文件,旨在爲web應用提供可擴展的高性能數據存儲解決方案。介於關係數據庫和非關係數據庫之間的開源產品,是非關係數據庫當中功能最豐富、最像關係數據庫的產品。
  • Cassandra:是一個混合型的非關係的數據庫,類似於Google的BigTable,由Facebook開發。
  • Neo4j:一個高性能的,NOSQL圖形數據庫,它將結構化數據存儲在網絡上而不是表中。

數據計算

簡單介紹以下目前比較流行的幾種大數據計算框架:

  • MapReduce:最爲知名的當屬MapReduce,MapReduce屬於一種批處理計算框架,藉助於HDFS,基於磁盤進行數據計算,MapReduce的容錯能力超強,適合處理巨大規模集羣(幾百上千個節點)下長時間非實時的大計算任務;但其實時性較差。Hadoop系列的Hive,Pig等數據倉庫都是基於MapReduce做的。
  • Spark:是基於內存計算的大數據並行計算框架。Spark基於內存計算,提高了在大數據環境下數據處理的實時性,同時保證了高容錯性和高可伸縮性,允許用戶將Spark部署在大量的廉價硬件之上,形成集羣。Spark是MapReduce的替代方案,而且兼容HDFS等分佈式存儲層,可融入Hadoop的生態系統,以彌補缺失MapReduce的不足。適合迭代計算(常見於machine learning領域,比如PageRank)和交互式計算(data mining領域,比如SQL查詢)。
  • Storm:典型的流計算系統,會對隨時進入系統的數據進行計算,近實時處理需求的任務很適合使用流處理模式,適於處理必須對變動或峯值做出響應,並且關注一段時間內變化趨勢的數據,類似框架還有 spark streaming。

除了計算框架外,因爲是分佈式系統,我們還需要對計算資源進行分配調度,以及各種服務間的協調,發現,配置管理等,所以這裏又出現了兩個重要的組件:

  • Yarn:Hadoop 2.0中推出的非常重要的資源管理框架,負責集羣資源管理和調度,MapReduce就是運行在YARN上的離線處理框架。
  • Zookeeper:是Google的Chubby一個開源的實現,是Apache軟件基金會的一個軟件項目,他爲大型分佈式計算提供開源的分佈式配置服務、同步服務和命名註冊。

兩者的區別是:Yarn是resource management,解決的問題是怎樣提高整個集羣的資源利用率。Zookeeper是 Coordination,解決的是集羣中各種服務的發現,同步,協調配合以保持整個集羣的穩定。

數據分析

數據分析的工具就更多了,這裏列舉一些業界用的比較多的,相對成熟的工具:

  • Hive,Pig:兩者都是Hadoop開源的分析工具,將這兩個工具放在一起的原因是,他們底層都是基於MapReduce實現的,不過Hive是採用SQL的形式調用,而Pig是用腳本的形式,因爲SQL的便利易用,Hive已逐漸取代Pig。
  • Impala: Impala是Cloudera開發的一款用來進行大數據實時查詢分析的開源工具,它能夠實現通過SQL風格來操作數據,Impala沒有再使用緩慢的 Hive+MapReduce批處理,而是通過使用與商用並行關係數據庫中類似的分佈式查詢引擎(由Query Planner、Query Coordinator和Query Exec Engine三部分組成),可以直接從HDFS或HBase中用SELECT、JOIN和統計函數查詢數據,從而大大降低了延遲。
  • Presto:隨着數據越來越多,使用Hive進行一個簡單的數據查詢可能要花費幾分到幾小時,顯然不能滿足交互式查詢的需求,Facebook開發人員便開發了Presto,Presto依賴於Hive meta,摒棄了MapReduce方法,通過使用分佈式查詢,可以快速高效的完成海量數據的查詢。
  • Spark:這裏又提了Spark是因爲Spark的應用越來越廣泛,而且Spark 集成了很多機器學習的框架,可以很方便的調用。
  • Kylin:Apache Kylin是一個開源的分佈式分析引擎,提供Hadoop之上的SQL查詢接口及多維分析(OLAP)能力以支持超大規模數據,最初由eBay Inc. 開發並貢獻至開源社區。它能在亞秒內查詢巨大的Hive表。

整體框架

以上是按照數據處理的流程來區分的,這裏從網上找到一張由下而上的整體架構:

data-bricks

參考文章

Big data architecture - Introduction

Exploring Big Data Solutions: When To Use Hadoop vs In-Memory vs MPP

Hadoop大數據平臺架構與實踐 | hadoop概述與安裝

大數據領域常用的技術、框架

Hadoop 分佈式文件系統 - HDFS

鏈家網大數據平臺建設,平臺樞紐——工具鏈

美團大數據平臺架構實踐

大數據開源組件圖譜

大數據框架對比:Hadoop、Storm、Samza、Spark和Flink

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章