大數據技術棧一覽

1. 數據採集和傳輸層

Flume

Flume一個分佈式、可靠的、高可用的用於數據採集、聚合和傳輸的系統。常用於日誌採集系統中,支持定製各類數據發送方用於收集數據、通過自定義攔截器對數據進行簡單的預處理並傳輸到各種數據接收方如HDFS、HBase、Kafka中。之前由Cloudera開發,後納入Apache

Logstash

ELK工作棧的一員,也常用於數據採集,是開源的服務器端數據處理管道

Sqoop

Sqoop主要通過一組命令進行數據導入導出的工具,底層引擎依賴於MapReduce,主要用於Hadoop(如HDFS、Hive、HBase)和RDBMS(如mysql、oracle)之間的數據導入導出

Kafka

分佈式消息系統。生產者(producer)——消費者(consumer)模型。提供了類似於JMS的特性,但設計上完全不同,不遵循JMS規範。如kafka允許多個消費者主動拉取數據,而JMS中只有點對點模式消費者纔會主動拉取數據。主要應用在數據緩衝、異步通信、彙集數據、系統接偶等方面

Pulsar

pub-sub模式的分佈式消息平臺,擁有靈活的消息模型和直觀的客戶端API。類似於Kafka,但Pulsar支持多租戶,有着資產和命名空間的概念,資產代表系統裏的租戶。假設有一個Pulsar集羣用於支持多個應用程序,集羣裏的每個資產可以代表一個組織的團隊、一個核心的功能或一個產品線。一個資產可以包含多個命名空間,一個命名空間可以包含任意個主題

2. 數據存儲層

HBase

基於Google Bigtable的開源實現,是一個具有高可靠性、高性能、面向列、可伸縮性、典型的key/value分佈式存儲的nosql數據庫系統,主要用於海量結構化和半結構化數據存儲。它介於nosql和RDBMS之間,僅能通過行鍵(row key)和行鍵的range來檢索數據,行數據存儲是原子性的,僅支持單行事務(可通過hive支持來實現多表join等複雜操作)。HBase查詢數據功能很簡單,不支持join等複雜操作,不支持跨行和跨表事務

Kudu

介於HDFS和HBase之間的基於列式存儲的分佈式數據庫。兼具了HBase的實時性、HDFS的高吞吐,以及傳統數據庫的sql支持

HDFS

