大數(shù)據(jù)常用技術(shù)棧

提起大數(shù)據(jù),不得不提由IBM提出的關(guān)于大數(shù)據(jù)的5V特點(diǎn):Volume(大量)、Velocity(高速)、Variety(多樣)、Value(低價(jià)值密度)、Veracity(真實(shí)性),而對(duì)于大數(shù)據(jù)領(lǐng)域的從業(yè)人員的日常工作也與這5V密切相關(guān)。大數(shù)據(jù)技術(shù)在過(guò)去的幾十年中取得非常迅速的發(fā)展,尤以Hadoop和Spark最為突出,已構(gòu)建起龐大的技術(shù)生態(tài)體系圈。

首先通過(guò)一張圖來(lái)了解一下目前大數(shù)據(jù)領(lǐng)域常用的一些技術(shù),當(dāng)然大數(shù)據(jù)發(fā)展至今所涉及技術(shù)遠(yuǎn)不止這些。

BigData Stack:

image

下面分不同層介紹各個(gè)技術(shù),當(dāng)然各個(gè)層并不是字面意義上的嚴(yán)格劃分,如Hive既提供數(shù)據(jù)處理功能也提供數(shù)據(jù)存儲(chǔ)功能,但此處將其劃為數(shù)據(jù)分析層中
1. 數(shù)據(jù)采集和傳輸層

  • Flume
    Flume一個(gè)分布式、可靠的、高可用的用于數(shù)據(jù)采集、聚合和傳輸?shù)南到y(tǒng)。常用于日志采集系統(tǒng)中,支持定制各類數(shù)據(jù)發(fā)送方用于收集數(shù)據(jù)、通過(guò)自定義攔截器對(duì)數(shù)據(jù)進(jìn)行簡(jiǎn)單的預(yù)處理并傳輸?shù)礁鞣N數(shù)據(jù)接收方如HDFS、HBase、Kafka中。之前由Cloudera開發(fā),后納入Apache
  • Logstash
    ELK工作棧的一員,也常用于數(shù)據(jù)采集,是開源的服務(wù)器端數(shù)據(jù)處理管道
  • Sqoop
    Sqoop主要通過(guò)一組命令進(jìn)行數(shù)據(jù)導(dǎo)入導(dǎo)出的工具,底層引擎依賴于MapReduce,主要用于Hadoop(如HDFS、Hive、HBase)和RDBMS(如mysql、oracle)之間的數(shù)據(jù)導(dǎo)入導(dǎo)出
  • Kafka
    分布式消息系統(tǒng)。生產(chǎn)者(producer)——消費(fèi)者(consumer)模型。提供了類似于JMS的特性,但設(shè)計(jì)上完全不同,不遵循JMS規(guī)范。如kafka允許多個(gè)消費(fèi)者主動(dòng)拉取數(shù)據(jù),而JMS中只有點(diǎn)對(duì)點(diǎn)模式消費(fèi)者才會(huì)主動(dòng)拉取數(shù)據(jù)。主要應(yīng)用在數(shù)據(jù)緩沖、異步通信、匯集數(shù)據(jù)、系統(tǒng)接偶等方面
  • Pulsar
    pub-sub模式的分布式消息平臺(tái),擁有靈活的消息模型和直觀的客戶端API。類似于Kafka,但Pulsar支持多租戶,有著資產(chǎn)和命名空間的概念,資產(chǎn)代表系統(tǒng)里的租戶。假設(shè)有一個(gè)Pulsar集群用于支持多個(gè)應(yīng)用程序,集群里的每個(gè)資產(chǎn)可以代表一個(gè)組織的團(tuán)隊(duì)、一個(gè)核心的功能或一個(gè)產(chǎn)品線。一個(gè)資產(chǎn)可以包含多個(gè)命名空間,一個(gè)命名空間可以包含任意個(gè)主題

