提起大數(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開(kāi)發(fā),后納入Apache -
Logstash
ELK工作棧的一員丛晌,也常用于數(shù)據(jù)采集仅炊,是開(kāi)源的服務(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的開(kāi)源實(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開(kāi)源后歸于Apache管理的分布式實(shí)時(shí)計(jì)算系統(tǒng)余蟹。Storm是一個(gè)沒(méi)有批處理能力的數(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è)的開(kāi)源計(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í)允許用戶自己開(kāi)發(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
開(kāi)源的助析、基于列存儲(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.開(kāi)發(fā)并貢獻(xiàn)至開(kāi)源社區(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開(kāi)源我抠。它基于Hive,使用Hive的元數(shù)據(jù)在內(nèi)存中計(jì)算袜茧,具有實(shí)時(shí)菜拓、批處理、高并發(fā)等優(yōu)點(diǎn)
-
Presto
開(kāi)源的分布式大數(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)化容器操作的開(kāi)源平臺(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開(kāi)源平酿,相對(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è)開(kāi)源實(shí)現(xiàn)