100+大數據開源處理工具彙總

本文除了一些常用的大數據工具,還總結匯總了其他大數據工具,幾乎是最全的大數據工具的總結。

如果你想入門大數據,可以對他們進行簡單的瞭解。

如果你想學習自己熟悉意外的大數據工具,可以看這篇文章。

如果你想選擇一個適合自己公司的大數據工具,也可以參考這篇文章。

我們將針對大數據開源工具不同的用處來進行分類,並且附上了官網和部分下載鏈接,希望能給做大數據的朋友做個參考。下面是第一部分。


查詢引擎

一、Phoenix

貢獻者::Salesforce

簡介:這是一個Java中間層,可以讓開發者在Apache HBase上執行SQL查詢。Phoenix完全使用Java編寫,代碼位於GitHub上,並且提供了一個客戶端可嵌入的JDBC驅動。

Phoenix查詢引擎會將SQL查詢轉換爲一個或多個HBase scan,並編排執行以生成標準的JDBC結果集。直接使用HBase API、協同處理器與自定義過濾器,對於簡單查詢來說,其性能量級是毫秒,對於百萬級別的行數來說,其性能量級是秒。

Phoenix最值得關注的一些特性有:

❶嵌入式的JDBC驅動,實現了大部分的java.sql接口,包括元數據API
❷可以通過多部行鍵或是鍵/值單元對列進行建模
❸完善的查詢支持,可以使用多個謂詞以及優化的掃描鍵
❹DDL支持:通過CREATE TABLE、DROP TABLE及ALTER TABLE來添加/刪除列
❺版本化的模式倉庫:當寫入數據時,快照查詢會使用恰當的模式
❻DML支持:用於逐行插入的UPSERT VALUES、用於相同或不同表之間大量數據傳輸的UPSERT ❼SELECT、用於刪除行的DELETE
❽通過客戶端的批處理實現的有限的事務支持
❾單表——還沒有連接,同時二級索引也在開發當中
➓緊跟ANSI SQL標準

Phoenix官方網站>>>

二、Stinger

貢獻者::Hortonworks

簡介:原叫Tez,下一代Hive,Hortonworks主導開發,運行在YARN上的DAG計算框架。

某些測試下,Stinger能提升10倍左右的性能,同時會讓Hive支持更多的SQL,其主要優點包括:

❶讓用戶在Hadoop獲得更多的查詢匹配。其中包括類似OVER的字句分析功能,支持WHERE查詢,讓Hive的樣式系統更符合SQL模型。

❷優化了Hive請求執行計劃,優化後請求時間減少90%。改動了Hive執行引擎,增加單Hive任務的被秒處理記錄數。

❸在Hive社區中引入了新的列式文件格式(如ORC文件),提供一種更現代、高效和高性能的方式來儲存Hive數據。

❹引入了新的運行時框架——Tez,旨在消除Hive的延時和吞吐量限制。Tez通過消除不必要的task、障礙同步和對HDFS的讀寫作業來優化Hive job。這將優化Hadoop內部的執行鏈,徹底加速Hive負載處理。

Stinger官方網站>>>

三、Presto

貢獻者::Facebook

簡介:Facebook開源的數據查詢引擎Presto ,可對250PB以上的數據進行快速地交互式分析。該項目始於 2012 年秋季開始開發,目前該項目已經在超過 1000 名 Facebook 僱員中使用,運行超過 30000 個查詢,每日數據在 1PB 級別。Facebook 稱 Presto 的性能比諸如 Hive 和 Map*Reduce 要好上 10 倍有多。

Presto 當前支持 ANSI SQL 的大多數特效,包括聯合查詢、左右聯接、子查詢以及一些聚合和計算函數;支持近似截然不同的計數(DISTINCT COUNT)等。

github源代碼下載>>>

四、Shark

簡介:Shark即Hive on Spark,本質上是通過Hive的HQL解析,把HQL翻譯成Spark上的RDD操作,然後通過Hive的metadata獲取數據庫裏的表信息,實際HDFS上的數據和文件,會由Shark獲取並放到Spark上運算。Shark的特點就是快,完全兼容Hive,且可以在shell模式下使用rdd2sql()這樣的API,把HQL得到的結果集,繼續在scala環境下運算,支持自己編寫簡單的機器學習或簡單分析處理函數,對HQL結果進一步分析計算。

❶Shark速度快的原因除了Spark平臺提供的基於內存迭代計算外,在設計上還存在對Spark上進行了一定的改造,主要有

❷partial DAG execution:對join優化,調節並行粒度,因爲Spark本身的寬依賴和窄依賴會影響並行計算和速度

基於列的壓縮和存儲:把HQL表數據按列存,每列是一個array,存在JVM上,避免了JVM GC低效,而壓縮和解壓相關的技術是Yahoo!提供的。

結來說,Shark是一個插件式的東西,在我現有的Spark和Hive及hadoop-client之間,在這兩套都可用的情況下,Shark只要獲取Hive的配置(還有metastore和exec等關鍵包),Spark的路徑,Shark就能利用Hive和Spark,把HQL解析成RDD的轉換,把數據取到Spark上運算和分析。在SQL on Hadoop這塊,Shark有別於Impala,Stringer,而這些系統各有自己的設計思路,相對於對MR進行優化和改進的思路,Shark的思路更加簡單明瞭些。

Shark官方網站>>>

五、Pig

簡介:Pig是一種編程語言,它簡化了Hadoop常見的工作任務。Pig可加載數據、表達轉換數據以及存儲最終結果。Pig內置的操作使得半結構化數據變得有意義(如日誌文件)。同時Pig可擴展使用Java中添加的自定義數據類型並支持數據轉換。

Pig最大的作用就是對mapreduce算法(框架)實現了一套shell腳本 ,類似我們通常熟悉的SQL語句,在Pig中稱之爲Pig Latin,在這套腳本中我們可以對加載出來的數據進行排序、過濾、求和、分組(group by)、關聯(Joining),Pig也可以由用戶自定義一些函數對數據集進行操作,也就是傳說中的UDF(user-defined functions)。

Pig官方網站>>>

六、Cloudera Impala

貢獻者::Cloudera

簡介:Cloudera Impala 可以直接爲存儲在HDFS或HBase中的Hadoop數據提供快速,交互式的SQL查詢。除了使用相同的存儲平臺外, Impala和Apache Hive一樣也使用了相同的元數據,SQL語法(Hive SQL),ODBC驅動和用戶接口(Hue Beeswax),這就很方便的爲用戶提供了一個相似並且統一的平臺來進行批量或實時查詢。

Cloudera Impala 是用來進行大數據查詢的補充工具。 Impala 並沒有取代像Hive這樣基於MapReduce的分佈式處理框架。Hive和其它基於MapReduce的計算框架非常適合長時間運行的批處理作業,例如那些涉及到批量 Extract、Transform、Load ,即需要進行ETL作業。

Impala 提供了:

❶數據科學家或數據分析師已經熟知的SQL接口

❷能夠在Apache Hadoop 的大數據中進行交互式數據查詢

❸ Single system for big data processing and analytics so customers can avoid costly modeling and ETL just for analytics

Cloudera Impala官方網站>>>

七、Apache Drill

貢獻者::MapR

簡介:Apache Drill是是一個能夠對大數據進行交互分析、開源的分佈式系統,且基於Google Dremel實現,它能夠運行在上千個節點的服務器集羣上,且能在幾秒內處理PB級或者萬億條的數據記錄。Drill能夠幫助企業用戶快速、高效地進行Hadoop數據查詢和企業級大數據分析。Drill於2012年8月份由Apache推出。

從Drill官方對其架構的介紹中得知,其具有適於實時的分析和快速的應用開發、適於半結構化/嵌套數據的分析、兼容現有的SQL環境和Apache Hive等特徵。另外,Drill的核心模塊是Drillbit服務,該服務模塊包括遠程訪問子模塊、SQL解析器、查詢優化器、任務計劃執行引擎、存儲插件接口(DFS、HBase、Hive等的接口)、分佈式緩存模塊等幾部分,如下圖所示

Apache Drill官方網站>>>

八、Apache Tajo

簡介:Apache Tajo項目的目的是在HDFS之上構建一個先進的數據倉庫系統。Tajo將自己標榜爲一個“大數據倉庫”,但是它好像和之前介紹的那些低延遲查詢引擎類似。雖然它支持外部表和Hive數據集(通過HCatalog),但是它的重點是數據管理,提供低延遲的數據訪問,以及爲更傳統的ETL提供工具。它也需要在數據節點上部署Tajo特定的工作進程。

Tajo的功能包括:

❶ANSI SQL兼容
❷JDBC 驅動
❸集成Hive metastore能夠訪問Hive數據集
❹一個命令行客戶端
❺一個自定義函數API

Apache Tajo官方網站>>>

九、Hive

簡介:hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射爲一張數據庫表,並提供簡單的sql查詢功能,可以將sql語句轉換爲MapReduce任務進行運行。 其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合數據倉庫的統計分析。

