Flume是Cloudera提供的一個高可用的,高可靠的,分佈式的海量日誌採集、聚合和傳輸的系統,Flume支持在日誌系統中定製各種數據發送方,用於收集數據;同時,Flume提供對數據進行簡單處理,並寫到各類數據接受方(可定製)的能力。java
Flume提供對數據進行簡單處理,並寫到各類數據接受方(可定製)的能力 Flume提供了從console(控制檯)、RPC(Thrift-RPC)、text(文件)、tail(UNIX tail)、syslog(syslog日誌系統,支持TCP和UDP等2種模式),exec(命令執行)等數據源上收集數據的能力。web
Flume-og採用了多Master的方式。爲了保證配置數據的一致性,Flume引入了ZooKeeper,用於保存配置數據,ZooKeeper自己可保證配置數據的一致性和高可用,另外,在配置數據發生變化時,ZooKeeper能夠通知Flume Master節點。Flume Master間使用gossip協議同步數據。算法
Flume-ng最明顯的改動就是取消了集中管理配置的 Master 和 Zookeeper,變爲一個純粹的傳輸工具。Flume-ng另外一個主要的不一樣點是讀入數據和寫出數據如今由不一樣的工做線程處理(稱爲 Runner)。 在 Flume-og 中,讀入線程一樣作寫出工做(除了故障重試)。若是寫出慢的話(不是徹底失敗),它將阻塞 Flume 接收數據的能力。這種異步的設計使讀入線程能夠順暢的工做而無需關注下游的任何問題。sql
Kafka是一種高吞吐量的分佈式發佈訂閱消息系統,有以下特性:數據庫
經過O(1)的磁盤數據結構提供消息的持久化,這種結構對於即便數以TB的消息存儲也可以保持長時間的穩定性能。編程
高吞吐量:即便是很是普通的硬件Kafka也能夠支持每秒數百萬的消息。服務器
支持經過Kafka服務器和消費機集羣來分區消息。網絡
支持Hadoop並行數據加載。數據結構
Twitter將Storm正式開源了,這是一個分佈式的、容錯的實時計算系統,它被託管在GitHub上,遵循 Eclipse Public License 1.0。Storm是實時處理系統。Storm基本是用Clojure(還有一部分是用java)寫的。app
Storm爲分佈式實時計算提供了一組通用原語,可被用於「流處理」之中,實時處理消息並更新數據庫。這是管理隊列及工做者集羣的另外一種方式。 Storm也可被用於「連續計算」(continuous computation),對數據流作連續查詢,在計算時就將結果以流的形式輸出給用戶。它還可被用於「分佈式RPC」,以並行的方式運行昂貴的運算。 Storm的主工程師Nathan Marz表示:
Storm能夠方便地在一個計算機集羣中編寫與擴展複雜的實時計算,Storm用於實時處理,就比如 Hadoop 用於批處理。Storm保證每一個消息都會獲得處理,並且它很快——在一個小集羣中,每秒能夠處理數以百萬計的消息。更棒的是你可使用任意編程語言來作開發。
Storm的主要特色以下:
簡單的編程模型。相似於MapReduce下降了並行批處理複雜性,Storm下降了進行實時處理的複雜性。
可使用各類編程語言。你能夠在Storm之上使用各類編程語言。默認支持Clojure、Java、Ruby和Python。要增長對其餘語言的支持,只需實現一個簡單的Storm通訊協議便可。
容錯性。Storm會管理工做進程和節點的故障。
水平擴展。計算是在多個線程、進程和服務器之間並行進行的。
可靠的消息處理。Storm保證每一個消息至少能獲得一次完整處理。任務失敗時,它會負責從消息源重試消息。
快速。系統的設計保證了消息能獲得快速的處理,使用ØMQ做爲其底層消息隊列。
本地模式。Storm有一個「本地模式」,能夠在處理過程當中徹底模擬Storm集羣。這讓你能夠快速進行開發和單元測試。
Storm集羣由一個主節點和多個工做節點組成。主節點運行了一個名爲「Nimbus」的守護進程,用於分配代碼、佈置任務及故障檢測。每一個工做節 點都運行了一個名爲「Supervisor」的守護進程,用於監聽工做,開始並終止工做進程。Nimbus和Supervisor都能快速失敗,並且是無狀態的,這樣一來它們就變得十分健壯,二者的協調工做是由Apache ZooKeeper來完成的。
Storm的術語包括Stream、Spout、Bolt、Task、Worker、Stream Grouping和Topology。Stream是被處理的數據。Spout是數據源。Bolt處理數據。Task是運行於Spout或Bolt中的 線程。Worker是運行這些線程的進程。Stream Grouping規定了Bolt接收什麼東西做爲輸入數據。數據能夠隨機分配(術語爲Shuffle),或者根據字段值分配(術語爲Fields),或者 廣播(術語爲All),或者老是發給一個Task(術語爲Global),也能夠不關心該數據(術語爲None),或者由自定義邏輯來決定(術語爲 Direct)。Topology是由Stream Grouping鏈接起來的Spout和Bolt節點網絡。在Storm Concepts頁面裏對這些術語有更詳細的描述。
Scala是一門多範式的編程語言,一種相似java的編程語言,設計初衷是實現可伸縮的語言、並集成面向對象編程和函數式編程的各類特性。
Scala有幾項關鍵特性代表了它的面向對象的本質。例如,Scala中的每一個值都是一個對象,包括基本數據類型(即布爾值、數字等)在內,連函數也是對象。另外,類能夠被子類化,並且Scala還提供了基於mixin的組合(mixin-based composition)。
與只支持單繼承的語言相比,Scala具備更普遍意義上的類重用。Scala容許定義新類的時候重用「一個類中新增的成員定義(即相較於其父類的差別之處)」。Scala稱之爲mixin類組合。
Scala還包含了若干函數式語言的關鍵概念,包括高階函數(Higher-Order Function)、局部套用(Currying)、嵌套函數(Nested Function)、序列解讀(Sequence Comprehensions)等等。
Scala是靜態類型的,這就容許它提供泛型類、內部類、甚至多態方法(Polymorphic Method)。另外值得一提的是,Scala被特地設計成可以與Java和.NET互操做。Scala當前版本還不能在.NET上運行(雖然上一版能夠-_-b),但按照計劃未來能夠在.NET上運行。
Scala能夠與Java互操做。它用scalac這個編譯器把源文件編譯成Java的class文件(即在JVM上運行的字節碼)。你能夠從Scala中調用全部的Java類庫,也一樣能夠從Java應用程序中調用Scala的代碼。用David Rupp的話來講,
它也能夠訪問現存的數之不盡的Java類庫,這讓(潛在地)遷移到Scala更加容易。
這是一個大規模並行處理(MPP)式 SQL 大數據分析引擎(注:
Impala像Dremel同樣,其借鑑了MPP(Massively Parallel Processing,大規模並行處理)並行數據庫的思想,拋棄了MapReduce這個不太適合作SQL查詢的範式,從而讓Hadoop支持處理交互式的工做負載
Impala 號稱在性能上比Hive高出3~30倍,甚至預言說在未來的某一天可能會超過Hive的使用率而成爲Hadoop上最流行的實時計算平臺
Impala的目的不在於替換現有的MapReduce工具,如Hive,而是提供一個統一的平臺用於實時查詢。事實上Impala的運行也是依賴Hive的元數據。
與Hive相似,Impala也能夠直接與HDFS和HBase庫直接交互。只不過Hive和其它創建在MapReduce上的框架適合須要長時間運行的批處理任務。例如那些批量提取,轉化,加載(ETL)類型的Job。而Impala主要用於實時查詢。
hive是基於Hadoop的一個數據倉庫工具,能夠將結構化的數據文件映射爲一張數據庫表,並提供簡單的sql查詢功能,能夠將sql語句轉換爲MapReduce任務進行運行。 其優勢是學習成本低,能夠經過類SQL語句快速實現簡單的MapReduce統計,沒必要開發專門的MapReduce應用,十分適合數據倉庫的統計分析。
Hive是創建在 Hadoop 上的數據倉庫基礎構架。它提供了一系列的工具,能夠用來進行數據提取轉化加載(ETL),這是一種能夠存儲、查詢和分析存儲在 Hadoop 中的大規模數據的機制。Hive 定義了簡單的類 SQL 查詢語言,稱爲 HQL,它容許熟悉 SQL 的用戶查詢數據。同時,這個語言也容許熟悉 MapReduce 開發者的開發自定義的 mapper 和 reducer 來處理內建的 mapper 和 reducer 沒法完成的複雜的分析工做。
Hive 沒有專門的數據格式。 Hive 能夠很好的工做在 Thrift 之上,控制分隔符,也容許用戶指定數據格式。
Spark是UC Berkeley AMP lab所開源的類Hadoop MapReduce的通用並行框架,Spark,擁有Hadoop MapReduce所具備的優勢;但不一樣於MapReduce的是Job中間輸出結果能夠保存在內存中,從而再也不須要讀寫HDFS,所以Spark能更好地適用於數據挖掘與機器學習等須要迭代的MapReduce的算法。
Spark 是一種與 Hadoop 類似的開源集羣計算環境,可是二者之間還存在一些不一樣之處,這些有用的不一樣之處使 Spark 在某些工做負載方面表現得更加優越,換句話說,Spark 啓用了內存分佈數據集,除了可以提供交互式查詢外,它還能夠優化迭代工做負載。
Spark 是在 Scala 語言中實現的,它將 Scala 用做其應用程序框架。與 Hadoop 不一樣,Spark 和 Scala 可以緊密集成,其中的 Scala 能夠像操做本地集合對象同樣輕鬆地操做分佈式數據集。
儘管建立 Spark 是爲了支持分佈式數據集上的迭代做業,可是實際上它是對 Hadoop 的補充,能夠在 Hadoop 文件系統中並行運行。經過名爲 Mesos 的第三方集羣框架能夠支持此行爲。Spark 由加州大學伯克利分校 AMP 實驗室 (Algorithms, Machines, and People Lab) 開發,可用來構建大型的、低延遲的數據分析應用程序。