2. 數(shù)據(jù)存儲(chǔ)層

  • HBase
    基于Google Bigtable的開源實(shí)現(xiàn),是一個(gè)具有高可靠性、高性能、面向列、可伸縮性、典型的key/value分布式存儲(chǔ)的nosql數(shù)據(jù)庫(kù)系統(tǒng),主要用于海量結(jié)構(gòu)化和半結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)。它介于nosql和RDBMS之間,僅能通過(guò)行鍵(row key)和行鍵的range來(lái)檢索數(shù)據(jù),行數(shù)據(jù)存儲(chǔ)是原子性的,僅支持單行事務(wù)(可通過(guò)hive支持來(lái)實(shí)現(xiàn)多表join等復(fù)雜操作)。HBase查詢數(shù)據(jù)功能很簡(jiǎn)單,不支持join等復(fù)雜操作,不支持跨行和跨表事務(wù)
  • Kudu
    介于HDFS和HBase之間的基于列式存儲(chǔ)的分布式數(shù)據(jù)庫(kù)。兼具了HBase的實(shí)時(shí)性、HDFS的高吞吐,以及傳統(tǒng)數(shù)據(jù)庫(kù)的sql支持
  • HDFS
    分布式文件存儲(chǔ)系統(tǒng),具有高容錯(cuò)(high fault-tolerant)、高吞吐(high throughput)、高可用(high available)的特性。HDFS非常適合大規(guī)模數(shù)據(jù)集上的應(yīng)用,提供高吞吐量的數(shù)據(jù)訪問(wèn),可部署在廉價(jià)的機(jī)器上。它放寬了POSIX的要求,這樣可以實(shí)現(xiàn)流的形式訪問(wèn)(文件系統(tǒng)中的數(shù)據(jù)。主要為各類分布式計(jì)算框架如Spark、MapReduce等提供海量數(shù)據(jù)存儲(chǔ)服務(wù),同時(shí)HDFS和HBase底層數(shù)據(jù)存儲(chǔ)也依賴于HDFS

3. 數(shù)據(jù)分析層

  • Spark
    Spark是一個(gè)快速、通用、可擴(kuò)展、可容錯(cuò)的、內(nèi)存迭代式計(jì)算的大數(shù)據(jù)分析引擎。目前生態(tài)體系主要包括用于批數(shù)據(jù)處理的SparkRDD、SparkSQL,用于流數(shù)據(jù)處理的SparkStreaming、Structured-Streaming,用于機(jī)器學(xué)習(xí)的Spark MLLib,用于圖計(jì)算的Graphx以及用于統(tǒng)計(jì)分析的SparkR,支持Java、Scala、Python、R多種數(shù)據(jù)語(yǔ)言
  • Flink
    分布式的大數(shù)據(jù)處理引擎,可以對(duì)有限數(shù)據(jù)流和無(wú)線數(shù)據(jù)流進(jìn)行有狀態(tài)的計(jì)算。Flink在設(shè)計(jì)之初就是以流為基礎(chǔ)發(fā)展的,然后再進(jìn)入批處理領(lǐng)域,相對(duì)于spark而言,它是一個(gè)真正意義上的實(shí)時(shí)計(jì)算引擎
  • Storm
    由Twitter開源后歸于Apache管理的分布式實(shí)時(shí)計(jì)算系統(tǒng)。Storm是一個(gè)沒有批處理能力的數(shù)據(jù)流處理計(jì)算引擎,storm提供了偏底層的API,用戶需要自己實(shí)現(xiàn)很多復(fù)雜的邏輯
  • MapReduce
    分布式運(yùn)算程序的編程框架,適用于離線數(shù)據(jù)處理場(chǎng)景,內(nèi)部處理流程主要?jiǎng)澐謒ap和reduce兩個(gè)階段
  • Hive
    Hive是基于Hadoop的一個(gè)數(shù)據(jù)倉(cāng)庫(kù)工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫(kù)表,并提供HQL語(yǔ)句(類SQL語(yǔ)言)查詢功能,存儲(chǔ)依賴于HDFS。支持多種計(jì)算引擎,如Spark、MapReduce(默認(rèn))、Tez;支持多種存儲(chǔ)格式,如TextFile、SequenceFile、RCFile、ORC、Parquet(常用);支持多種壓縮格式,如gzip、lzo、snappy(常用)、bzip2
  • Tez
    支持DAG作業(yè)的開源計(jì)算框架。相對(duì)于MapReduce性能更好,主要原因在于其將作業(yè)描述為DAG(有向無(wú)環(huán)圖),這一點(diǎn)與Spark類似
  • Pig
    基于Hadoop的大規(guī)模數(shù)據(jù)分析平臺(tái),它包含了一種名為Pig Latin的腳本語(yǔ)言來(lái)描述數(shù)據(jù)流,并行地執(zhí)行數(shù)據(jù)流處理的引擎,為復(fù)雜的海量數(shù)據(jù)并行計(jì)算提供了一個(gè)簡(jiǎn)單的操作和編程接口。Pig Latin本身提供了許多傳統(tǒng)的數(shù)據(jù)操作,同時(shí)允許用戶自己開發(fā)一些自定義函數(shù)用來(lái)讀取、處理和寫數(shù)據(jù),該語(yǔ)言的編譯器會(huì)把類SQL的數(shù)據(jù)分析請(qǐng)求轉(zhuǎn)換為一系列經(jīng)過(guò)優(yōu)化處理的MapReduce運(yùn)算
  • Mahout
    提供一些可擴(kuò)展的機(jī)器學(xué)習(xí)領(lǐng)域經(jīng)典算法的實(shí)現(xiàn),Mahout包含許多實(shí)現(xiàn),包括聚類、分類、推薦過(guò)濾、頻繁子項(xiàng)挖掘。通過(guò)使用Apache Hadoop 庫(kù),可以將Mahout擴(kuò)展到云中
  • Phoenix
    構(gòu)建在HBase之上的一個(gè)SQL層,能讓我們通過(guò)標(biāo)準(zhǔn)的JDBC API操作HBase中的數(shù)據(jù)。Phoenix完全使用Java編寫,作為HBase內(nèi)嵌的JDBC驅(qū)動(dòng)。Phoenix查詢引擎會(huì)將SQL查詢轉(zhuǎn)換為一個(gè)或多個(gè)HBase scan,并編排執(zhí)行以生成標(biāo)準(zhǔn)JDBC結(jié)果集