Hive官方網站>>>

流式計算

一、Facebook Puma

貢獻者:Facebook

簡介:實時數據流分析

二、Twitter Rainbird

貢獻者:Twitter

簡介:Rainbird一款基於Zookeeper, Cassandra, Scribe, Thrift的分佈式實時統計系統,這些基礎組件的基本功能如下:

❶ Zookeeper,Hadoop子項目中的一款分佈式協調系統,用於控制分佈式系統中各個組件中的一致性。

❷Cassandra,NoSQL中一款非常出色的產品,集合了Dynamo和Bigtable特性的分佈式存儲系統,用於存儲需要進行統計的數據,統計數據,並且提供客戶端進行統計數據的查詢。(需要使用分佈式Counter補丁CASSANDRA-1072)

❸ Scribe,Facebook開源的一款分佈式日誌收集系統,用於在系統中將各個需要統計的數據源收集到Cassandra中。

❹ Thrift,Facebook開源的一款跨語言C/S網絡通信框架,開發人員基於這個框架可以輕易地開發C/S應用。

用處

Rainbird可以用於實時數據的統計:

❶統計網站中每一個頁面,域名的點擊次數

❷內部系統的運行監控(統計被監控服務器的運行狀態)

❸記錄最大值和最小值

三、Yahoo S4

貢獻者:Yahoo

簡介:S4(Simple Scalable Streaming System)最初是Yahoo!爲提高搜索廣告有效點擊率的問題而開發的一個平臺,通過統計分析用戶對廣告的點擊率,排除相關度低的廣告,提升點擊率。目前該項目剛啓動不久,所以也可以理解爲是他們提出的一個分佈式流計算(Distributed Stream Computing)的模型。

S4的設計目標是:

·提供一種簡單的編程接口來處理數據流

·設計一個可以在普通硬件之上可擴展的高可用集羣。

·通過在每個處理節點使用本地內存,避免磁盤I/O瓶頸達到最小化延遲

·使用一個去中心的,對等架構;所有節點提供相同的功能和職責。沒有擔負特殊責任的中心節點。這大大簡化了部署和維護。

·使用可插拔的架構,使設計儘可能的即通用又可定製化。

·友好的設計理念,易於編程,具有靈活的彈性

Yahoo S4官方網站>>>

四、Twitter Storm

貢獻者:Twitter

簡介:Storm是Twitter開源的一個類似於Hadoop的實時數據處理框架,它原來是由BackType開發,後BackType被Twitter收購,將Storm作爲Twitter的實時數據分析系統。

實時數據處理的應用場景很廣泛,例如商品推薦,廣告投放,它能根據當前情景上下文(用戶偏好,地理位置,已發生的查詢和點擊等)來估計用戶點擊的可能性並實時做出調整。

storm的三大作用領域:

1.信息流處理(Stream Processing)

Storm可以用來實時處理新數據和更新數據庫,兼具容錯性和可擴展性,它 可以用來處理源源不斷的消息,並將處理之後的結果保存到持久化介質中。

2.連續計算(Continuous Computation)

Storm可以進行連續查詢並把結果即時反饋給客戶,比如將Twitter上的熱門話題發送到客戶端。

3.分佈式遠程過程調用(Distributed RPC)

除此之外,Storm也被廣泛用於以下方面:

  • 精確的廣告推送

  • 實時日誌的處理

Twitter Storm官方網站>>>

迭代計算

一、Apache Hama

簡介:Apache Hama是一個純BSP(Bulk Synchronous Parallel)計算框架,模仿了Google的Pregel。用來處理大規模的科學計算,特別是矩陣和圖計算。

❶建立在Hadoop上的分佈式並行計算模型。

❷基於 Map/Reduce 和 Bulk Synchronous 的實現框架。

❸運行環境需要關聯 Zookeeper、HBase、HDFS 組件。

Hama中有2個主要的模型:

– 矩陣計算(Matrix package)

– 面向圖計算(Graph package)

Apache Hama官方網站>>>

二、Apache Giraph

代碼託管地址: GitHub

簡介:Apache Giraph是一個可伸縮的分佈式迭代圖處理系統,靈感來自BSP(bulk synchronous parallel)和Google的Pregel,與它們 區別於則是是開源、基於 Hadoop 的架構等。

Giraph處理平臺適用於運行大規模的邏輯計算,比如頁面排行、共享鏈接、基於個性化排行等。Giraph專注於社交圖計算,被Facebook作爲其Open Graph工具的核心,幾分鐘內處理數萬億次用戶及其行爲之間的連接。

三、HaLoop

簡介:迭代的MapReduce,HaLoop——適用於迭代計算的Hadoop 。

Hadoop與HaLoop的不同

與Hadoop比較的四點改變:

1.提供了一套新的編程接口,更加適用於迭代計算;

HaLoop給迭代計算一個抽象的遞歸公式:

2.HaLoop的master進行job內的循環控制,直到迭代計算結束;

3.Task Scheduler也進行了修改,使得任務能夠儘量滿足data locality

4.slave nodes對數據進行cache並index索引,索引也以文件的形式保存在本地磁盤。

HaLoop官網>>>

四、Twister

簡介:Twister, 迭代式MapReduce框架,Twister是由一個印度人開發的,其架構如下:

在Twister中,大文件不會自動被切割成一個一個block,因而用戶需提前把文件分成一個一個小文件,以供每個task處理。在map階段,經過map()處理完的結果被放在分佈式內存中,然後通過一個broker network(NaradaBroking系統)將數據push給各個reduce task(Twister假設內存足夠大,中間數據可以全部放在內存中);在reduce階段,所有reduce task產生的結果通過一個combine操作進行歸併,此時,用戶可以進行條件判定, 確定迭代是否結束。combine後的數據直接被送給map task,開始新一輪的迭代。爲了提高容錯性,Twister每隔一段時間會將map task和reduce task產生的結果寫到磁盤上,這樣,一旦某個task失敗,它可以從最近的備份中獲取輸入,重新計算。

爲了避免每次迭代重新創建task,Twister維護了一個task pool,每次需要task時直接從pool中取。在Twister中,所有消息和數據都是通過broker network傳遞的,該broker network是一個獨立的模塊,目前支持NaradaBroking和ActiveMQ。

離線計算

一、Hadoop MapReduce

簡介:MapReduce是一種編程模型,用於大規模數據集(大於1TB)的並行運算。概念”Map(映射)”和”Reduce(歸約)”,和它們的主要思想,都是從函數式編程語言裏借來的,還有從矢量編程語言裏借來的特性。它極大地方便了編程人員在不會分佈式並行編程的情況下,將自己的程序運行在分佈式系統上。 當前的軟件實現是指定一個Map(映射)函數,用來把一組鍵值對映射成一組新的鍵值對,指定併發的Reduce(歸約)函數,用來保證所有映射的鍵值對中的每一個共享相同的鍵組。

Hadoop MapReduce官方網站>>>

二、Berkeley Spark

簡介:Spark是UC Berkeley AMP lab所開源的類Hadoop MapReduce的通用的並行,Spark,擁有Hadoop MapReduce所具有的優點;但不同於MapReduce的是Job中間輸出結果可以保存在內存中,從而不再需要讀寫HDFS,因此Spark能更好地適用於數據挖掘與機器學習等需要迭代的map reduce的算法。

三、DataTorrent

簡介:DataTorrent基於Hadoop 2.x構建,是一個實時的、有容錯能力的數據流式處理和分析平臺,它使用本地Hadoop應用程序,而這些應用程序可以與執行其它任務,如批處理,的應用程序共存。該平臺的架構如下

鍵值存儲

一、LevelDB

貢獻者:Google

簡介:Leveldb是一個google實現的非常高效的kv數據庫,目前的版本1.2能夠支持billion級別的數據量了。 在這個數量級別下還有着非常高的性能,主要歸功於它的良好的設計。特別是LMS算法。

LevelDB 是單進程的服務,性能非常之高,在一臺4核Q6600的CPU機器上,每秒鐘寫數據超過40w,而隨機讀的性能每秒鐘超過10w。

此處隨機讀是完全命中內存的速度,如果是不命中 速度大大下降。

LevelDB官方網站>>>

二、RocksDB

貢獻者:facebook

簡介:RocksDB雖然在代碼層面上是在LevelDB原有的代碼上進行開發的,但卻借鑑了Apache HBase的一些好的idea。在雲計算橫行的年代,開口不離Hadoop,RocksDB也開始支持HDFS,允許從HDFS讀取數據。RocksDB支持一次獲取多個K-V,還支持Key範圍查找。LevelDB只能獲取單個Key。

RocksDB除了簡單的Put、Delete操作,還提供了一個Merge操作,說是爲了對多個Put操作進行合併。

RocksDB提供一些方便的工具,這些工具包含解析sst文件中的K-V記錄、解析MANIFEST文件的內容等。RocksDB支持多線程合併,而LevelDB是單線程合併的。

