本篇內(nèi)容介紹了“Flume、Kafka、Spark基本概念是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
成都做網(wǎng)站、成都網(wǎng)站制作的關(guān)注點(diǎn)不是能為您做些什么網(wǎng)站,而是怎么做網(wǎng)站,有沒(méi)有做好網(wǎng)站,給創(chuàng)新互聯(lián)一個(gè)展示的機(jī)會(huì)來(lái)證明自己,這并不會(huì)花費(fèi)您太多時(shí)間,或許會(huì)給您帶來(lái)新的靈感和驚喜。面向用戶(hù)友好,注重用戶(hù)體驗(yàn),一切以用戶(hù)為中心。
Flume是Cloudera提供的一個(gè)高可用的,高可靠的,分布式的海量日志采集、聚合和傳輸?shù)南到y(tǒng),F(xiàn)lume支持在日志系統(tǒng)中定制各類(lèi)數(shù)據(jù)發(fā)送方,用于收集數(shù)據(jù);同時(shí),F(xiàn)lume提供對(duì)數(shù)據(jù)進(jìn)行簡(jiǎn)單處理,并寫(xiě)到各種數(shù)據(jù)接受方(可定制)的能力。
Flume提供對(duì)數(shù)據(jù)進(jìn)行簡(jiǎn)單處理,并寫(xiě)到各種數(shù)據(jù)接受方(可定制)的能力 Flume提供了從console(控制臺(tái))、RPC(Thrift-RPC)、text(文件)、tail(UNIX tail)、syslog(syslog日志系統(tǒng),支持TCP和UDP等2種模式),exec(命令執(zhí)行)等數(shù)據(jù)源上收集數(shù)據(jù)的能力。
Flume-og采用了多Master的方式。為了保證配置數(shù)據(jù)的一致性,F(xiàn)lume引入了ZooKeeper,用于保存配置數(shù)據(jù),ZooKeeper本身可保證配置數(shù)據(jù)的一致性和高可用,另外,在配置數(shù)據(jù)發(fā)生變化時(shí),ZooKeeper可以通知Flume Master節(jié)點(diǎn)。Flume Master間使用gossip協(xié)議同步數(shù)據(jù)。
Flume-ng最明顯的改動(dòng)就是取消了集中管理配置的 Master 和 Zookeeper,變?yōu)橐粋€(gè)純粹的傳輸工具。Flume-ng另一個(gè)主要的不同點(diǎn)是讀入數(shù)據(jù)和寫(xiě)出數(shù)據(jù)現(xiàn)在由不同的工作線程處理(稱(chēng)為 Runner)。 在 Flume-og 中,讀入線程同樣做寫(xiě)出工作(除了故障重試)。如果寫(xiě)出慢的話(huà)(不是完全失?。?,它將阻塞 Flume 接收數(shù)據(jù)的能力。這種異步的設(shè)計(jì)使讀入線程可以順暢的工作而無(wú)需關(guān)注下游的任何問(wèn)題。
Kafka是一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng),有如下特性:
通過(guò)O(1)的磁盤(pán)數(shù)據(jù)結(jié)構(gòu)提供消息的持久化,這種結(jié)構(gòu)對(duì)于即使數(shù)以TB的消息存儲(chǔ)也能夠保持長(zhǎng)時(shí)間的穩(wěn)定性能。
高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒數(shù)百萬(wàn)的消息。
支持通過(guò)Kafka服務(wù)器和消費(fèi)機(jī)集群來(lái)分區(qū)消息。
支持Hadoop并行數(shù)據(jù)加載。
Twitter將Storm正式開(kāi)源了,這是一個(gè)分布式的、容錯(cuò)的實(shí)時(shí)計(jì)算系統(tǒng),它被托管在GitHub上,遵循 Eclipse Public License 1.0。Storm是實(shí)時(shí)處理系統(tǒng)。Storm基本是用Clojure(還有一部分是用java)寫(xiě)的。
Storm為分布式實(shí)時(shí)計(jì)算提供了一組通用原語(yǔ),可被用于“流處理”之中,實(shí)時(shí)處理消息并更新數(shù)據(jù)庫(kù)。這是管理隊(duì)列及工作者集群的另一種方式。 Storm也可被用于“連續(xù)計(jì)算”(continuous computation),對(duì)數(shù)據(jù)流做連續(xù)查詢(xún),在計(jì)算時(shí)就將結(jié)果以流的形式輸出給用戶(hù)。它還可被用于“分布式RPC”,以并行的方式運(yùn)行昂貴的運(yùn)算。 Storm的主工程師Nathan Marz表示:
Storm可以方便地在一個(gè)計(jì)算機(jī)集群中編寫(xiě)與擴(kuò)展復(fù)雜的實(shí)時(shí)計(jì)算,Storm用于實(shí)時(shí)處理,就好比 Hadoop 用于批處理。Storm保證每個(gè)消息都會(huì)得到處理,而且它很快——在一個(gè)小集群中,每秒可以處理數(shù)以百萬(wàn)計(jì)的消息。更棒的是你可以使用任意編程語(yǔ)言來(lái)做開(kāi)發(fā)。
Storm的主要特點(diǎn)如下:
簡(jiǎn)單的編程模型。類(lèi)似于MapReduce降低了并行批處理復(fù)雜性,Storm降低了進(jìn)行實(shí)時(shí)處理的復(fù)雜性。
可以使用各種編程語(yǔ)言。你可以在Storm之上使用各種編程語(yǔ)言。默認(rèn)支持Clojure、Java、Ruby和Python。要增加對(duì)其他語(yǔ)言的支持,只需實(shí)現(xiàn)一個(gè)簡(jiǎn)單的Storm通信協(xié)議即可。
容錯(cuò)性。Storm會(huì)管理工作進(jìn)程和節(jié)點(diǎn)的故障。
水平擴(kuò)展。計(jì)算是在多個(gè)線程、進(jìn)程和服務(wù)器之間并行進(jìn)行的。
可靠的消息處理。Storm保證每個(gè)消息至少能得到一次完整處理。任務(wù)失敗時(shí),它會(huì)負(fù)責(zé)從消息源重試消息。
快速。系統(tǒng)的設(shè)計(jì)保證了消息能得到快速的處理,使用?MQ作為其底層消息隊(duì)列。
本地模式。Storm有一個(gè)“本地模式”,可以在處理過(guò)程中完全模擬Storm集群。這讓你可以快速進(jìn)行開(kāi)發(fā)和單元測(cè)試。
Storm集群由一個(gè)主節(jié)點(diǎn)和多個(gè)工作節(jié)點(diǎn)組成。主節(jié)點(diǎn)運(yùn)行了一個(gè)名為“Nimbus”的守護(hù)進(jìn)程,用于分配代碼、布置任務(wù)及故障檢測(cè)。每個(gè)工作節(jié) 點(diǎn)都運(yùn)行了一個(gè)名為“Supervisor”的守護(hù)進(jìn)程,用于監(jiān)聽(tīng)工作,開(kāi)始并終止工作進(jìn)程。Nimbus和Supervisor都能快速失敗,而且是無(wú)狀態(tài)的,這樣一來(lái)它們就變得十分健壯,兩者的協(xié)調(diào)工作是由Apache ZooKeeper來(lái)完成的。
Storm的術(shù)語(yǔ)包括Stream、Spout、Bolt、Task、Worker、Stream Grouping和Topology。Stream是被處理的數(shù)據(jù)。Spout是數(shù)據(jù)源。Bolt處理數(shù)據(jù)。Task是運(yùn)行于Spout或Bolt中的 線程。Worker是運(yùn)行這些線程的進(jìn)程。Stream Grouping規(guī)定了Bolt接收什么東西作為輸入數(shù)據(jù)。數(shù)據(jù)可以隨機(jī)分配(術(shù)語(yǔ)為Shuffle),或者根據(jù)字段值分配(術(shù)語(yǔ)為Fields),或者 廣播(術(shù)語(yǔ)為All),或者總是發(fā)給一個(gè)Task(術(shù)語(yǔ)為Global),也可以不關(guān)心該數(shù)據(jù)(術(shù)語(yǔ)為None),或者由自定義邏輯來(lái)決定(術(shù)語(yǔ)為 Direct)。Topology是由Stream Grouping連接起來(lái)的Spout和Bolt節(jié)點(diǎn)網(wǎng)絡(luò)。在Storm Concepts頁(yè)面里對(duì)這些術(shù)語(yǔ)有更詳細(xì)的描述。
Scala是一門(mén)多范式的編程語(yǔ)言,一種類(lèi)似java的編程語(yǔ)言,設(shè)計(jì)初衷是實(shí)現(xiàn)可伸縮的語(yǔ)言、并集成面向?qū)ο缶幊毯秃瘮?shù)式編程的各種特性。
Scala有幾項(xiàng)關(guān)鍵特性表明了它的面向?qū)ο蟮谋举|(zhì)。例如,Scala中的每個(gè)值都是一個(gè)對(duì)象,包括基本數(shù)據(jù)類(lèi)型(即布爾值、數(shù)字等)在內(nèi),連函數(shù)也是對(duì)象。另外,類(lèi)可以被子類(lèi)化,而且Scala還提供了基于mixin的組合(mixin-based composition)。
與只支持單繼承的語(yǔ)言相比,Scala具有更廣泛意義上的類(lèi)重用。Scala允許定義新類(lèi)的時(shí)候重用“一個(gè)類(lèi)中新增的成員定義(即相較于其父類(lèi)的差異之處)”。Scala稱(chēng)之為mixin類(lèi)組合。
Scala還包含了若干函數(shù)式語(yǔ)言的關(guān)鍵概念,包括高階函數(shù)(Higher-Order Function)、局部套用(Currying)、嵌套函數(shù)(Nested Function)、序列解讀(Sequence Comprehensions)等等。
Scala是靜態(tài)類(lèi)型的,這就允許它提供泛型類(lèi)、內(nèi)部類(lèi)、甚至多態(tài)方法(Polymorphic Method)。另外值得一提的是,Scala被特意設(shè)計(jì)成能夠與Java和.NET互操作。Scala當(dāng)前版本還不能在.NET上運(yùn)行(雖然上一版可以-_-b),但按照計(jì)劃將來(lái)可以在.NET上運(yùn)行。
Scala可以與Java互操作。它用scalac這個(gè)編譯器把源文件編譯成Java的class文件(即在JVM上運(yùn)行的字節(jié)碼)。你可以從Scala中調(diào)用所有的Java類(lèi)庫(kù),也同樣可以從Java應(yīng)用程序中調(diào)用Scala的代碼。用David Rupp的話(huà)來(lái)說(shuō),
它也可以訪問(wèn)現(xiàn)存的數(shù)之不盡的Java類(lèi)庫(kù),這讓?zhuān)撛诘兀┻w移到Scala更加容易。
這是一個(gè)大規(guī)模并行處理(MPP)式 SQL 大數(shù)據(jù)分析引擎(注:
Impala像Dremel一樣,其借鑒了MPP(Massively Parallel Processing,大規(guī)模并行處理)并行數(shù)據(jù)庫(kù)的思想,拋棄了MapReduce這個(gè)不太適合做SQL查詢(xún)的范式,從而讓Hadoop支持處理交互式的工作負(fù)載
Impala 號(hào)稱(chēng)在性能上比Hive高出3~30倍,甚至預(yù)言說(shuō)在將來(lái)的某一天可能會(huì)超過(guò)Hive的使用率而成為Hadoop上最流行的實(shí)時(shí)計(jì)算平臺(tái)
Impala的目的不在于替換現(xiàn)有的MapReduce工具,如Hive,而是提供一個(gè)統(tǒng)一的平臺(tái)用于實(shí)時(shí)查詢(xún)。事實(shí)上Impala的運(yùn)行也是依賴(lài)Hive的元數(shù)據(jù)。
與Hive類(lèi)似,Impala也可以直接與HDFS和HBase庫(kù)直接交互。只不過(guò)Hive和其它建立在MapReduce上的框架適合需要長(zhǎng)時(shí)間運(yùn)行的批處理任務(wù)。例如那些批量提取,轉(zhuǎn)化,加載(ETL)類(lèi)型的Job。而Impala主要用于實(shí)時(shí)查詢(xún)。
hive是基于Hadoop的一個(gè)數(shù)據(jù)倉(cāng)庫(kù)工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫(kù)表,并提供簡(jiǎn)單的sql查詢(xún)功能,可以將sql語(yǔ)句轉(zhuǎn)換為MapReduce任務(wù)進(jìn)行運(yùn)行。 其優(yōu)點(diǎn)是學(xué)習(xí)成本低,可以通過(guò)類(lèi)SQL語(yǔ)句快速實(shí)現(xiàn)簡(jiǎn)單的MapReduce統(tǒng)計(jì),不必開(kāi)發(fā)專(zhuān)門(mén)的MapReduce應(yīng)用,十分適合數(shù)據(jù)倉(cāng)庫(kù)的統(tǒng)計(jì)分析。
Hive是建立在 Hadoop 上的數(shù)據(jù)倉(cāng)庫(kù)基礎(chǔ)構(gòu)架。它提供了一系列的工具,可以用來(lái)進(jìn)行數(shù)據(jù)提取轉(zhuǎn)化加載(ETL),這是一種可以存儲(chǔ)、查詢(xún)和分析存儲(chǔ)在 Hadoop 中的大規(guī)模數(shù)據(jù)的機(jī)制。Hive 定義了簡(jiǎn)單的類(lèi) SQL 查詢(xún)語(yǔ)言,稱(chēng)為 HQL,它允許熟悉 SQL 的用戶(hù)查詢(xún)數(shù)據(jù)。同時(shí),這個(gè)語(yǔ)言也允許熟悉 MapReduce 開(kāi)發(fā)者的開(kāi)發(fā)自定義的 mapper 和 reducer 來(lái)處理內(nèi)建的 mapper 和 reducer 無(wú)法完成的復(fù)雜的分析工作。
Hive 沒(méi)有專(zhuān)門(mén)的數(shù)據(jù)格式。 Hive 可以很好的工作在 Thrift 之上,控制分隔符,也允許用戶(hù)指定數(shù)據(jù)格式。
Spark是UC Berkeley AMP lab所開(kāi)源的類(lèi)Hadoop MapReduce的通用并行框架,Spark,擁有Hadoop MapReduce所具有的優(yōu)點(diǎn);但不同于MapReduce的是Job中間輸出結(jié)果可以保存在內(nèi)存中,從而不再需要讀寫(xiě)HDFS,因此Spark能更好地適用于數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)等需要迭代的MapReduce的算法。
Spark 是一種與 Hadoop 相似的開(kāi)源集群計(jì)算環(huán)境,但是兩者之間還存在一些不同之處,這些有用的不同之處使 Spark 在某些工作負(fù)載方面表現(xiàn)得更加優(yōu)越,換句話(huà)說(shuō),Spark 啟用了內(nèi)存分布數(shù)據(jù)集,除了能夠提供交互式查詢(xún)外,它還可以?xún)?yōu)化迭代工作負(fù)載。
Spark 是在 Scala 語(yǔ)言中實(shí)現(xiàn)的,它將 Scala 用作其應(yīng)用程序框架。與 Hadoop 不同,Spark 和 Scala 能夠緊密集成,其中的 Scala 可以像操作本地集合對(duì)象一樣輕松地操作分布式數(shù)據(jù)集。
盡管創(chuàng)建 Spark 是為了支持分布式數(shù)據(jù)集上的迭代作業(yè),但是實(shí)際上它是對(duì) Hadoop 的補(bǔ)充,可以在 Hadoop 文件系統(tǒng)中并行運(yùn)行。通過(guò)名為 Mesos 的第三方集群框架可以支持此行為。Spark 由加州大學(xué)伯克利分校 AMP 實(shí)驗(yàn)室 (Algorithms, Machines, and People Lab) 開(kāi)發(fā),可用來(lái)構(gòu)建大型的、低延遲的數(shù)據(jù)分析應(yīng)用程序。
“Flume、Kafka、Spark基本概念是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!