4. OLAP引擎

  • Druid
    開源的、基于列存儲(chǔ)的、分布式的,適用于實(shí)時(shí)數(shù)據(jù)分析的存儲(chǔ)系統(tǒng),能夠快速聚合、靈活過(guò)濾、毫秒級(jí)查詢和低延遲數(shù)據(jù)導(dǎo)入。通過(guò)使用Bitmap indexing加速列存儲(chǔ)的查詢速度,并使用CONCISE算法來(lái)對(duì)bitmap indexing進(jìn)行壓縮,使得生成的segments比原始文本文件小很多,并且它的各個(gè)組成部分之間耦合性低,如果不需要實(shí)時(shí)數(shù)據(jù)完全可以忽略實(shí)時(shí)節(jié)點(diǎn)
  • Kylin
    最初由eBayInc.開發(fā)并貢獻(xiàn)至開源社區(qū)的分布式分析引擎。提供Hadoop/Spark之上的SQL查詢接口及多維分析(OLAP)能力以支持超大規(guī)模數(shù)據(jù),它能在亞秒內(nèi)查詢巨大的Hive表。需要使用者對(duì)數(shù)倉(cāng)模型有深度了解,并需構(gòu)建cube。能夠與多種可視化工具,如Tableau,PowerBI等,令用戶可以使用BI工具對(duì)Hadoop數(shù)據(jù)進(jìn)行分析
  • Impala提供對(duì)HDFS、HBase等數(shù)據(jù)的高性能、低延遲的交互式SQL查詢功能的大數(shù)據(jù)查詢分析引擎,由Cloudera開源。它基于Hive,使用Hive的元數(shù)據(jù)在內(nèi)存中計(jì)算,具有實(shí)時(shí)、批處理、高并發(fā)等優(yōu)點(diǎn)
  • Presto
    開源的分布式大數(shù)據(jù)SQL查詢引擎,適用于交互式分析查詢??梢詫⒍鄠€(gè)數(shù)據(jù)源的數(shù)據(jù)進(jìn)行合并,并且可以直接從HDFS讀取數(shù)據(jù),在使用前不需要大量的ETL操作

5. 資源管理層

  • Yarn
    Yarn是一個(gè)資源調(diào)度平臺(tái),負(fù)責(zé)為運(yùn)算程序分配資源和調(diào)度,不參與用戶程序內(nèi)部工作。核心組件包括:ResourceManager(全局資源管理器,負(fù)責(zé)整個(gè)系統(tǒng)的資源管理和分配)、NodeManager(每個(gè)節(jié)點(diǎn)上的資源和任務(wù)管理器)
  • Kubernetes
    又稱K8s,為容器化的應(yīng)用提供資源調(diào)度、部署運(yùn)行、均衡容災(zāi)、服務(wù)注冊(cè)、擴(kuò)容縮容等功能的自動(dòng)化容器操作的開源平臺(tái)。具體體現(xiàn)在:自動(dòng)化容器的部署和復(fù)制、隨時(shí)擴(kuò)展或收縮容器規(guī)模、將容器組織成組,并且提供容器間的負(fù)載均衡等。Kubernetes支持docker和Rocket,可以將Docker看成Kubernetes內(nèi)部使用的低級(jí)別組件
  • Mesos
    類似于Yarn,也是一個(gè)分布式資源管理平臺(tái),為MPI、Spark作業(yè)在統(tǒng)一資源管理環(huán)境下運(yùn)行。它對(duì)Hadoop2.0支持很好,但國(guó)內(nèi)用的不多

6. 工作流調(diào)度器

  • Oozie
    基于工作流引擎的任務(wù)調(diào)度框架,能夠提供能夠提供對(duì)MapReduce和Pig 任務(wù)的調(diào)度與協(xié)調(diào)
  • Azkaban
    由LinkedIn開源,相對(duì)Oozie更輕量級(jí)。用于在一個(gè)工作流內(nèi)以一個(gè)特定順序運(yùn)行一組任務(wù),通過(guò)一種kv文件格式來(lái)建立任務(wù)之間的依賴關(guān)系并為用戶提供了易于使用的web界面來(lái)維護(hù)和跟蹤允許任務(wù)的工作流

7. 其他

  • Ambari
    基于web的安裝部署工具,支持對(duì)大多數(shù)的Hadoop組件,如HDFS、MapReduce、Hive、Pig、HBase等的管理和監(jiān)控
  • Zookeeper
    分布式協(xié)調(diào)服務(wù)即為用戶的分布式應(yīng)用程序提供協(xié)調(diào)服務(wù),如主從協(xié)調(diào)、服務(wù)器節(jié)點(diǎn)動(dòng)態(tài)上下線、統(tǒng)一配置管理、分布式共享鎖等,它本身也是一個(gè)分布式程序(部署奇數(shù)臺(tái),只要由半數(shù)以上zookeeper節(jié)點(diǎn)存活,zookeeper集群就能正常提供服務(wù)),它是Google Chubby一個(gè)開源實(shí)現(xiàn)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容