RocksDB官方網站>>>

三、HyperDex

貢獻者:Facebook

HyperDex是一個分佈式、可搜索的鍵值存儲系統,特性如下:

  • 分佈式KV存儲,系統性能能夠隨節點數目線性擴展

  • 吞吐和延時都能秒殺現在風頭正勁的MonogDB,吞吐甚至強於Redis

  • 使用了hyperspace hashing技術,使得對存儲的K-V的任意屬性進行查詢成爲可能

官網:http://hyperdex.org/

四、TokyoCabinet

日本人Mikio Hirabayashi(平林幹雄)開發的一款DBM數據庫。Tokyo Cabinet 是一個DBM的實現。這裏的數據庫由一系列key-value對的記錄構成。key和value都可以是任意長度的字節序列,既可以是二進制也可以是字符串。這裏沒有數據類型和數據表的概念。

當做爲Hash表數據庫使用時,每個key必須是不同的,因此無法存儲兩個key相同的值。提供了以下訪問方法:提供key,value參數來存儲,按 key刪除記錄,按key來讀取記錄,另外,遍歷key也被支持,雖然順序是任意的不能被保證。這些方法跟Unix標準的DBM,例如GDBM,NDBM 等等是相同的,但是比它們的性能要好得多(因此可以替代它們) 。下一代KV存儲系統,支持strings、integers、floats、lists、maps和sets等豐富的數據類型。

TokyoCabinet官方網站>>>

五、Voldemort
Voldemort是一個分佈式鍵值存儲系統,是Amazon’s Dynamo的一個開源克隆。特性如下:

  • 支持自動複製數據到多個服務器上。

  • 支持數據自動分割所以每個服務器只包含總數據的一個子集。

  • 提供服務器故障透明處理功能。

  • 支持可撥插的序化支持,以實現複雜的鍵-值存儲,它能夠很好的5.集成常用的序化框架如:Protocol Buffers、Thrift、Avro和Java Serialization。

  • 數據項都被標識版本能夠在發生故障時儘量保持數據的完整性而不會影響系統的可用性。

  • 每個節點相互獨立,互不影響。

  • 支持可插拔的數據放置策略

官網:http://project-voldemort.com/

六、Amazon Dynamo

貢獻者:亞馬遜

簡介:Amazon Dynamo 是一個經典的分佈式Key-Value 存儲系統,具備去中心化,高可用性,高擴展性的特點,但是爲了達到這個目標在很多場景中犧牲了一致性。Dynamo在Amazon中得到了成功的應用,能夠跨數據中心部署於上萬個結點上提供服務,它的設計思想也被後續的許多分佈式系統借鑑。如近來火熱的Cassandra,實際上就是基本照搬了Dynamo的P2P架構,同時融合了BigTable的數據模型及存儲算法。

Amazon Dynamo官方網站>>>

七、Tair

貢獻者:淘寶

簡介:tair 是淘寶自己開發的一個分佈式 key/value 存儲引擎. tair 分爲持久化和非持久化兩種使用方式. 非持久化的 tair 可以看成是一個分佈式緩存. 持久化的 tair 將數據存放於磁盤中. 爲了解決磁盤損壞導致數據丟失, tair 可以配置數據的備份數目, tair 自動將一份數據的不同備份放到不同的主機上, 當有主機發生異常, 無法正常提供服務的時候, 其於的備份會繼續提供服務.tair 的總體結構。

tair 作爲一個分佈式系統, 是由一箇中心控制節點和一系列的服務節點組成. 我們稱中心控制節點爲config server. 服務節點是data server. config server 負責管理所有的data server, 維護data server的狀態信息. data server 對外提供各種數據服務, 並以心跳的形式將自身狀況彙報給config server. config server是控制點, 而且是單點, 目前採用一主一備的形式來保證其可靠性. 所有的 data server 地位都是等價的.

八、Apache Accumulo
Apache Accumulo 是一個可靠的、可伸縮的、高性能的排序分佈式的 Key-Value 存儲解決方案,基於單元訪問控制以及可定製的服務器端處理。Accumulo使用 Google BigTable 設計思路,基於 Apache Hadoop、Zookeeper 和 Thrift 構建。

官網:http://accumulo.apache.org/

九、Redis

Redis是一個高性能的key-value存儲系統,和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)和zset(有序集合)。與memcached一樣,爲了保證效率,數據都是緩存在內存中,區別的是Redis會週期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了主從同步。

Redis的出現,很大程度補償了memcached這類key/value存儲的不足,在部分場合可以對關係數據庫起到很好的補充作用。它提供了Python、Ruby、Erlang、PHP客戶端,使用很方便。

官網:http://redis.io/

表格存儲

一、OceanBase

貢獻者:阿里巴巴

相關文章:26頁PPT解密支撐支付寶交易的分佈式數據庫系統——OceanBase

簡介:OceanBase是一個支持海量數據的高性能分佈式數據庫系統,實現了數千億條記錄、數百TB數據上的跨行跨表事務,由淘寶核心系統研發部、運維、DBA、廣告、應用研發等部門共同完成。在設計和實現OceanBase的時候暫時摒棄了不緊急的DBMS的功能,例如臨時表,視圖(view),研發團隊把有限的資源集中到關鍵點上,當前 OceanBase主要解決數據更新一致性、高性能的跨表讀事務、範圍查詢、join、數據全量及增量dump、批量數據導入。

目前OceanBase已經應用於淘寶收藏夾,用於存儲淘寶用戶收藏條目和具體的商品、店鋪信息,每天支持4~5千萬的更新操作。等待上線的應用還包括CTU、SNS等,每天更新超過20億,更新數據量超過2.5TB,並會逐步在淘寶內部推廣。

OceanBase 0.3.1在Github開源,開源版本爲Revision:12336。

官網:http://alibaba.github.io/oceanbase/

二、Amazon SimpleDB

貢獻者:亞馬遜

Amazon SimpleDB是一個分散式數據庫,以Erlang撰寫。同與Amazon EC2和亞馬遜的S3一樣作爲一項Web 服務,屬於亞馬遜網絡服務的一部分。

正如EC2和S3,SimpleDB的按照存儲量,在互聯網上的傳輸量和吞吐量收取費用。 在2008年12月1日,亞馬遜推出了新的定價策略,提供了免費1 GB的數據和25機器小時的自由層(Free Tire)。 將其中的數據轉移到其他亞馬遜網絡服務是免費的。

它是一個可大規模伸縮、用 Erlang 編寫的高可用數據存儲。

官網:http://aws.amazon.com/cn/simpledb/

三、Vertica

貢獻者:惠普

簡介:惠普2011年2月份起始3月21號完成收購Vertica。Vertica基於列存儲。基於列存儲的設計相比傳統面向行存儲的數據庫具有巨大的優勢。同時Vertica支持MPP(massively parallel processing)等技術,查詢數據時Vertica只需取得需要的列,而不是被選擇行的所有數據,其平均性能可提高50x-1000x倍。(查詢性能高速度快)

Vertica的設計者多次表示他們的產品圍繞着高性能和高可用性設計。由於對MPP技術的支持,可提供對粒度,可伸縮性和可用性的優勢。每個節點完全獨立運作,完全無共享架構,降低對共享資源的系統競爭。

Vertica的數據庫使用標準的SQL查詢,同時Vertica的架構非常適合雲計算,包括虛擬化,分佈式多節點運行等,並且可以和Hadoop/MapReduce進行集成。

Vertica官網:http://www.vertica.com/

四、Cassandra

貢獻者:facebook

簡介:Cassandra是一套開源分佈式NoSQL數據庫系統。它最初由Facebook開發,用於儲存收件箱等簡單格式數據,集GoogleBigTable的數據模型與Amazon Dynamo的完全分佈式的架構於一身Facebook於2008將 Cassandra 開源,此後,由於Cassandra良好的可擴放性,被Digg、Twitter等知名Web 2.0網站所採納,成爲了一種流行的分佈式結構化數據存儲方案。

Cassandra是一個混合型的非關係的數據庫,類似於Google的BigTable。其主要功能比Dynamo (分佈式的Key-Value存儲系統)更豐富,但支持度卻不如文檔存儲MongoDB(介於關係數據庫和非關係數據庫之間的開源產品,是非關係數據庫當中功能最豐富,最像關係數據庫的。支持的數據結構非常鬆散,是類似json的bjson格式,因此可以存儲比較複雜的數據類型)。Cassandra最初由Facebook開發,後轉變成了開源項目。它是一個網絡社交雲計算方面理想的數據庫。以Amazon專有的完全分佈式的Dynamo爲基礎,結合了Google BigTable基於列族(Column Family)的數據模型。P2P去中心化的存儲。很多方面都可以稱之爲Dynamo 2.0。

Cassandra官網:http://cassandra.apache.org/

五、HyperTable

簡介:Hypertable是一個開源、高性能、可伸縮的數據庫,它採用與Google的Bigtable相似的模型。在過去數年中,Google爲在PC集羣 上運行的可伸縮計算基礎設施設計建造了三個關鍵部分。