分佈式文件存儲系統,具有高容錯(high fault-tolerant)、高吞吐(high throughput)、高可用(high available)的特性。HDFS非常適合大規模數據集上的應用,提供高吞吐量的數據訪問,可部署在廉價的機器上。它放寬了POSIX的要求,這樣可以實現流的形式訪問(文件系統中的數據。主要爲各類分佈式計算框架如Spark、MapReduce等提供海量數據存儲服務,同時HDFS和HBase底層數據存儲也依賴於HDFS

3. 數據分析層

Spark

Spark是一個快速、通用、可擴展、可容錯的、內存迭代式計算的大數據分析引擎。目前生態體系主要包括用於批數據處理的Spark RDD、Spark SQL,用於流數據處理的Spark Streaming、Structured-Streaming,用於機器學習的Spark MLLib,用於圖計算的Graphx以及用於統計分析的SparkR,支持Java、Scala、Python、R多種數據語言

Flink

分佈式的大數據處理引擎,可以對有限數據流和無線數據流進行有狀態的計算。Flink在設計之初就是以流爲基礎發展的,然後再進入批處理領域,相對於spark而言,它是一個真正意義上的實時計算引擎

Storm

由Twitter開源後歸於Apache管理的分佈式實時計算系統。Storm是一個沒有批處理能力的數據流處理計算引擎,storm提供了偏底層的API,用戶需要自己實現很多複雜的邏輯

MapReduce

分佈式運算程序的編程框架,適用於離線數據處理場景,內部處理流程主要劃分map和reduce兩個階段

Hive

Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射爲一張數據庫表,並提供類SQL查詢功能,存儲依賴於HDFS。支持多種計算引擎,如Spark、MapReduce(默認)、Tez;支持多種存儲格式,如TextFile、SequenceFile、RCFile、ORC、Parquet(常用);支持多種壓縮格式,如gzip、lzo、snappy(常用)、bzip2

Tez

支持DAG作業的開源計算框架。​相對於MapReduce性能更好,主要原因在於其將作業描述爲DAG(有向無環圖),這一點與Spark類似​

Pig

基於Hadoop的大規模數據分析平臺,它包含了一種名爲Pig Latin的腳本語言來描述數據流,並行地執行數據流處理的引擎,爲複雜的海量數據並行計算提供了一個簡單的操作和編程接口。Pig Latin本身提供了許多傳統的數據操作,同時允許用戶自己開發一些自定義函數用來讀取、處理和寫數據,該語言的編譯器會把類SQL的數據分析請求轉換爲一系列經過優化處理的MapReduce運算

Mahout

提供一些可擴展的機器學習領域經典算法的實現,Mahout包含許多實現,包括聚類、分類、推薦過濾、頻繁子項挖掘。通過使用Apache Hadoop 庫,可以將Mahout擴展到雲中

Phoenix

構建在HBase之上的一個SQL層,能讓我們通過標準的JDBC API操作HBase中的數據。Phoenix完全使用Java編寫,作爲HBase內嵌的JDBC驅動。Phoenix查詢引擎會將SQL查詢轉換爲一個或多個HBase scan,並編排執行以生成標準JDBC結果集

4. OLAP引擎

Druid

開源的、基於列存儲的、分佈式的,適用於實時數據分析的存儲系統,能夠快速聚合、靈活過濾、毫秒級查詢和低延遲數據導入。通過使用Bitmap indexing加速列存儲的查詢速度,並使用CONCISE算法來對bitmap indexing進行壓縮,使得生成的segments比原始文本文件小很多,並且它的各個組成部分之間耦合性低,如果不需要實時數據完全可以忽略實時節點

Kylin

最初由eBay Inc. 開發並貢獻至開源社區的分佈式分析引擎。提供Hadoop/Spark之上的SQL查詢接口及多維分析(OLAP)能力以支持超大規模數據,它能在亞秒內查詢巨大的Hive表。需要使用者對數倉模型有深度瞭解,並需構建cube。能夠與多種可視化工具,如Tableau,PowerBI等,令用戶可以使用BI工具對Hadoop數據進行分析

Impala

提供對HDFS、HBase等數據的高性能、低延遲的交互式SQL查詢功能的大數據查詢分析引擎,由Cloudera開源。它基於Hive,使用Hive的元數據在內存中計算,具有實時、批處理、高併發等優點

Presto

開源的分佈式大數據SQL查詢引擎,適用於交互式分析查詢。可以將多個數據源的數據進行合併,並且可以直接從HDFS讀取數據,在使用前不需要大量的ETL操作

5. 資源管理層

Yarn

Yarn是一個資源調度平臺,負責爲運算程序分配資源和調度,不參與用戶程序內部工作。核心組件包括:ResourceManager(全局資源管理器,負責整個系統的資源管理和分配)、NodeManager(每個節點上的資源和任務管理器)

Kubernetes

又稱K8s,爲容器化的應用提供資源調度、部署運行、均衡容災、服務註冊、擴容縮容等功能的自動化容器操作的開源平臺。具體體現在:自動化容器的部署和複製、隨時擴展或收縮容器規模、將容器組織成組,並且提供容器間的負載均衡等。Kubernetes支持docker和Rocket,可以將Docker看成Kubernetes內部使用的低級別組件

Mesos

類似於Yarn,也是一個分佈式資源管理平臺,爲MPI、Spark作業在統一資源管理環境下運行。它對Hadoop2.0支持很好,但國內用的不多

6. 工作流調度器

Oozie

基於工作流引擎的任務調度框架,能夠提供能夠提供對MapReduce和Pig 任務的調度與協調

Azkaban

工作流調度器由LinkedIn開源,相對Oozie更輕量級。用於在一個工作流內以一個特定順序運行一組任務,通過一種kv文件格式來建立任務之間的依賴關係併爲用戶提供了易於使用的web界面來維護和跟蹤允許任務的工作流

7. 其他

Ambari

基於web的安裝部署工具,支持對大多數的Hadoop組件,如HDFS、MapReduce、Hive、Pig、HBase等的管理和監控
Zookeeper
分佈式協調服務即爲用戶的分佈式應用程序提供協調服務,如主從協調、服務器節點動態上下線、統一配置管理、分佈式共享鎖等,它本身也是一個分佈式程序(部署奇數臺,只要由半數以上zookeeper節點存活,zookeeper集羣就能正常提供服務),它是Google Chubby一個開源實現

原文鏈接:https://blog.csdn.net/qq_42164977/article/details/103109741

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