提起大數據,不得不提由IBM提出的關于大數據的5V特點:Volume(大量)、Velocity(高速)、Variety(多樣)、Value(低價值密度)、Veracity(真實性),而對于大數據領域的從業(yè)人員的日常工作也與這5V密切相關。大數據技術在過去的幾十年中取得非常迅速的發(fā)展,尤以Hadoop和Spark最為突出,已構建起龐大的技術生態(tài)體系圈。
首先通過一張圖來了解一下目前大數據領域常用的一些技術,當然大數據發(fā)展至今所涉及技術遠不止這些。
下面分不同層介紹各個技術,當然各個層并不是字面意義上的嚴格劃分,如Hive既提供數據處理功能也提供數據存儲功能,但此處將其劃為數據分析層中。 - HBase
基于Google Bigtable的開源實現,是一個具有高可靠性、高性能、面向列、可伸縮性、典型的key/value分布式存儲的nosql數據庫系統(tǒng),主要用于海量結構化和半結構化數據存儲。它介于nosql和RDBMS之間,僅能通過行鍵(row key)和行鍵的range來檢索數據,行數據存儲是原子性的,僅支持單行事務(可通過hive支持來實現多表join等復雜操作)。HBase查詢數據功能很簡單,不支持join等復雜操作,不支持跨行和跨表事務 - Kudu
介于HDFS和HBase之間的基于列式存儲的分布式數據庫。兼具了HBase的實時性、HDFS的高吞吐,以及傳統(tǒng)數據庫的sql支持 - HDFS
分布式文件存儲系統(tǒng),具有高容錯(high fault-tolerant)、高吞吐(high throughput)、高可用(high available)的特性。HDFS非常適合大規(guī)模數據集上的應用,提供高吞吐量的數據訪問,可部署在廉價的機器上。它放寬了POSIX的要求,這樣可以實現流的形式訪問(文件系統(tǒng)中的數據。主要為各類分布式計算框架如Spark、MapReduce等提供海量數據存儲服務,同時HDFS和HBase底層數據存儲也依賴于HDFS
- Spark
Spark是一個快速、通用、可擴展、可容錯的、內存迭代式計算的大數據分析引擎。目前生態(tài)體系主要包括用于批數據處理的SparkRDD、SparkSQL,用于流數據處理的SparkStreaming、Structured-Streaming,用于機器學習的Spark MLLib,用于圖計算的Graphx以及用于統(tǒng)計分析的SparkR,支持Java、Scala、Python、R多種數據語言 - Flink
分布式的大數據處理引擎,可以對有限數據流和無線數據流進行有狀態(tài)的計算。Flink在設計之初就是以流為基礎發(fā)展的,然后再進入批處理領域,相對于spark而言,它是一個真正意義上的實時計算引擎 - Storm
由Twitter開源后歸于Apache管理的分布式實時計算系統(tǒng)。Storm是一個沒有批處理能力的數據流處理計算引擎,storm提供了偏底層的API,用戶需要自己實現很多復雜的邏輯 - MapReduce
分布式運算程序的編程框架,適用于離線數據處理場景,內部處理流程主要劃分map和reduce兩個階段 - Hive
Hive是基于Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,并提供HQL語句(類SQL語言)查詢功能,存儲依賴于HDFS。支持多種計算引擎,如Spark、MapReduce(默認)、Tez;支持多種存儲格式,如TextFile、SequenceFile、RCFile、ORC、Parquet(常用);支持多種壓縮格式,如gzip、lzo、snappy(常用)、bzip2 - Tez
支持DAG作業(yè)的開源計算框架。相對于MapReduce性能更好,主要原因在于其將作業(yè)描述為DAG(有向無環(huán)圖),這一點與Spark類似 - Pig
基于Hadoop的大規(guī)模數據分析平臺,它包含了一種名為Pig Latin的腳本語言來描述數據流,并行地執(zhí)行數據流處理的引擎,為復雜的海量數據并行計算提供了一個簡單的操作和編程接口。Pig Latin本身提供了許多傳統(tǒng)的數據操作,同時允許用戶自己開發(fā)一些自定義函數用來讀取、處理和寫數據,該語言的編譯器會把類SQL的數據分析請求轉換為一系列經過優(yōu)化處理的MapReduce運算 - Mahout
提供一些可擴展的機器學習領域經典算法的實現,Mahout包含許多實現,包括聚類、分類、推薦過濾、頻繁子項挖掘。通過使用Apache Hadoop 庫,可以將Mahout擴展到云中 - Phoenix
構建在HBase之上的一個SQL層,能讓我們通過標準的JDBC API操作HBase中的數據。Phoenix完全使用Java編寫,作為HBase內嵌的JDBC驅動。Phoenix查詢引擎會將SQL查詢轉換為一個或多個HBase scan,并編排執(zhí)行以生成標準JDBC結果集
- Druid
開源的、基于列存儲的、分布式的,適用于實時數據分析的存儲系統(tǒng),能夠快速聚合、靈活過濾、毫秒級查詢和低延遲數據導入。通過使用Bitmap indexing加速列存儲的查詢速度,并使用CONCISE算法來對bitmap indexing進行壓縮,使得生成的segments比原始文本文件小很多,并且它的各個組成部分之間耦合性低,如果不需要實時數據完全可以忽略實時節(jié)點 - Kylin
最初由eBayInc.開發(fā)并貢獻至開源社區(qū)的分布式分析引擎。提供Hadoop/Spark之上的SQL查詢接口及多維分析(OLAP)能力以支持超大規(guī)模數據,它能在亞秒內查詢巨大的Hive表。需要使用者對數倉模型有深度了解,并需構建cube。能夠與多種可視化工具,如Tableau,PowerBI等,令用戶可以使用BI工具對Hadoop數據進行分析 - 提供對HDFS、HBase等數據的高性能、低延遲的交互式SQL查詢功能的大數據查詢分析引擎,由Cloudera開源。它基于Hive,使用Hive的元數據在內存中計算,具有實時、批處理、高并發(fā)等優(yōu)點
- Presto
開源的分布式大數據SQL查詢引擎,適用于交互式分析查詢??梢詫⒍鄠€數據源的數據進行合并,并且可以直接從HDFS讀取數據,在使用前不需要大量的ETL操作
- Oozie
基于工作流引擎的任務調度框架,能夠提供能夠提供對MapReduce和Pig 任務的調度與協調 - Azkaban
由LinkedIn開源,相對Oozie更輕量級。用于在一個工作流內以一個特定順序運行一組任務,通過一種kv文件格式來建立任務之間的依賴關系并為用戶提供了易于使用的web界面來維護和跟蹤允許任務的工作流
|