第一個關鍵的基礎設施是Google File System(GFS),這是一個高可用的文件系統,提供了一個全局的命名空間。它通過跨機器(和跨機架)的文件數據複製來達到高可用性,並因此免受傳統 文件存儲系統無法避免的許多失敗的影響,比如電源、內存和網絡端口等失敗。第二個基礎設施是名爲Map-Reduce的計算框架,它與GFS緊密協作,幫 助處理收集到的海量數據。第三個基礎設施是Bigtable,它是傳統數據庫的替代。Bigtable讓你可以通過一些主鍵來組織海量數據,並實現高效的 查詢。Hypertable是Bigtable的一個開源實現,並且根據我們的想法進行了一些改進。

HyperTable官網:http://hypertable.org/

六、FoundationDB

簡介:支持ACID事務處理的NoSQL數據庫,提供非常好的性能、數據一致性和操作彈性。

2015年1月2日,FoundationDB已經發布了其key-value數據庫的3.0版本,主要專注於可伸縮性和性能上的改善。FoundationDB的CEO David Rosenthal在一篇博客上宣佈了新的版本,其中展示了FoundationDB 3.0在可伸縮性方面的數據,它可以在一個32位的c3.8xlarge EC2實例上每秒寫入1440萬次;這在性能上是之前版本的36倍。

除了性能和可伸縮性的改善之外,FoundationDB 3.0還包含了對監控支持的改善。這種監控機制不僅僅是簡單的機器檢查,它添加了對多種潛在的硬件瓶頸的診斷,並且把那些高層級的信息整合到現有監控基礎架構中。

官網:https://foundationdb.com/

七:HBase

貢獻者: Fay Chang 所撰寫的“Bigtable

簡介:HBase是一個分佈式的、面向列的開源數據庫,該技術來源於 Fay Chang 所撰寫的Google論文“Bigtable:一個結構化數據的分佈式存儲系統”。就像Bigtable利用了Google文件系統(File System)所提供的分佈式數據存儲一樣,HBase在Hadoop之上提供了類似於Bigtable的能力。HBase是Apache的Hadoop項目的子項目。HBase不同於一般的關係數據庫,它是一個適合於非結構化數據存儲的數據庫。另一個不同的是HBase基於列的而不是基於行的模式。

官網:http://hbase.apache.org/

文件存儲

一、CouchDB

簡介:CouchDB是用Erlang開發的面向文檔的數據庫系統,最近剛剛發佈了1.0版本(2010年7月14日)。CouchDB不是一個傳統的關係數據庫,而是面向文檔的數據庫,其數據存儲方式有點類似lucene的index文件格式,CouchDB最大的意義在於它是一個面向web應用的新一代存儲系統,事實上,CouchDB的口號就是:下一代的Web應用存儲系統。

特點:

一、CouchDB是分佈式的數據庫,他可以把存儲系統分佈到n臺物理的節點上面,並且很好的協調和同步節點之間的數據讀寫一致性。這當然也得靠Erlang無與倫比的併發特性才能做到。對於基於web的大規模應用文檔應用,分佈式可以讓它不必像傳統的關係數據庫那樣分庫拆表,在應用代碼層進行大量的改動。

二、CouchDB是面向文檔的數據庫,存儲半結構化的數據,比較類似lucene的index結構,特別適合存儲文檔,因此很適合CMS,電話本,地址本等應用,在這些應用場合,文檔數據庫要比關係數據庫更加方便,性能更好。

三、CouchDB支持REST API,可以讓用戶使用JavaScript來操作CouchDB數據庫,也可以用JavaScript編寫查詢語句,我們可以想像一下,用AJAX技術結合CouchDB開發出來的CMS系統會是多麼的簡單和方便。

其實CouchDB只是Erlang應用的冰山一角,在最近幾年,基於Erlang的應用也得到的蓬勃的發展,特別是在基於web的大規模,分佈式應用領域,幾乎都是Erlang的優勢項目。

官網:http://couchdb.apache.org/

二、MongoDB

簡介:MongoDB 是一個基於分佈式文件存儲的數據庫。由C++語言編寫。旨在爲WEB應用提供可擴展的高性能數據存儲解決方案。

MongoDB是一個介於關係數據庫和非關係數據庫之間的產品,是非關係數據庫當中功能最豐富,最像關係數據庫的。他支持的數據結構非常鬆散,是類似json的bson格式,因此可以存儲比較複雜的數據類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似於面向對象的查詢語言,幾乎可以實現類似關係數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。

相關文章:MongoDB的基本特性與內部構造大數據喫香 創業公司MongoDB估值達16億美元

特點

它的特點是高性能、易部署、易使用,存儲數據非常方便。主要功能特性有:

*面向集合存儲,易存儲對象類型的數據。

mongodb集羣參考

mongodb集羣參考

*模式自由。

*支持動態查詢。

*支持完全索引,包含內部對象。

*支持查詢。

*支持複製和故障恢復。

*使用高效的二進制數據存儲,包括大型對象(如視頻等)。

*自動處理碎片,以支持雲計算層次的擴展性。

*支持RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言。

*文件存儲格式爲BSON(一種JSON的擴展)。

*可通過網絡訪問。

官網:https://www.mongodb.org/

三、Tachyon

貢獻者:Haoyuan Li(李浩源)

簡介:Tachyon是一個分佈式內存文件系統,可以在集羣裏以訪問內存的速度來訪問存在tachyon裏的文件。把Tachyon是架構在最底層的分佈式文件存儲和上層的各種計算框架之間的一種中間件。主要職責是將那些不需要落地到DFS裏的文件,落地到分佈式內存文件系統中,來達到共享內存,從而提高效率。同時可以減少內存冗餘,GC時間等。

Tachyon架構

Tachyon的架構是傳統的Master—slave架構,這裏和Hadoop類似,TachyonMaster裏WorkflowManager是 Master進程,因爲是爲了防止單點問題,通過Zookeeper做了HA,可以部署多臺Standby Master。Slave是由Worker Daemon和Ramdisk構成。這裏個人理解只有Worker Daemon是基於JVM的,Ramdisk是一個off heap memory。Master和Worker直接的通訊協議是Thrift。

下圖來自Tachyon的作者Haoyuan Li:

下載地址:https://github.com/amplab/tachyon

四、KFS

簡介:GFS的C++開源版本,Kosmos distributed file system (KFS)是一個專門爲數據密集型應用(搜索引擎,數據挖掘等)而設計的存儲系統,類似於Google的GFS和Hadoop的HDFS分佈式文件系統。 KFS使用C++實現,支持的客戶端包括C++,Java和Python。KFS系統由三部分組成,分別是metaserver、chunkserver和client library。

官網:http://code.google.com/p/kosmosfs/

五、HDFS

簡介:Hadoop分佈式文件系統(HDFS)被設計成適合運行在通用硬件(commodity hardware)上的分佈式文件系統。它和現有的分佈式文件系統有很多共同點。但同時,它和其他的分佈式文件系統的區別也是很明顯的。HDFS是一個高度容錯性的系統,適合部署在廉價的機器上。HDFS能提供高吞吐量的數據訪問,非常適合大規模數據集上的應用。HDFS放寬了一部分POSIX約束,來實現流式讀取文件系統數據的目的。HDFS在最開始是作爲Apache Nutch搜索引擎項目的基礎架構而開發的。HDFS是Apache Hadoop Core項目的一部分。

官網:http://hadoop.apache.org/

資源管理

一、Twitter Mesos

開發者:Twitter研發人員John Oskasson

簡介:Apache Mesos是由加州大學伯克利分校的AMPLab首先開發的一款開源羣集管理軟件,支持Hadoop、ElasticSearch、Spark、Storm 和Kafka等架構,由於其開源性質越來越受到一些大型雲計算公司的青睞,例如Twitter、Facebook等。

官網:http://mesos.apache.org/

二、Hadoop Yarn

Hadoop 新 MapReduce 框架 Yarn。爲從根本上解決舊 MapReduce 框架的性能瓶頸,促進 Hadoop 框架的更長遠發展,從 0.23.0 版本開始,Hadoop 的 MapReduce 框架完全重構,發生了根本的變化。新的 Hadoop MapReduce 框架命名爲 MapReduceV2 或者叫 Yarn,其架構圖如下圖所示:

Yarn 框架相對於老的 MapReduce 框架什麼優勢呢?我們可以看到:

1、這個設計大大減小了 JobTracker(也就是現在的 ResourceManager)的資源消耗,並且讓監測每一個 Job 子任務 (tasks) 狀態的程序分佈式化了,更安全、更優美。

2、在新的 Yarn 中,ApplicationMaster 是一個可變更的部分,用戶可以對不同的編程模型寫自己的 AppMst,讓更多類型的編程模型能夠跑在 Hadoop 集羣中,可以參考 hadoop Yarn 官方配置模板中的 mapred-site.xml 配置。

3、對於資源的表示以內存爲單位 ( 在目前版本的 Yarn 中,沒有考慮 cpu 的佔用 ),比之前以剩餘 slot 數目更合理。

4、老的框架中,JobTracker 一個很大的負擔就是監控 job 下的 tasks 的運行狀況,現在,這個部分就扔給 ApplicationMaster 做了,而 ResourceManager 中有一個模塊叫做 ApplicationsMasters( 注意不是 ApplicationMaster),它是監測 ApplicationMaster 的行狀況,如果出問題,會將其在其他機器上重啓。

5、Container 是 Yarn 爲了將來作資源隔離而提出的一個框架。這一點應該借鑑了 Mesos 的工作,目前是一個框架,僅僅提供 java 虛擬機內存的隔離 ,hadoop 團隊的設計思路應該後續能支持更多的資源調度和控制 , 既然資源表示成內存量,那就沒有了之前的 map slot/reduce slot 分開造成集羣資源閒置的尷尬情況。

官網:http://hadoop.apache.org/

接上一部分:這部分主要收集整理的內容主要有日誌收集系統、消息系統、分佈式服務、集羣管理、RPC、基礎設施、搜索引擎、Iaas和監控管理等大數據開源工具。

日誌收集系統

一、Facebook Scribe

貢獻者:Facebook

簡介:Scribe是Facebook開源的日誌收集系統,在Facebook內部已經得到大量的應用。它能夠從各種日誌源上收集日誌,存儲到一箇中央存儲系統(可以是NFS,分佈式文件系統等)上,以便於進行集中統計分析處理。它爲日誌的“分佈式收集,統一處理”提供了一個可擴展的,高容錯的方案。當中央存儲系統的網絡或者機器出現故障時,scribe會將日誌轉存到本地或者另一個位置,當中央存儲系統恢復後,scribe會將轉存的日誌重新傳輸給中央存儲系統。其通常與Hadoop結合使用,scribe用於向HDFS中push日誌,而Hadoop通過MapReduce作業進行定期處理。

Scribe的系統架構

代碼託管:https://github.com/facebook/scribe

二、Cloudera Flume

貢獻者:Cloudera

簡介:Flume是Cloudera提供的一個高可用的,高可靠的,分佈式的海量日誌採集、聚合和傳輸的系統,Flume支持在日誌系統中定製各類數據發送方,用於收集數據;同時,Flume提供對數據進行簡單處理,並寫到各種數據接受方(可定製)的能力。

Flume提供了從console(控制檯)、RPC(Thrift-RPC)、text(文件)、tail(UNIX tail)、syslog(syslog日誌系統,支持TCP和UDP等2種模式),exec(命令執行)等數據源上收集數據的能力。

當前Flume有兩個版本Flume 0.9X版本的統稱Flume-og,Flume1.X版本的統稱Flume-ng。由於Flume-ng經過重大重構,與Flume-og有很大不同,使用時請注意區分。

Cloudera Flume構架:

官網:http://flume.apache.org/

三、logstash

簡介:logstash 是一個應用程序日誌、事件的傳輸、處理、管理和搜索的平臺。你可以用它來統一對應用程序日誌進行收集管理,提供 Web 接口用於查詢和統計。他可以對你的日誌進行收集、分析,並將其存儲供以後使用(如,搜索),您可以使用它。說到搜索,logstash帶有一個web界面,搜索和展示所有日誌。

官網:http://www.logstash.net/

四、kibana

簡介:Kibana 是一個爲 Logstash 和 ElasticSearch 提供的日誌分析的 Web 接口。可使用它對日誌進行高效的搜索、可視化、分析等各種操作。kibana 也是一個開源和免費的工具,他可以幫助您彙總、分析和搜索重要數據日誌並提供友好的web界面。他可以爲 Logstash 和 ElasticSearch 提供的日誌分析的 Web 界面。

主頁: http://kibana.org/

代碼託管: https://github.com/rashidkpc/Kibana/downloads

消息系統

一、StormMQ

簡介:MQMessageQueue消息隊列產品 StormMQ,是一種服務程序。

官網:http://stormmq.com/

二、ZeroMQ

簡介:這是個類似於Socket的一系列接口,他跟Socket的區別是:普通的socket是端到端的(1:1的關係),而ZMQ卻是可以N:M 的關係,人們對BSD套接字的瞭解較多的是點對點的連接,點對點連接需要顯式地建立連接、銷燬連接、選擇協議(TCP/UDP)和處理錯誤等,而ZMQ屏蔽了這些細節,讓你的網絡編程更爲簡單。ZMQ用於node與node間的通信,node可以是主機或者是進程。

引用官方的說法: “ZMQ(以下ZeroMQ簡稱ZMQ)是一個簡單好用的傳輸層,像框架一樣的一個socket library,他使得Socket編程更加簡單、簡潔和性能更高。是一個消息處理隊列庫,可在多個線程、內核和主機盒之間彈性伸縮。ZMQ的明確目標是“成爲標準網絡協議棧的一部分,之後進入Linux內核”。現在還未看到它們的成功。但是,它無疑是極具前景的、並且是人們更加需要的“傳統”BSD套接字之上的一 層封裝。ZMQ讓編寫高性能網絡應用程序極爲簡單和有趣。”

官網:http://zeromq.org/

三、RabbitMQ

簡介:RabbitMQ是一個受歡迎的消息代理,通常用於應用程序之間或者程序的不同組件之間通過消息來進行集成。本文簡單介紹瞭如何使用 RabbitMQ,假定你已經配置好了rabbitmq服務器。

RabbitMQ是用Erlang,對於主要的編程語言都有驅動或者客戶端。我們這裏要用的是Java,所以先要獲得Java客戶端。

像RabbitMQ這樣的消息代理可用來模擬不同的場景,例如點對點的消息分發或者訂閱/推送。我們的程序足夠簡單,有兩個基本的組件,一個生產者用於產生消息,還有一個消費者用來使用產生的消息。

官網:https://www.rabbitmq.com/

四、Apache ActiveMQ

簡介:ActiveMQ 是Apache出品,最流行的,能力強勁的開源消息總線。ActiveMQ 是一個完全支持JMS1.1和J2EE 1.4規範的 JMS Provider實現,儘管JMS規範出臺已經是很久的事情了,但是JMS在當今的J2EE應用中間仍然扮演着特殊的地位。

特性:

⒈ 多種語言和協議編寫客戶端。語言: Java,C,C++,C#,Ruby,Perl,Python,PHP。應用協議: OpenWire,Stomp REST,WS Notification,XMPP,AMQP

⒉ 完全支持JMS1.1和J2EE 1.4規範 (持久化,XA消息,事務)

⒊ 對Spring的支持,ActiveMQ可以很容易內嵌到使用Spring的系統裏面去,而且也支持Spring2.0的特性

⒋ 通過了常見J2EE服務器(如 Geronimo,JBoss 4,GlassFish,WebLogic)的測試,其中通過JCA 1.5 resource adaptors的配置,可以讓ActiveMQ可以自動的部署到任何兼容J2EE 1.4 商業服務器上

⒌ 支持多種傳送協議:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA

⒍ 支持通過JDBC和journal提供高速的消息持久化

⒎ 從設計上保證了高性能的集羣,客戶端-服務器,點對點

⒏ 支持Ajax

⒐ 支持與Axis的整合

⒑ 可以很容易得調用內嵌JMS provider,進行測試

官網:http://activemq.apache.org/

五、Jafka

貢獻者:LinkedIn

簡介:Jafka 是一個開源的、高性能的、跨語言分佈式消息系統,使用GitHub託管。Jafka 最早是由Apache孵化的Kafka(由LinkedIn捐助給Apache)克隆而來。由於是一個開放式的數據傳輸協議,因此除了Java開發語言受到支持,Python、Ruby、C、C++等其他語言也能夠很好的得到支持。

特性:

1、消息持久化非常快,服務端存儲消息的開銷爲O(1),並且基於文件系統,能夠持久化TB級的消息而不損失性能。

2、吞吐量取決於網絡帶寬。

3、完全的分佈式系統,broker、producer、consumer都原生自動支持分佈式。自動實現複雜均衡。

4、內核非常小,整個系統(包括服務端和客戶端)只有一個272KB的jar包,內部機制也不復雜,適合進行內嵌或者二次開發 。整個服務端加上依賴組件共3.5MB。

5、消息格式以及通信機制非常簡單,適合進行跨語言開發。目前自帶的Python3.x的客戶端支持發送消息和接收消息。

官網:http://kafka.apache.org/

六、Apache Kafka

貢獻者:LinkedIn

簡介:Apache Kafka是由Apache軟件基金會開發的一個開源消息系統項目,由Scala寫成。Kafka最初是由LinkedIn開發,並於2011年初開源。2012年10月從Apache Incubator畢業。該項目的目標是爲處理實時數據提供一個統一、高通量、低等待的平臺。

Kafka是一個分佈式的、分區的、多複本的日誌提交服務。它通過一種獨一無二的設計提供了一個消息系統的功能。

Kafka集羣可以在一個指定的時間內保持所有發佈上來的消息,不管這些消息有沒有被消費。打個比方,如果這個時間設置爲兩天,那麼在消息發佈的兩天以內,這條消息都是可以被消費的,但是在兩天後,這條消息就會被系統丟棄以釋放空間。Kafka的性能不會受數據量的大小影響,因此保持大量的數據不是一個問題。

官網:http://kafka.apache.org/

分佈式服務

一、ZooKeeper

貢獻者:Google

簡介:ZooKeeper是一個分佈式的,開放源碼的分佈式應用程序協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要組件。它是一個爲分佈式應用提供一致性服務的軟件,提供的功能包括:配置維護、名字服務、分佈式同步、組服務等。

ZooKeeper是以Fast Paxos算法爲基礎的,paxos算法存在活鎖的問題,即當有多個proposer交錯提交時,有可能互相排斥導致沒有一個proposer能提交成功,而Fast Paxos作了一些優化,通過選舉產生一個leader,只有leader才能提交propose,具體算法可見Fast Paxos。因此,要想弄懂ZooKeeper首先得對Fast Paxos有所瞭解。

架構:

官網:http://zookeeper.apache.org/

RPC

(Remote Procedure Call Protocol)——遠程過程調用協議

一、Apache Avro

簡介:Apache Avro是Hadoop下的一個子項目。它本身既是一個序列化框架,同時也實現了RPC的功能。Avro官網描述Avro的特性和功能如下:

  • 豐富的數據結構類型;

  • 快速可壓縮的二進制數據形式;

  • 存儲持久數據的文件容器;

  • 提供遠程過程調用RPC;

  • 簡單的動態語言結合功能。

相比於Apache Thrift 和Google的Protocol Buffers,Apache Avro具有以下特點:

  • 支持動態模式。Avro不需要生成代碼,這有利於搭建通用的數據處理系統,同時避免了代碼入侵。

  • 數據無須加標籤。讀取數據前,Avro能夠獲取模式定義,這使得Avro在數據編碼時只需要保留更少的類型信息,有利於減少序列化後的數據大小。

官網:http://avro.apache.org/

二、Facebook Thrift

貢獻者:Facebook

簡介:Thrift源於大名鼎鼎的facebook之手,在2007年facebook提交Apache基金會將Thrift作爲一個開源項目,對於當時的facebook來說創造thrift是爲了解決facebook系統中各系統間大數據量的傳輸通信以及系統之間語言環境不同需要跨平臺的特性。

thrift可以支持多種程序語言,例如: C++, C#, Cocoa, Erlang, Haskell, Java, Ocami, Perl, PHP, Python, Ruby, Smalltalk. 在多種不同的語言之間通信thrift可以作爲二進制的高性能的通訊中間件,支持數據(對象)序列化和多種類型的RPC服務。

Thrift適用於程序對程 序靜態的數據交換,需要先確定好他的數據結構,他是完全靜態化的,當數據結構發生變化時,必須重新編輯IDL文件,代碼生成,再編譯載入的流程,跟其他IDL工具相比較可以視爲是Thrift的弱項,Thrift適用於搭建大型數據交換及存儲的通用工具,對於大型系統中的內部數據傳輸相對於JSON和xml無論在性能、傳輸大小上有明顯的優勢。

Thrift 主要由5個部分組成:

· 類型系統以及 IDL 編譯器:負責由用戶給定的 IDL 文件生成相應語言的接口代碼

· TProtocol:實現 RPC 的協議層,可以選擇多種不同的對象串行化方式,如 JSON, Binary。

· TTransport:實現 RPC 的傳輸層,同樣可以選擇不同的傳輸層實現,如socket, 非阻塞的 socket, MemoryBuffer 等。

· TProcessor:作爲協議層和用戶提供的服務實現之間的紐帶,負責調用服務實現的接口。

· TServer:聚合 TProtocol, TTransport 和 TProcessor 幾個對象。

上述的這5個部件都是在 Thrift 的源代碼中通過爲不同語言提供庫來實現的,這些庫的代碼在 Thrift 源碼目錄的 lib 目錄下面,在使用 Thrift 之前需要先熟悉與自己的語言對應的庫提供的接口。

Facebook Thrift構架:

官網:http://thrift.apache.org/

集羣管理

一、Nagios

簡介:Nagios是一款開源的免費網絡監視工具,能有效監控Windows、Linux和Unix的主機狀態,交換機路由器等網絡設置,打印機等。在系統或服務狀態異常時發出郵件或短信報警第一時間通知網站運維人員,在狀態恢復後發出正常的郵件或短信通知。

Nagios可運行在Linux/Unix平臺之上,同時提供一個可選的基於瀏覽器的WEB界面以方便系統管理人員查看網絡狀態,各種系統問題,以及日誌等等。

官網:http://www.nagios.org/

二、Ganglia

簡介:Ganglia是UC Berkeley發起的一個開源集羣監視項目,設計用於測量數以千計的節點。Ganglia的核心包含gmond、gmetad以及一個Web前端。主要是用來監控系統性能,如:cpu 、mem、硬盤利用率, I/O負載、網絡流量情況等,通過曲線很容易見到每個節點的工作狀態,對合理調整、分配系統資源,提高系統整體性能起到重要作用。

官網:http://ganglia.sourceforge.net/

三、Apache Ambari

簡介:Apache Ambari是一種基於Web的工具,支持Apache Hadoop集羣的供應、管理和監控。Ambari目前已支持大多數Hadoop組件,包括HDFS、MapReduce、Hive、Pig、 Hbase、Zookeper、Sqoop和Hcatalog等。

Apache Ambari 支持HDFS、MapReduce、Hive、Pig、Hbase、Zookeper、Sqoop和Hcatalog等的集中管理。也是5個頂級hadoop管理工具之一。

Ambari主要取得了以下成績:

  • 通過一步一步的安裝嚮導簡化了集羣供應。

  • 預先配置好關鍵的運維指標(metrics),可以直接查看Hadoop Core(HDFS和MapReduce)及相關項目(如HBase、Hive和HCatalog)是否健康。

  • 支持作業與任務執行的可視化與分析,能夠更好地查看依賴和性能。

  • 通過一個完整的RESTful API把監控信息暴露出來,集成了現有的運維工具。

  • 用戶界面非常直觀,用戶可以輕鬆有效地查看信息並控制集羣。

Ambari使用Ganglia收集度量指標,用Nagios支持系統報警,當需要引起管理員的關注時(比如,節點停機或磁盤剩餘空間不足等問題),系統將向其發送郵件。

此外,Ambari能夠安裝安全的(基於Kerberos)Hadoop集羣,以此實現了對Hadoop 安全的支持,提供了基於角色的用戶認證、授權和審計功能,併爲用戶管理集成了LDAP和Active Directory。

官網:http://ambari.apache.org/

基礎設施

一、LevelDB

貢獻者:Jeff Dean和Sanjay Ghemawat

簡介:Leveldb是一個google實現的非常高效的kv數據庫,目前的版本1.2能夠支持billion級別的數據量了。 在這個數量級別下還有着非常高的性能,主要歸功於它的良好的設計。特別是LMS算法。LevelDB 是單進程的服務,性能非常之高,在一臺4核Q6600的CPU機器上,每秒鐘寫數據超過40w,而隨機讀的性能每秒鐘超過10w。

Leveldb框架:

官網:http://code.google.com/p/leveldb/

二、SSTable

簡介:如果說Protocol Buffer是谷歌獨立數據記錄的通用語言 ,那麼有序字符串表(SSTable,Sorted String Table)則是用於存儲,處理和數據集交換的最流行的數據輸出格式。正如它的名字本身,SSTable是有效存儲大量鍵-值對的簡單抽象,對高吞吐量順序讀/寫進行了優化。

SSTable是Bigtable中至關重要的一塊,對於LevelDB來說也是如此。

三、RecordIO

貢獻者:Google

簡介:我們大家都在用文件來存儲數據。文件是存儲在磁盤上的。如果在一些不穩定的介質上,文件很容損壞。即時文件某個位置出現一點小小的問題,整個文件就廢了。

下面我來介紹Google的一個做法,可以比較好的解決這個問題。那就是recordio文件格式。recoidio的存儲單元是一個一個record。這個record可以根據業務的需要自行定義。但Google有一種建議的處理方式就是使用protobuf。

reocordio底層的格式其實很簡單。一個record由四部分組成:

  • MagicNumber (32 bits)

  • Uncompressed data payload size (64 bits)

  • Compressed data payload size (64 bits), or 0 if the data is not compressed

  • Payload, possibly compressed.

詳細格式如下圖所示:

到這裏,大家可能已經知道,recordio之所以能對付壞數據,其實就是在這個MagicNumber(校驗值)。

四、Flat Buffers

貢獻者:Google

簡介:谷歌開源高效、跨平臺的序列化庫FlatBuffers。

該庫的構建是專門爲遊戲開發人員的性能需求提供支持,它將序列化數據存儲在緩存中,這些數據既可以存儲在文件中,又可以通過網絡原樣傳輸,而不需要任何解析開銷。

FlatBuffers有如下一些關鍵特性——

  • 訪問序列化數據不需要打包/拆包

  • 節省內存而且訪問速度快——緩存只佔用訪問數據所需要的內存;不需要任何額外的內存。

  • 靈活性——通過可選字段向前向後兼容

  • 代碼規模小

  • 強類型——錯誤在編譯時捕獲,而不是在運行時

  • 便利性——生成的C++頭文件代碼簡潔。如果需要,有一項可選功能可以用來在運行時高效解析Schema和JSON-like格式的文本。

  • 跨平臺——使用C++編寫,不依賴STL之外的庫,因此可以用於任何有C++編輯器的平臺。當前,該項目包含構建方法和在Android、Linux、Windows和OSX等操作系統上使用該庫的示例。

與Protocol Buffers或JSON Parsing這樣的可選方案相比,FlatBuffers的優勢在於開銷更小,這主要是由於它沒有解析過程。

代碼託管:https://github.com/google/flatbuffers

五、Protocol Buffers

貢獻者:Google

簡介:Protocol Buffers是Google公司開發的一種數據描述語言,類似於XML能夠將結構化數據序列化,可用於數據存儲、通信協議等方面。它不依賴於語言和平臺並且可擴展性極強。現階段官方支持C++、JAVA、Python等三種編程語言,但可以找到大量的幾乎涵蓋所有語言的第三方拓展包。

通過它,你可以定義你的數據的結構,並生成基於各種語言的代碼。這些你定義的數據流可以輕鬆地在傳遞並不破壞你已有的程序。並且你也可以更新這些數據而現有的程序也不會受到任何的影響。

Protocol Buffers經常被簡稱爲protobuf。

官網:http://code.google.com/p/protobuf/

六、Consistent Hashing(哈希算法)

簡介:一致性哈希算法在1997年由麻省理工學院提出的一種分佈式哈希(DHT)實現算法,設計目標是爲了解決因特網中的熱點(Hot spot)問題,初衷和CARP十分類似。一致性哈希修正了CARP使用的簡 單哈希算法帶來的問題,使得分佈式哈希(DHT)可以在P2P環境中真正得到應用。

一致性hash算法提出了在動態變化的Cache環境中,判定哈希算法好壞的四個定義:

1、平衡性(Balance):平衡性是指哈希的結果能夠儘可能分佈到所有的緩衝中去,這樣可以使得所有的緩衝空間都得到利用。很多哈希算法都能夠滿足這一條件。

2、單調性(Monotonicity):單調性是指如果已經有一些內容通過哈希分派到了相應的緩衝中,又有新的緩衝加入到系統中。哈希的結果應能夠保證原有已分配的內容可以被映射到原有的或者新的緩衝中去,而不會被映射到舊的緩衝集合中的其他緩衝區。

3、分散性(Spread):在分佈式環境中,終端有可能看不到所有的緩衝,而是隻能看到其中的一部分。當終端希望通過哈希過程將內容映射到緩衝上時,由於不同終端所見的緩衝範圍有可能不同,從而導致哈希的結果不一致,最終的結果是相同的內容被不同的終端映射到不同的緩衝區中。這種情況顯然是應該避免的,因爲它導致相同內容被存儲到不同緩衝中去,降低了系統存儲的效率。分散性的定義就是上述情況發生的嚴重程度。好的哈希算法應能夠儘量避免不一致的情況發生,也就是儘量降低分散性。

4、負載(Load):負載問題實際上是從另一個角度看待分散性問題。既然不同的終端可能將相同的內容映射到不同的緩衝區中,那麼對於一個特定的緩衝區而言,也可能被不同的用戶映射爲不同 的內容。與分散性一樣,這種情況也是應當避免的,因此好的哈希算法應能夠儘量降低緩衝的負荷。

在分佈式集羣中,對機器的添加刪除,或者機器故障後自動脫離集羣這些操作是分佈式集羣管理最基本的功能。如果採用常用的hash(object)%N算法,那麼在有機器添加或者刪除後,很多原有的數據就無法找到了,這樣嚴重的違反了單調性原則。

七、Netty

貢獻者:JBOSS

簡介:Netty是由JBOSS提供的一個java開源框架。Netty提供異步的、事件驅動的網絡應用程序框架和工具,用以快速開發高性能、高可靠性的網絡服務器和客戶端程序。

也就是說,Netty 是一個基於NIO的客戶,服務器端編程框架,使用Netty 可以確保你快速和簡單的開發出一個網絡應用,例如實現了某種協議的客戶,服務端應用。Netty相當簡化和流線化了網絡應用的編程開發過程,例如,TCP和UDP的socket服務開發。

“快速”和“簡單”並不意味着會讓你的最終應用產生維護性或性能上的問題。Netty 是一個吸收了多種協議的實現經驗,這些協議包括FTP,SMTP,HTTP,各種二進制,文本協議,並經過相當精心設計的項目,最終,Netty 成功的找到了一種方式,在保證易於開發的同時還保證了其應用的性能,穩定性和伸縮性。

官網:http://netty.io/

八、BloomFilter

簡介:Bloom filter 是由 Howard Bloom 在 1970 年提出的二進制向量數據結構,它具有很好的空間和時間效率,被用來檢測一個元素是不是集合中的一個成員。如果檢測結果爲是,該元素不一定在集合中;但如果檢測結果爲否,該元素一定不在集合中。因此Bloom filter具有100%的召回率。這樣每個檢測請求返回有“在集合內(可能錯誤)”和“不在集合內(絕對不在集合內)”兩種情況,可見 Bloom filter 是犧牲了正確率和時間以節省空間。

Bloom filter 優點就是它的插入和查詢時間都是常數,另外它查詢元素卻不保存元素本身,具有良好的安全性。

搜索引擎

一、Nutch

簡介:Nutch 是一個開源Java 實現的搜索引擎。它提供了我們運行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬蟲。

儘管Web搜索是漫遊Internet的基本要求, 但是現有web搜索引擎的數目卻在下降. 並且這很有可能進一步演變成爲一個公司壟斷了幾乎所有的web搜索爲其謀取商業利益.這顯然 不利於廣大Internet用戶.

Nutch爲我們提供了這樣一個不同的選擇. 相對於那些商用的搜索引擎, Nutch作爲開放源代碼 搜索引擎將會更加透明, 從而更值得大家信賴. 現在所有主要的搜索引擎都採用私有的排序算法, 而不會解釋爲什麼一個網頁會排在一個特定的位置. 除此之外, 有的搜索引擎依照網站所付的 費用, 而不是根據它們本身的價值進行排序. 與它們不同, Nucth沒有什麼需要隱瞞, 也沒有 動機去扭曲搜索的結果. Nutch將盡自己最大的努力爲用戶提供最好的搜索結果.

Nutch目前最新的版本爲version v2.2.1。

官網:https://nutch.apache.org/

二、Lucene

開發者:Doug Cutting(Hadoop之父,你懂的)

簡介:Lucene是apache軟件基金會4 jakarta項目組的一個子項目,是一個開放源代碼的全文檢索引擎工具包,即它不是一個完整的全文檢索引擎,而是一個全文檢索引擎的架構,提供了完整的查詢引擎和索引引擎,部分文本分析引擎(英文與德文兩種西方語言)。Lucene的目的是爲軟件開發人員提供一個簡單易用的工具包,以方便的在目標系統中實現全文檢索的功能,或者是以此爲基礎建立起完整的全文檢索引擎。

官網:http://lucene.apache.org/

三、SolrCloud

簡介:SolrCloud是Solr4.0版本以後基於Solr和Zookeeper的分佈式搜索方案。SolrCloud是Solr的基於Zookeeper一種部署方式。Solr可以以多種方式部署,例如單機方式,多機Master-Slaver方式。

原理圖:

SolrCloud有幾個特色功能:

集中式的配置信息使用ZK進行集中配置。啓動時可以指定把Solr的相關配置文件上傳

Zookeeper,多機器共用。這些ZK中的配置不會再拿到本地緩存,Solr直接讀取ZK中的配置信息。配置文件的變動,所有機器都可以感知到。另外,Solr的一些任務也是通過ZK作爲媒介發佈的。目的是爲了容錯。接收到任務,但在執行任務時崩潰的機器,在重啓後,或者集羣選出候選者時,可以再次執行這個未完成的任務。

自動容錯SolrCloud對索引分片,並對每個分片創建多個Replication。每個Replication都可以對外提供服務。一個Replication掛掉不會影響索引服務。更強大的是,它還能自動的在其它機器上幫你把失敗機器上的索引Replication重建並投入使用。

近實時搜索立即推送式的replication(也支持慢推送)。可以在秒內檢索到新加入索引。

查詢時自動負載均衡SolrCloud索引的多個Replication可以分佈在多臺機器上,均衡查詢壓力。如果查詢壓力大,可以通過擴展機器,增加Replication來減緩。

自動分發的索引和索引分片發送文檔到任何節點,它都會轉發到正確節點。

事務日誌事務日誌確保更新無丟失,即使文檔沒有索引到磁盤。

四、Solr

簡介:Solr是一個獨立的企業級搜索應用服務器,它對外提供類似於Web-service的API接口。用戶可以通過http請求,向搜索引擎服務器提交一定格式的XML文件,生成索引;也可以通過Http Get操作提出查找請求,並得到XML格式的返回結果。

Solr是一個高性能,採用Java5開發,基於Lucene的全文搜索服務器。同時對其進行了擴展,提供了比Lucene更爲豐富的查詢語言,同時實現了可配置、可擴展並對查詢性能進行了優化,並且提供了一個完善的功能管理界面,是一款非常優秀的全文搜索引擎。

官網:https://lucene.apache.org/solr/

五、ElasticSearch

簡介:ElasticSearch是一個基於Lucene的搜索服務器。它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口。Elasticsearch是用Java開發的,並作爲Apache許可條款下的開放源碼發佈,是第二最流行的企業搜索引擎。設計用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。

官網:http://www.elasticsearch.org/

六、Sphinx

簡介:Sphinx是一個基於SQL的全文檢索引擎,可以結合MySQL,PostgreSQL做全文搜索,它可以提供比數據庫本身更專業的搜索功能,使得應用程序更容易實現專業化的全文檢索。Sphinx特別爲一些腳本語言設計搜索API接口,如PHP,Python,Perl,Ruby等,同時爲MySQL也設計了一個存儲引擎插件。

Sphinx單一索引最大可包含1億條記錄,在1千萬條記錄情況下的查詢速度爲0.x秒(毫秒級)。Sphinx創建索引的速度爲:創建100萬條記錄的索引只需 3~4分鐘,創建1000萬條記錄的索引可以在50分鐘內完成,而只包含最新10萬條記錄的增量索引,重建一次只需幾十秒。

官網:http://sphinxsearch.com

七、SenseiDB

貢獻者:linkedin

簡介:SenseiDB是一個NoSQL數據庫,它專注於高更新率以及複雜半結構化搜索查詢。熟悉Lucene和Solor的用戶會發現,SenseiDB背後有許多似曾相識的概念。SenseiDB部署在多節點集羣中,其中每個節點可以包括N塊數據片。Apache Zookeeper用於管理節點,它能夠保持現有配置,並可以將任意改動(如拓撲修改)傳輸到整個節點羣中。SenseiDB集羣還需要一種模式用於定義將要使用的數據模型。

從SenseiDB集羣中獲取數據的唯一方法是通過Gateways(它 沒有“INSERT”方法)。每個集羣都連接到一個單一gateway。你需要了解很重要的一點是,由於SenseiDB本身沒法處理原子性 (Atomicity)和隔離性(Isolation),因此只能通過外部在gateway層進行限制。另外,gateway必須確保數據流按照預期的方 式運作。內置的gateway有以下幾種形式:

  • 來自文件

  • 來自JMS隊列

  • 通過JDBC

  • 來自Apache Kafka

官網:http://senseidb.com

數據挖掘

一、Mahout

簡介:Apache Mahout 是 Apache Software Foundation (ASF) 開發的一個全新的開源項目,其主要目標是創建一些可伸縮的機器學習算法,供開發人員在 Apache 在許可下免費使用。該項目已經發展到了它的最二個年頭,目前只有一個公共發行版。Mahout 包含許多實現,包括集羣、分類、CP 和進化程序。此外,通過使用 Apache Hadoop 庫,Mahout 可以有效地擴展到雲中。

雖然在開源領域中相對較爲年輕,但 Mahout 已經提供了大量功能,特別是在集羣和 CF 方面。Mahout 的主要特性包括:

  • Taste CF。Taste 是 Sean Owen 在 SourceForge 上發起的一個針對 CF 的開源項目,並在 2008 年被贈予 Mahout。

  • 一些支持 Map-Reduce 的集羣實現包括 k-Means、模糊 k-Means、Canopy、Dirichlet 和 Mean-Shift。

  • Distributed Naive Bayes 和 Complementary Naive Bayes 分類實現。

  • 針對進化編程的分佈式適用性功能。

  • Matrix 和矢量庫。

  • 上述算法的示例。

官網:http://mahout.apache.org/

Iaas

IaaS(Infrastructure as a Service),即基礎設施即服務。

一、OpenStack

簡介:OpenStack是一個由NASA(美國國家航空航天局)和Rackspace合作研發併發起的,以Apache許可證授權的自由軟件和開放源代碼項目。

OpenStack是一個開源的雲計算管理平臺項目,由幾個主要的組件組合起來完成具體工作。OpenStack支持幾乎所有類型的雲環境,項目目標是提供實施簡單、可大規模擴展、豐富、標準統一的雲計算管理平臺。OpenStack通過各種互補的服務提供了基礎設施即服務(IaaS)的解決方案,每個服務提供API以進行集成。

6個核心項目:Nova(計算,Compute),Swift(對象存儲,Object),Glance(鏡像,Image),Keystone(身份,Identity),Horizon(自助門戶,Dashboard),Quantum & Melange(網絡&地址管理),另外還有若干社區項目,如Rackspace(負載均衡)、Rackspace(關係型數據庫)。

相關閱讀:

官網:https://www.openstack.org/

二、Docker

貢獻者:dotCloud

簡介:Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app)。幾乎沒有性能開銷,可以很容易地在機器和數據中心中運行。最重要的是,他們不依賴於任何語言、框架或包括系統。

官網:http://www.docker.io/

三、Kubernetes

貢獻者:Google

簡介:Kubernetes是Google開源的容器集羣管理系統。它構建Ddocker技術之上,爲容器化的應用提供資源調度、部署運行、服務發現、擴容縮容等整一套功能,本質上可看作是基於容器技術的mini-PaaS平臺。

Kubernetes從另一個角度對資源進行抽象,它讓開發人員和管理人員共同着眼於服務的行爲和性能的提升,而不是僅僅關注對單一的組件或者是基礎資源。

那麼Kubernetes集羣到底提供了哪些單一容器所沒有功能?它主要關注的是對服務級別的控制而並非僅僅是對容器級別的控制,Kubernetes提供了一種“機智”的管理方式,它將服務看成一個整體。在Kubernete的解決方案中,一個服務甚至可以自我擴展,自我診斷,並且容易升級。例如,在Google中,我們使用機器學習技術來保證每個運行的服務的當前狀態都是最高效的。

代碼託管:https://github.com/GoogleCloudPlatform/kubernetes/

四、Imctfy

貢獻者:Google

簡介:Google開源了自己所用Linux容器系統的開源版本lmctfy,讀音爲lem-kut-fee。包括一個C++庫(使用了C++11,文檔可以參考頭文件)和命令行界面。目前的版本是0.1,只提供了CPU與內存隔離。項目還在密集開發中。

mctfy本身是針對某些特定使用場景設計和實現的,目前擁有一臺機器上所有容器時運行情況最好,不推薦與LXC和其他容器系統一起使用(雖然也可行)。已在Ubuntu 12.04+和Ubuntu 3.3與3.8內核上測試。

代碼託管:https://github.com/google/Imctfy/

監控管理

一、Dapper

貢獻者:Google

簡介:Dapper是一個輕量的ORM(對象關係映射(英語:Object Relational Mapping,簡稱ORM,或O/RM,或O/R mapping)。並不單純的是一個DBHelper.因爲在Dapper中數據其實就是一個對象。Dapper擴展與IDbConnection上,所以事實上它的傾入性很低。我用了StructureMap。如果不喜歡可以自己更換,或者自己實現下。

代碼就一個SqlMapper.cs文件,主要是IDbConnection的擴展方法,編譯後就40K的一個很小的dll。

特性:

  • Dapper很快。Dapper的速度接近與IDataReader。

  • Dapper支持主流數據庫 Mysql,SqlLite,Mssql2000,Mssql2005,Oracle等一系列的數據庫

  • 支持多表並聯的對象。支持一對多 多對多的關係,並且沒侵入性。

  • 原理通過Emit反射IDataReader的序列隊列,來快速的得到和產生對象

  • Dapper語法十分簡單。並且無須遷就數據庫的設計

官方站點 http://code.google.com/p/dapper-dot-net/

代碼託管:http://bigbully.github.io/Dapper-translation/

二、Zipkin

貢獻者:Twitter

簡介:Zipkin (分佈式跟蹤系統)是 Twitter 的一個開源項目,允許開發者收集 Twitter 各個服務上的監控數據,並提供查詢接口。該系統讓開發者可通過一個 Web 前端輕鬆的收集和分析數據,例如用戶每次請求服務的處理時間等,可方便的監測系統中存在的瓶頸。

官方網站:http://twitter.github.io/zipkin/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章