• <menu id="w2i4a"></menu>
  • logo 大數(shù)據(jù)干貨(三)

    文檔首頁(yè)>>大數(shù)據(jù)干貨(三)>>速度收藏 | 100+大數(shù)據(jù)開(kāi)源處理工具匯總

    速度收藏 | 100+大數(shù)據(jù)開(kāi)源處理工具匯總


    本文除了一些常用的大數(shù)據(jù)工具,還總結(jié)匯總了其他大數(shù)據(jù)工具,幾乎是最全的大數(shù)據(jù)工具的總結(jié)。
    如果你想入門大數(shù)據(jù),可以對(duì)他們進(jìn)行簡(jiǎn)單的了解。
    如果你想學(xué)習(xí)自己熟悉意外的大數(shù)據(jù)工具,可以看這篇文章。
    如果你想選擇一個(gè)適合自己公司的大數(shù)據(jù)工具,也可以參考這篇文章。
     
    我們將針對(duì)大數(shù)據(jù)開(kāi)源工具不同的用處來(lái)進(jìn)行分類,并且附上了官網(wǎng)和部分下載鏈接,希望能給做大數(shù)據(jù)的朋友做個(gè)參考。下面是第一部分。

    查詢引擎

    一、Phoenix
    貢獻(xiàn)者::Salesforce
    簡(jiǎn)介:這是一個(gè)Java中間層,可以讓開(kāi)發(fā)者在Apache HBase上執(zhí)行SQL查詢。Phoenix完全使用Java編寫,代碼位于GitHub上,并且提供了一個(gè)客戶端可嵌入的JDBC驅(qū)動(dòng)。
    Phoenix查詢引擎會(huì)將SQL查詢轉(zhuǎn)換為一個(gè)或多個(gè)HBase scan,并編排執(zhí)行以生成標(biāo)準(zhǔn)的JDBC結(jié)果集。直接使用HBase API、協(xié)同處理器與自定義過(guò)濾器,對(duì)于簡(jiǎn)單查詢來(lái)說(shuō),其性能量級(jí)是毫秒,對(duì)于百萬(wàn)級(jí)別的行數(shù)來(lái)說(shuō),其性能量級(jí)是秒。
    Phoenix最值得關(guān)注的一些特性有:
    ?嵌入式的JDBC驅(qū)動(dòng),實(shí)現(xiàn)了大部分的java.sql接口,包括元數(shù)據(jù)API
    ?可以通過(guò)多部行鍵或是鍵/值單元對(duì)列進(jìn)行建模
    ?完善的查詢支持,可以使用多個(gè)謂詞以及優(yōu)化的掃描鍵
    ?DDL支持:通過(guò)CREATE TABLE、DROP TABLE及ALTER TABLE來(lái)添加/刪除列
    ?版本化的模式倉(cāng)庫(kù):當(dāng)寫入數(shù)據(jù)時(shí),快照查詢會(huì)使用恰當(dāng)?shù)哪J?br /> ?DML支持:用于逐行插入的UPSERT VALUES、用于相同或不同表之間大量數(shù)據(jù)傳輸?shù)腢PSERT ?SELECT、用于刪除行的DELETE
    ?通過(guò)客戶端的批處理實(shí)現(xiàn)的有限的事務(wù)支持
    ?單表——還沒(méi)有連接,同時(shí)二級(jí)索引也在開(kāi)發(fā)當(dāng)中
    ?緊跟ANSI SQL標(biāo)準(zhǔn)
    Phoenix官方網(wǎng)站>>>
     
    二、Stinger
    貢獻(xiàn)者::Hortonworks
    簡(jiǎn)介:原叫Tez,下一代Hive,Hortonworks主導(dǎo)開(kāi)發(fā),運(yùn)行在YARN上的DAG計(jì)算框架。
    某些測(cè)試下,Stinger能提升10倍左右的性能,同時(shí)會(huì)讓Hive支持更多的SQL,其主要優(yōu)點(diǎn)包括:
    ?讓用戶在Hadoop獲得更多的查詢匹配。其中包括類似OVER的字句分析功能,支持WHERE查詢,讓Hive的樣式系統(tǒng)更符合SQL模型。
    ?優(yōu)化了Hive請(qǐng)求執(zhí)行計(jì)劃,優(yōu)化后請(qǐng)求時(shí)間減少90%。改動(dòng)了Hive執(zhí)行引擎,增加單Hive任務(wù)的被秒處理記錄數(shù)。
    ?在Hive社區(qū)中引入了新的列式文件格式(如ORC文件),提供一種更現(xiàn)代、高效和高性能的方式來(lái)儲(chǔ)存Hive數(shù)據(jù)。
    ?引入了新的運(yùn)行時(shí)框架——Tez,旨在消除Hive的延時(shí)和吞吐量限制。Tez通過(guò)消除不必要的task、障礙同步和對(duì)HDFS的讀寫作業(yè)來(lái)優(yōu)化Hive job。這將優(yōu)化Hadoop內(nèi)部的執(zhí)行鏈,徹底加速Hive負(fù)載處理。
    Stinger官方網(wǎng)站>>>
     
    三、Presto
    貢獻(xiàn)者::Facebook
    簡(jiǎn)介:Facebook開(kāi)源的數(shù)據(jù)查詢引擎Presto ,可對(duì)250PB以上的數(shù)據(jù)進(jìn)行快速地交互式分析。該項(xiàng)目始于 2012 年秋季開(kāi)始開(kāi)發(fā),目前該項(xiàng)目已經(jīng)在超過(guò) 1000 名 Facebook 雇員中使用,運(yùn)行超過(guò) 30000 個(gè)查詢,每日數(shù)據(jù)在 1PB 級(jí)別。Facebook 稱 Presto 的性能比諸如 Hive 和 Map*Reduce 要好上 10 倍有多。
    Presto 當(dāng)前支持 ANSI SQL 的大多數(shù)特效,包括聯(lián)合查詢、左右聯(lián)接、子查詢以及一些聚合和計(jì)算函數(shù);支持近似截然不同的計(jì)數(shù)(DISTINCT COUNT)等。
    github源代碼下載>>>
     
    四、Shark
    簡(jiǎn)介:Shark即Hive on Spark,本質(zhì)上是通過(guò)Hive的HQL解析,把HQL翻譯成Spark上的RDD操作,然后通過(guò)Hive的metadata獲取數(shù)據(jù)庫(kù)里的表信息,實(shí)際HDFS上的數(shù)據(jù)和文件,會(huì)由Shark獲取并放到Spark上運(yùn)算。Shark的特點(diǎn)就是快,完全兼容Hive,且可以在shell模式下使用rdd2sql()這樣的API,把HQL得到的結(jié)果集,繼續(xù)在scala環(huán)境下運(yùn)算,支持自己編寫簡(jiǎn)單的機(jī)器學(xué)習(xí)或簡(jiǎn)單分析處理函數(shù),對(duì)HQL結(jié)果進(jìn)一步分析計(jì)算。
    ?Shark速度快的原因除了Spark平臺(tái)提供的基于內(nèi)存迭代計(jì)算外,在設(shè)計(jì)上還存在對(duì)Spark上進(jìn)行了一定的改造,主要有
    ?partial DAG execution:對(duì)join優(yōu)化,調(diào)節(jié)并行粒度,因?yàn)镾park本身的寬依賴和窄依賴會(huì)影響并行計(jì)算和速度
     
    基于列的壓縮和存儲(chǔ):把HQL表數(shù)據(jù)按列存,每列是一個(gè)array,存在JVM上,避免了JVM GC低效,而壓縮和解壓相關(guān)的技術(shù)是Yahoo!提供的。
    結(jié)來(lái)說(shuō),Shark是一個(gè)插件式的東西,在我現(xiàn)有的Spark和Hive及hadoop-client之間,在這兩套都可用的情況下,Shark只要獲取Hive的配置(還有metastore和exec等關(guān)鍵包),Spark的路徑,Shark就能利用Hive和Spark,把HQL解析成RDD的轉(zhuǎn)換,把數(shù)據(jù)取到Spark上運(yùn)算和分析。在SQL on Hadoop這塊,Shark有別于Impala,Stringer,而這些系統(tǒng)各有自己的設(shè)計(jì)思路,相對(duì)于對(duì)MR進(jìn)行優(yōu)化和改進(jìn)的思路,Shark的思路更加簡(jiǎn)單明了些。
    Shark官方網(wǎng)站>>>

    五、Pig

    簡(jiǎn)介:Pig是一種編程語(yǔ)言,它簡(jiǎn)化了Hadoop常見(jiàn)的工作任務(wù)。Pig可加載數(shù)據(jù)、表達(dá)轉(zhuǎn)換數(shù)據(jù)以及存儲(chǔ)最終結(jié)果。Pig內(nèi)置的操作使得半結(jié)構(gòu)化數(shù)據(jù)變得有意義(如日志文件)。同時(shí)Pig可擴(kuò)展使用Java中添加的自定義數(shù)據(jù)類型并支持?jǐn)?shù)據(jù)轉(zhuǎn)換。
    Pig最大的作用就是對(duì)mapreduce算法(框架)實(shí)現(xiàn)了一套shell腳本 ,類似我們通常熟悉的SQL語(yǔ)句,在Pig中稱之為Pig Latin,在這套腳本中我們可以對(duì)加載出來(lái)的數(shù)據(jù)進(jìn)行排序、過(guò)濾、求和、分組(group by)、關(guān)聯(lián)(Joining),Pig也可以由用戶自定義一些函數(shù)對(duì)數(shù)據(jù)集進(jìn)行操作,也就是傳說(shuō)中的UDF(user-defined functions)。
    Pig官方網(wǎng)站>>>

    六、Cloudera Impala

    貢獻(xiàn)者::Cloudera
    簡(jiǎn)介:Cloudera Impala 可以直接為存儲(chǔ)在HDFS或HBase中的Hadoop數(shù)據(jù)提供快速,交互式的SQL查詢。除了使用相同的存儲(chǔ)平臺(tái)外, Impala和Apache Hive一樣也使用了相同的元數(shù)據(jù),SQL語(yǔ)法(Hive SQL),ODBC驅(qū)動(dòng)和用戶接口(Hue Beeswax),這就很方便的為用戶提供了一個(gè)相似并且統(tǒng)一的平臺(tái)來(lái)進(jìn)行批量或?qū)崟r(shí)查詢。
    Cloudera Impala 是用來(lái)進(jìn)行大數(shù)據(jù)查詢的補(bǔ)充工具。 Impala 并沒(méi)有取代像Hive這樣基于MapReduce的分布式處理框架。Hive和其它基于MapReduce的計(jì)算框架非常適合長(zhǎng)時(shí)間運(yùn)行的批處理作業(yè),例如那些涉及到批量 Extract、Transform、Load ,即需要進(jìn)行ETL作業(yè)。
    Impala 提供了:
    ?數(shù)據(jù)科學(xué)家或數(shù)據(jù)分析師已經(jīng)熟知的SQL接口
    ?能夠在Apache Hadoop 的大數(shù)據(jù)中進(jìn)行交互式數(shù)據(jù)查詢
    ? Single system for big data processing and analytics so customers can avoid costly modeling and ETL just for analytics
    Cloudera Impala官方網(wǎng)站>>>

    七、Apache Drill

    貢獻(xiàn)者::MapR
    簡(jiǎn)介:Apache Drill是是一個(gè)能夠?qū)Υ髷?shù)據(jù)進(jìn)行交互分析、開(kāi)源的分布式系統(tǒng),且基于Google Dremel實(shí)現(xiàn),它能夠運(yùn)行在上千個(gè)節(jié)點(diǎn)的服務(wù)器集群上,且能在幾秒內(nèi)處理PB級(jí)或者萬(wàn)億條的數(shù)據(jù)記錄。Drill能夠幫助企業(yè)用戶快速、高效地進(jìn)行Hadoop數(shù)據(jù)查詢和企業(yè)級(jí)大數(shù)據(jù)分析。Drill于2012年8月份由Apache推出。
    從Drill官方對(duì)其架構(gòu)的介紹中得知,其具有適于實(shí)時(shí)的分析和快速的應(yīng)用開(kāi)發(fā)、適于半結(jié)構(gòu)化/嵌套數(shù)據(jù)的分析、兼容現(xiàn)有的SQL環(huán)境和Apache Hive等特征。另外,Drill的核心模塊是Drillbit服務(wù),該服務(wù)模塊包括遠(yuǎn)程訪問(wèn)子模塊、SQL解析器、查詢優(yōu)化器、任務(wù)計(jì)劃執(zhí)行引擎、存儲(chǔ)插件接口(DFS、HBase、Hive等的接口)、分布式緩存模塊等幾部分,如下圖所示
    Apache Drill官方網(wǎng)站>>>

    八、Apache Tajo

    簡(jiǎn)介:Apache Tajo項(xiàng)目的目的是在HDFS之上構(gòu)建一個(gè)先進(jìn)的數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)。Tajo將自己標(biāo)榜為一個(gè)“大數(shù)據(jù)倉(cāng)庫(kù)”,但是它好像和之前介紹的那些低延遲查詢引擎類似。雖然它支持外部表和Hive數(shù)據(jù)集(通過(guò)HCatalog),但是它的重點(diǎn)是數(shù)據(jù)管理,提供低延遲的數(shù)據(jù)訪問(wèn),以及為更傳統(tǒng)的ETL提供工具。它也需要在數(shù)據(jù)節(jié)點(diǎn)上部署Tajo特定的工作進(jìn)程。
    Tajo的功能包括:
    ?ANSI SQL兼容
    ?JDBC 驅(qū)動(dòng)
    ?集成Hive metastore能夠訪問(wèn)Hive數(shù)據(jù)集
    ?一個(gè)命令行客戶端
    ?一個(gè)自定義函數(shù)API
    Apache Tajo官方網(wǎng)站>>>

    九、Hive

    簡(jiǎn)介:hive是基于Hadoop的一個(gè)數(shù)據(jù)倉(cāng)庫(kù)工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫(kù)表,并提供簡(jiǎn)單的sql查詢功能,可以將sql語(yǔ)句轉(zhuǎn)換為MapReduce任務(wù)進(jìn)行運(yùn)行。 其優(yōu)點(diǎn)是學(xué)習(xí)成本低,可以通過(guò)類SQL語(yǔ)句快速實(shí)現(xiàn)簡(jiǎn)單的MapReduce統(tǒng)計(jì),不必開(kāi)發(fā)專門的MapReduce應(yīng)用,十分適合數(shù)據(jù)倉(cāng)庫(kù)的統(tǒng)計(jì)分析。
    Hive官方網(wǎng)站>>>
     
     
    慧都控件網(wǎng)年末大促
     

    流式計(jì)算

    一、Facebook Puma
    貢獻(xiàn)者:Facebook
    簡(jiǎn)介:實(shí)時(shí)數(shù)據(jù)流分析

    二、Twitter Rainbird

    貢獻(xiàn)者:Twitter
    簡(jiǎn)介:Rainbird一款基于Zookeeper, Cassandra, Scribe, Thrift的分布式實(shí)時(shí)統(tǒng)計(jì)系統(tǒng),這些基礎(chǔ)組件的基本功能如下:
    ? Zookeeper,Hadoop子項(xiàng)目中的一款分布式協(xié)調(diào)系統(tǒng),用于控制分布式系統(tǒng)中各個(gè)組件中的一致性。
    ?Cassandra,NoSQL中一款非常出色的產(chǎn)品,集合了Dynamo和Bigtable特性的分布式存儲(chǔ)系統(tǒng),用于存儲(chǔ)需要進(jìn)行統(tǒng)計(jì)的數(shù)據(jù),統(tǒng)計(jì)數(shù)據(jù),并且提供客戶端進(jìn)行統(tǒng)計(jì)數(shù)據(jù)的查詢。(需要使用分布式Counter補(bǔ)丁CASSANDRA-1072)
    ? Scribe,F(xiàn)acebook開(kāi)源的一款分布式日志收集系統(tǒng),用于在系統(tǒng)中將各個(gè)需要統(tǒng)計(jì)的數(shù)據(jù)源收集到Cassandra中。
    ? Thrift,F(xiàn)acebook開(kāi)源的一款跨語(yǔ)言C/S網(wǎng)絡(luò)通信框架,開(kāi)發(fā)人員基于這個(gè)框架可以輕易地開(kāi)發(fā)C/S應(yīng)用。
    用處
    Rainbird可以用于實(shí)時(shí)數(shù)據(jù)的統(tǒng)計(jì):
    ?統(tǒng)計(jì)網(wǎng)站中每一個(gè)頁(yè)面,域名的點(diǎn)擊次數(shù)
    ?內(nèi)部系統(tǒng)的運(yùn)行監(jiān)控(統(tǒng)計(jì)被監(jiān)控服務(wù)器的運(yùn)行狀態(tài))
    ?記錄最大值和最小值
     

    三、Yahoo S4

    貢獻(xiàn)者:Yahoo
    簡(jiǎn)介:S4(Simple Scalable Streaming System)最初是Yahoo!為提高搜索廣告有效點(diǎn)擊率的問(wèn)題而開(kāi)發(fā)的一個(gè)平臺(tái),通過(guò)統(tǒng)計(jì)分析用戶對(duì)廣告的點(diǎn)擊率,排除相關(guān)度低的廣告,提升點(diǎn)擊率。目前該項(xiàng)目剛啟動(dòng)不久,所以也可以理解為是他們提出的一個(gè)分布式流計(jì)算(Distributed Stream Computing)的模型。

    S4的設(shè)計(jì)目標(biāo)是:

    ·提供一種簡(jiǎn)單的編程接口來(lái)處理數(shù)據(jù)流
    ·設(shè)計(jì)一個(gè)可以在普通硬件之上可擴(kuò)展的高可用集群。
    ·通過(guò)在每個(gè)處理節(jié)點(diǎn)使用本地內(nèi)存,避免磁盤I/O瓶頸達(dá)到最小化延遲
    ·使用一個(gè)去中心的,對(duì)等架構(gòu);所有節(jié)點(diǎn)提供相同的功能和職責(zé)。沒(méi)有擔(dān)負(fù)特殊責(zé)任的中心節(jié)點(diǎn)。這大大簡(jiǎn)化了部署和維護(hù)。
    ·使用可插拔的架構(gòu),使設(shè)計(jì)盡可能的即通用又可定制化。
    ·友好的設(shè)計(jì)理念,易于編程,具有靈活的彈性
    Yahoo S4官方網(wǎng)站>>>

    四、Twitter Storm

    貢獻(xiàn)者:Twitter
    簡(jiǎn)介:Storm是Twitter開(kāi)源的一個(gè)類似于Hadoop的實(shí)時(shí)數(shù)據(jù)處理框架,它原來(lái)是由BackType開(kāi)發(fā),后BackType被Twitter收購(gòu),將Storm作為Twitter的實(shí)時(shí)數(shù)據(jù)分析系統(tǒng)。

    實(shí)時(shí)數(shù)據(jù)處理的應(yīng)用場(chǎng)景很廣泛,例如商品推薦,廣告投放,它能根據(jù)當(dāng)前情景上下文(用戶偏好,地理位置,已發(fā)生的查詢和點(diǎn)擊等)來(lái)估計(jì)用戶點(diǎn)擊的可能性并實(shí)時(shí)做出調(diào)整。

    storm的三大作用領(lǐng)域:

    1.信息流處理(Stream Processing)
    Storm可以用來(lái)實(shí)時(shí)處理新數(shù)據(jù)和更新數(shù)據(jù)庫(kù),兼具容錯(cuò)性和可擴(kuò)展性,它 可以用來(lái)處理源源不斷的消息,并將處理之后的結(jié)果保存到持久化介質(zhì)中。
    2.連續(xù)計(jì)算(Continuous Computation)
    Storm可以進(jìn)行連續(xù)查詢并把結(jié)果即時(shí)反饋給客戶,比如將Twitter上的熱門話題發(fā)送到客戶端。
    3.分布式遠(yuǎn)程過(guò)程調(diào)用(Distributed RPC)
    除此之外,Storm也被廣泛用于以下方面:
    • 精確的廣告推送
    • 實(shí)時(shí)日志的處理
    Twitter Storm官方網(wǎng)站>>>

    迭代計(jì)算

    一、Apache Hama
    簡(jiǎn)介:Apache Hama是一個(gè)純BSP(Bulk Synchronous Parallel)計(jì)算框架,模仿了Google的Pregel。用來(lái)處理大規(guī)模的科學(xué)計(jì)算,特別是矩陣和圖計(jì)算。
    ?建立在Hadoop上的分布式并行計(jì)算模型。
    ?基于 Map/Reduce 和 Bulk Synchronous 的實(shí)現(xiàn)框架。
    ?運(yùn)行環(huán)境需要關(guān)聯(lián) Zookeeper、HBase、HDFS 組件。
    Hama中有2個(gè)主要的模型:
    – 矩陣計(jì)算(Matrix package)
    – 面向圖計(jì)算(Graph package)
    Apache Hama官方網(wǎng)站>>>

    二、Apache Giraph

    代碼托管地址: GitHub
    簡(jiǎn)介:Apache Giraph是一個(gè)可伸縮的分布式迭代圖處理系統(tǒng),靈感來(lái)自BSP(bulk synchronous parallel)和Google的Pregel,與它們 區(qū)別于則是是開(kāi)源、基于 Hadoop 的架構(gòu)等。
    Giraph處理平臺(tái)適用于運(yùn)行大規(guī)模的邏輯計(jì)算,比如頁(yè)面排行、共享鏈接、基于個(gè)性化排行等。Giraph專注于社交圖計(jì)算,被Facebook作為其Open Graph工具的核心,幾分鐘內(nèi)處理數(shù)萬(wàn)億次用戶及其行為之間的連接。
    三、HaLoop
    簡(jiǎn)介:迭代的MapReduce,HaLoop——適用于迭代計(jì)算的Hadoop 。
     
    Hadoop與HaLoop的不同

    與Hadoop比較的四點(diǎn)改變:

    1.提供了一套新的編程接口,更加適用于迭代計(jì)算;
    HaLoop給迭代計(jì)算一個(gè)抽象的遞歸公式:

    2.HaLoop的master進(jìn)行job內(nèi)的循環(huán)控制,直到迭代計(jì)算結(jié)束;
    3.Task Scheduler也進(jìn)行了修改,使得任務(wù)能夠盡量滿足data locality
    4.slave nodes對(duì)數(shù)據(jù)進(jìn)行cache并index索引,索引也以文件的形式保存在本地磁盤。
    HaLoop官網(wǎng)>>>

    四、Twister

    簡(jiǎn)介:Twister, 迭代式MapReduce框架,Twister是由一個(gè)印度人開(kāi)發(fā)的,其架構(gòu)如下:
     
    在Twister中,大文件不會(huì)自動(dòng)被切割成一個(gè)一個(gè)block,因而用戶需提前把文件分成一個(gè)一個(gè)小文件,以供每個(gè)task處理。在map階段,經(jīng)過(guò)map()處理完的結(jié)果被放在分布式內(nèi)存中,然后通過(guò)一個(gè)broker network(NaradaBroking系統(tǒng))將數(shù)據(jù)push給各個(gè)reduce task(Twister假設(shè)內(nèi)存足夠大,中間數(shù)據(jù)可以全部放在內(nèi)存中);在reduce階段,所有reduce task產(chǎn)生的結(jié)果通過(guò)一個(gè)combine操作進(jìn)行歸并,此時(shí),用戶可以進(jìn)行條件判定, 確定迭代是否結(jié)束。combine后的數(shù)據(jù)直接被送給map task,開(kāi)始新一輪的迭代。為了提高容錯(cuò)性,Twister每隔一段時(shí)間會(huì)將map task和reduce task產(chǎn)生的結(jié)果寫到磁盤上,這樣,一旦某個(gè)task失敗,它可以從最近的備份中獲取輸入,重新計(jì)算。

    為了避免每次迭代重新創(chuàng)建task,Twister維護(hù)了一個(gè)task pool,每次需要task時(shí)直接從pool中取。在Twister中,所有消息和數(shù)據(jù)都是通過(guò)broker network傳遞的,該broker network是一個(gè)獨(dú)立的模塊,目前支持NaradaBroking和ActiveMQ。

    離線計(jì)算

    一、Hadoop MapReduce
    簡(jiǎn)介:MapReduce是一種編程模型,用于大規(guī)模數(shù)據(jù)集(大于1TB)的并行運(yùn)算。概念”Map(映射)”和”Reduce(歸約)”,和它們的主要思想,都是從函數(shù)式編程語(yǔ)言里借來(lái)的,還有從矢量編程語(yǔ)言里借來(lái)的特性。它極大地方便了編程人員在不會(huì)分布式并行編程的情況下,將自己的程序運(yùn)行在分布式系統(tǒng)上。 當(dāng)前的軟件實(shí)現(xiàn)是指定一個(gè)Map(映射)函數(shù),用來(lái)把一組鍵值對(duì)映射成一組新的鍵值對(duì),指定并發(fā)的Reduce(歸約)函數(shù),用來(lái)保證所有映射的鍵值對(duì)中的每一個(gè)共享相同的鍵組。
    Hadoop MapReduce官方網(wǎng)站>>>

    二、Berkeley Spark

    簡(jiǎn)介:Spark是UC Berkeley AMP lab所開(kāi)源的類Hadoop MapReduce的通用的并行,Spark,擁有Hadoop MapReduce所具有的優(yōu)點(diǎn);但不同于MapReduce的是Job中間輸出結(jié)果可以保存在內(nèi)存中,從而不再需要讀寫HDFS,因此Spark能更好地適用于數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)等需要迭代的map reduce的算法。
     
    三、DataTorrent

    簡(jiǎn)介:DataTorrent基于Hadoop 2.x構(gòu)建,是一個(gè)實(shí)時(shí)的、有容錯(cuò)能力的數(shù)據(jù)流式處理和分析平臺(tái),它使用本地Hadoop應(yīng)用程序,而這些應(yīng)用程序可以與執(zhí)行其它任務(wù),如批處理,的應(yīng)用程序共存。該平臺(tái)的架構(gòu)如下

    鍵值存儲(chǔ)

    一、LevelDB

    貢獻(xiàn)者:Google
    簡(jiǎn)介:Leveldb是一個(gè)google實(shí)現(xiàn)的非常高效的kv數(shù)據(jù)庫(kù),目前的版本1.2能夠支持billion級(jí)別的數(shù)據(jù)量了。 在這個(gè)數(shù)量級(jí)別下還有著非常高的性能,主要?dú)w功于它的良好的設(shè)計(jì)。特別是LMS算法。

    LevelDB 是單進(jìn)程的服務(wù),性能非常之高,在一臺(tái)4核Q6600的CPU機(jī)器上,每秒鐘寫數(shù)據(jù)超過(guò)40w,而隨機(jī)讀的性能每秒鐘超過(guò)10w。

    此處隨機(jī)讀是完全命中內(nèi)存的速度,如果是不命中 速度大大下降。
    LevelDB官方網(wǎng)站>>>

    二、RocksDB

    貢獻(xiàn)者:facebook
    簡(jiǎn)介:RocksDB雖然在代碼層面上是在LevelDB原有的代碼上進(jìn)行開(kāi)發(fā)的,但卻借鑒了Apache HBase的一些好的idea。在云計(jì)算橫行的年代,開(kāi)口不離Hadoop,RocksDB也開(kāi)始支持HDFS,允許從HDFS讀取數(shù)據(jù)。RocksDB支持一次獲取多個(gè)K-V,還支持Key范圍查找。LevelDB只能獲取單個(gè)Key。
    RocksDB除了簡(jiǎn)單的Put、Delete操作,還提供了一個(gè)Merge操作,說(shuō)是為了對(duì)多個(gè)Put操作進(jìn)行合并。
    RocksDB提供一些方便的工具,這些工具包含解析sst文件中的K-V記錄、解析MANIFEST文件的內(nèi)容等。RocksDB支持多線程合并,而LevelDB是單線程合并的。
    RocksDB官方網(wǎng)站>>>

    三、HyperDex

    貢獻(xiàn)者:Facebook
     
    HyperDex是一個(gè)分布式、可搜索的鍵值存儲(chǔ)系統(tǒng),特性如下:
    • 分布式KV存儲(chǔ),系統(tǒng)性能能夠隨節(jié)點(diǎn)數(shù)目線性擴(kuò)展
    • 吞吐和延時(shí)都能秒殺現(xiàn)在風(fēng)頭正勁的MonogDB,吞吐甚至強(qiáng)于Redis
    • 使用了hyperspace hashing技術(shù),使得對(duì)存儲(chǔ)的K-V的任意屬性進(jìn)行查詢成為可能
    官網(wǎng):http://hyperdex.org/

    四、TokyoCabinet

    日本人Mikio Hirabayashi(平林干雄)開(kāi)發(fā)的一款DBM數(shù)據(jù)庫(kù)。Tokyo Cabinet 是一個(gè)DBM的實(shí)現(xiàn)。這里的數(shù)據(jù)庫(kù)由一系列key-value對(duì)的記錄構(gòu)成。key和value都可以是任意長(zhǎng)度的字節(jié)序列,既可以是二進(jìn)制也可以是字符串。這里沒(méi)有數(shù)據(jù)類型和數(shù)據(jù)表的概念。

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

    TokyoCabinet官方網(wǎng)站>>>

    五、Voldemort
    Voldemort是一個(gè)分布式鍵值存儲(chǔ)系統(tǒng),是Amazon’s Dynamo的一個(gè)開(kāi)源克隆。特性如下:

    • 支持自動(dòng)復(fù)制數(shù)據(jù)到多個(gè)服務(wù)器上。
    • 支持?jǐn)?shù)據(jù)自動(dòng)分割所以每個(gè)服務(wù)器只包含總數(shù)據(jù)的一個(gè)子集。
    • 提供服務(wù)器故障透明處理功能。
    • 支持可撥插的序化支持,以實(shí)現(xiàn)復(fù)雜的鍵-值存儲(chǔ),它能夠很好的5.集成常用的序化框架如:Protocol Buffers、Thrift、Avro和Java Serialization。
    • 數(shù)據(jù)項(xiàng)都被標(biāo)識(shí)版本能夠在發(fā)生故障時(shí)盡量保持?jǐn)?shù)據(jù)的完整性而不會(huì)影響系統(tǒng)的可用性。
    • 每個(gè)節(jié)點(diǎn)相互獨(dú)立,互不影響。
    • 支持可插拔的數(shù)據(jù)放置策略
    官網(wǎng):http://project-voldemort.com/


    六、Amazon Dynamo

    貢獻(xiàn)者:亞馬遜

    簡(jiǎn)介:Amazon Dynamo 是一個(gè)經(jīng)典的分布式Key-Value 存儲(chǔ)系統(tǒng),具備去中心化,高可用性,高擴(kuò)展性的特點(diǎn),但是為了達(dá)到這個(gè)目標(biāo)在很多場(chǎng)景中犧牲了一致性。Dynamo在Amazon中得到了成功的應(yīng)用,能夠跨數(shù)據(jù)中心部署于上萬(wàn)個(gè)結(jié)點(diǎn)上提供服務(wù),它的設(shè)計(jì)思想也被后續(xù)的許多分布式系統(tǒng)借鑒。如近來(lái)火熱的Cassandra,實(shí)際上就是基本照搬了Dynamo的P2P架構(gòu),同時(shí)融合了BigTable的數(shù)據(jù)模型及存儲(chǔ)算法。

    Amazon Dynamo官方網(wǎng)站>>>

    七、Tair

    貢獻(xiàn)者:淘寶

    簡(jiǎn)介:tair 是淘寶自己開(kāi)發(fā)的一個(gè)分布式 key/value 存儲(chǔ)引擎. tair 分為持久化和非持久化兩種使用方式. 非持久化的 tair 可以看成是一個(gè)分布式緩存. 持久化的 tair 將數(shù)據(jù)存放于磁盤中. 為了解決磁盤損壞導(dǎo)致數(shù)據(jù)丟失, tair 可以配置數(shù)據(jù)的備份數(shù)目, tair 自動(dòng)將一份數(shù)據(jù)的不同備份放到不同的主機(jī)上, 當(dāng)有主機(jī)發(fā)生異常, 無(wú)法正常提供服務(wù)的時(shí)候, 其于的備份會(huì)繼續(xù)提供服務(wù).tair 的總體結(jié)構(gòu)
     

    tair 作為一個(gè)分布式系統(tǒng), 是由一個(gè)中心控制節(jié)點(diǎn)和一系列的服務(wù)節(jié)點(diǎn)組成. 我們稱中心控制節(jié)點(diǎn)為config server. 服務(wù)節(jié)點(diǎn)是data server. config server 負(fù)責(zé)管理所有的data server, 維護(hù)data server的狀態(tài)信息. data server 對(duì)外提供各種數(shù)據(jù)服務(wù), 并以心跳的形式將自身狀況匯報(bào)給config server. config server是控制點(diǎn), 而且是單點(diǎn), 目前采用一主一備的形式來(lái)保證其可靠性. 所有的 data server 地位都是等價(jià)的.


    八、Apache Accumulo
    Apache Accumulo 是一個(gè)可靠的、可伸縮的、高性能的排序分布式的 Key-Value 存儲(chǔ)解決方案,基于單元訪問(wèn)控制以及可定制的服務(wù)器端處理。Accumulo使用 Google BigTable 設(shè)計(jì)思路,基于 Apache Hadoop、Zookeeper 和 Thrift 構(gòu)建。

    官網(wǎng):http://accumulo.apache.org/

    九、Redis

    Redis是一個(gè)高性能的key-value存儲(chǔ)系統(tǒng),和Memcached類似,它支持存儲(chǔ)的value類型相對(duì)更多,包括string(字符串)、list(鏈表)、set(集合)和zset(有序集合)。與memcached一樣,為了保證效率,數(shù)據(jù)都是緩存在內(nèi)存中,區(qū)別的是Redis會(huì)周期性的把更新的數(shù)據(jù)寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎(chǔ)上實(shí)現(xiàn)了主從同步。

    Redis的出現(xiàn),很大程度補(bǔ)償了memcached這類key/value存儲(chǔ)的不足,在部分場(chǎng)合可以對(duì)關(guān)系數(shù)據(jù)庫(kù)起到很好的補(bǔ)充作用。它提供了Python、Ruby、Erlang、PHP客戶端,使用很方便。

    官網(wǎng):http://redis.io/


    表格存儲(chǔ)

    一、OceanBase
    貢獻(xiàn)者:阿里巴巴
    相關(guān)文章:26頁(yè)P(yáng)PT解密支撐支付寶交易的分布式數(shù)據(jù)庫(kù)系統(tǒng)——OceanBase
    簡(jiǎn)介:OceanBase是一個(gè)支持海量數(shù)據(jù)的高性能分布式數(shù)據(jù)庫(kù)系統(tǒng),實(shí)現(xiàn)了數(shù)千億條記錄、數(shù)百TB數(shù)據(jù)上的跨行跨表事務(wù),由淘寶核心系統(tǒng)研發(fā)部、運(yùn)維、DBA、廣告、應(yīng)用研發(fā)等部門共同完成。在設(shè)計(jì)和實(shí)現(xiàn)OceanBase的時(shí)候暫時(shí)摒棄了不緊急的DBMS的功能,例如臨時(shí)表,視圖(view),研發(fā)團(tuán)隊(duì)把有限的資源集中到關(guān)鍵點(diǎn)上,當(dāng)前 OceanBase主要解決數(shù)據(jù)更新一致性、高性能的跨表讀事務(wù)、范圍查詢、join、數(shù)據(jù)全量及增量dump、批量數(shù)據(jù)導(dǎo)入。

    目前OceanBase已經(jīng)應(yīng)用于淘寶收藏夾,用于存儲(chǔ)淘寶用戶收藏條目和具體的商品、店鋪信息,每天支持4~5千萬(wàn)的更新操作。等待上線的應(yīng)用還包括CTU、SNS等,每天更新超過(guò)20億,更新數(shù)據(jù)量超過(guò)2.5TB,并會(huì)逐步在淘寶內(nèi)部推廣。

    OceanBase 0.3.1在Github開(kāi)源,開(kāi)源版本為Revision:12336。
    官網(wǎng):http://alibaba.github.io/oceanbase/

    二、Amazon SimpleDB

    貢獻(xiàn)者:亞馬遜
    Amazon SimpleDB是一個(gè)分散式數(shù)據(jù)庫(kù),以Erlang撰寫。同與Amazon EC2和亞馬遜的S3一樣作為一項(xiàng)Web 服務(wù),屬于亞馬遜網(wǎng)絡(luò)服務(wù)的一部分。
    正如EC2和S3,SimpleDB的按照存儲(chǔ)量,在互聯(lián)網(wǎng)上的傳輸量和吞吐量收取費(fèi)用。 在2008年12月1日,亞馬遜推出了新的定價(jià)策略,提供了免費(fèi)1 GB的數(shù)據(jù)和25機(jī)器小時(shí)的自由層(Free Tire)。 將其中的數(shù)據(jù)轉(zhuǎn)移到其他亞馬遜網(wǎng)絡(luò)服務(wù)是免費(fèi)的。
    它是一個(gè)可大規(guī)模伸縮、用 Erlang 編寫的高可用數(shù)據(jù)存儲(chǔ)。
    官網(wǎng):http://aws.amazon.com/cn/simpledb/

    三、Vertica

    貢獻(xiàn)者:惠普
    簡(jiǎn)介:惠普2011年2月份起始3月21號(hào)完成收購(gòu)Vertica。Vertica基于列存儲(chǔ)?;诹写鎯?chǔ)的設(shè)計(jì)相比傳統(tǒng)面向行存儲(chǔ)的數(shù)據(jù)庫(kù)具有巨大的優(yōu)勢(shì)。同時(shí)Vertica支持MPP(massively parallel processing)等技術(shù),查詢數(shù)據(jù)時(shí)Vertica只需取得需要的列,而不是被選擇行的所有數(shù)據(jù),其平均性能可提高50x-1000x倍。(查詢性能高速度快)

    Vertica的設(shè)計(jì)者多次表示他們的產(chǎn)品圍繞著高性能和高可用性設(shè)計(jì)。由于對(duì)MPP技術(shù)的支持,可提供對(duì)粒度,可伸縮性和可用性的優(yōu)勢(shì)。每個(gè)節(jié)點(diǎn)完全獨(dú)立運(yùn)作,完全無(wú)共享架構(gòu),降低對(duì)共享資源的系統(tǒng)競(jìng)爭(zhēng)。

    Vertica的數(shù)據(jù)庫(kù)使用標(biāo)準(zhǔn)的SQL查詢,同時(shí)Vertica的架構(gòu)非常適合云計(jì)算,包括虛擬化,分布式多節(jié)點(diǎn)運(yùn)行等,并且可以和Hadoop/MapReduce進(jìn)行集成。

    Vertica官網(wǎng):http://www.vertica.com/

    四、Cassandra

    貢獻(xiàn)者:facebook
     
    簡(jiǎn)介:Cassandra是一套開(kāi)源分布式NoSQL數(shù)據(jù)庫(kù)系統(tǒng)。它最初由Facebook開(kāi)發(fā),用于儲(chǔ)存收件箱等簡(jiǎn)單格式數(shù)據(jù),集GoogleBigTable的數(shù)據(jù)模型與Amazon Dynamo的完全分布式的架構(gòu)于一身Facebook于2008將 Cassandra 開(kāi)源,此后,由于Cassandra良好的可擴(kuò)放性,被Digg、Twitter等知名Web 2.0網(wǎng)站所采納,成為了一種流行的分布式結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)方案。

    Cassandra是一個(gè)混合型的非關(guān)系的數(shù)據(jù)庫(kù),類似于Google的BigTable。其主要功能比Dynamo (分布式的Key-Value存儲(chǔ)系統(tǒng))更豐富,但支持度卻不如文檔存儲(chǔ)MongoDB(介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間的開(kāi)源產(chǎn)品,是非關(guān)系數(shù)據(jù)庫(kù)當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫(kù)的。支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似json的bjson格式,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類型)。Cassandra最初由Facebook開(kāi)發(fā),后轉(zhuǎn)變成了開(kāi)源項(xiàng)目。它是一個(gè)網(wǎng)絡(luò)社交云計(jì)算方面理想的數(shù)據(jù)庫(kù)。以Amazon專有的完全分布式的Dynamo為基礎(chǔ),結(jié)合了Google BigTable基于列族(Column Family)的數(shù)據(jù)模型。P2P去中心化的存儲(chǔ)。很多方面都可以稱之為Dynamo 2.0。

    Cassandra官網(wǎng):http://cassandra.apache.org/

    五、HyperTable

    簡(jiǎn)介:Hypertable是一個(gè)開(kāi)源、高性能、可伸縮的數(shù)據(jù)庫(kù),它采用與Google的Bigtable相似的模型。在過(guò)去數(shù)年中,Google為在PC集群 上運(yùn)行的可伸縮計(jì)算基礎(chǔ)設(shè)施設(shè)計(jì)建造了三個(gè)關(guān)鍵部分。

    第一個(gè)關(guān)鍵的基礎(chǔ)設(shè)施是Google File System(GFS),這是一個(gè)高可用的文件系統(tǒng),提供了一個(gè)全局的命名空間。它通過(guò)跨機(jī)器(和跨機(jī)架)的文件數(shù)據(jù)復(fù)制來(lái)達(dá)到高可用性,并因此免受傳統(tǒng) 文件存儲(chǔ)系統(tǒng)無(wú)法避免的許多失敗的影響,比如電源、內(nèi)存和網(wǎng)絡(luò)端口等失敗。第二個(gè)基礎(chǔ)設(shè)施是名為Map-Reduce的計(jì)算框架,它與GFS緊密協(xié)作,幫 助處理收集到的海量數(shù)據(jù)。第三個(gè)基礎(chǔ)設(shè)施是Bigtable,它是傳統(tǒng)數(shù)據(jù)庫(kù)的替代。Bigtable讓你可以通過(guò)一些主鍵來(lái)組織海量數(shù)據(jù),并實(shí)現(xiàn)高效的 查詢。Hypertable是Bigtable的一個(gè)開(kāi)源實(shí)現(xiàn),并且根據(jù)我們的想法進(jìn)行了一些改進(jìn)。

    HyperTable官網(wǎng):http://hypertable.org/

    六、FoundationDB

    簡(jiǎn)介:支持ACID事務(wù)處理的NoSQL數(shù)據(jù)庫(kù),提供非常好的性能、數(shù)據(jù)一致性和操作彈性。
    2015年1月2日,F(xiàn)oundationDB已經(jīng)發(fā)布了其key-value數(shù)據(jù)庫(kù)的3.0版本,主要專注于可伸縮性和性能上的改善。FoundationDB的CEO David Rosenthal在一篇博客上宣布了新的版本,其中展示了FoundationDB 3.0在可伸縮性方面的數(shù)據(jù),它可以在一個(gè)32位的c3.8xlarge EC2實(shí)例上每秒寫入1440萬(wàn)次;這在性能上是之前版本的36倍。
    除了性能和可伸縮性的改善之外,F(xiàn)oundationDB 3.0還包含了對(duì)監(jiān)控支持的改善。這種監(jiān)控機(jī)制不僅僅是簡(jiǎn)單的機(jī)器檢查,它添加了對(duì)多種潛在的硬件瓶頸的診斷,并且把那些高層級(jí)的信息整合到現(xiàn)有監(jiān)控基礎(chǔ)架構(gòu)中。
    官網(wǎng):https://foundationdb.com/

    七:HBase

    貢獻(xiàn)者: Fay Chang 所撰寫的“Bigtable
     
    簡(jiǎn)介:HBase是一個(gè)分布式的、面向列的開(kāi)源數(shù)據(jù)庫(kù),該技術(shù)來(lái)源于 Fay Chang 所撰寫的Google論文“Bigtable:一個(gè)結(jié)構(gòu)化數(shù)據(jù)的分布式存儲(chǔ)系統(tǒng)”。就像Bigtable利用了Google文件系統(tǒng)(File System)所提供的分布式數(shù)據(jù)存儲(chǔ)一樣,HBase在Hadoop之上提供了類似于Bigtable的能力。HBase是Apache的Hadoop項(xiàng)目的子項(xiàng)目。HBase不同于一般的關(guān)系數(shù)據(jù)庫(kù),它是一個(gè)適合于非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)庫(kù)。另一個(gè)不同的是HBase基于列的而不是基于行的模式。
    官網(wǎng):http://hbase.apache.org/


    文件存儲(chǔ)

    一、CouchDB
    簡(jiǎn)介:CouchDB是用Erlang開(kāi)發(fā)的面向文檔的數(shù)據(jù)庫(kù)系統(tǒng),最近剛剛發(fā)布了1.0版本(2010年7月14日)。CouchDB不是一個(gè)傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù),而是面向文檔的數(shù)據(jù)庫(kù),其數(shù)據(jù)存儲(chǔ)方式有點(diǎn)類似lucene的index文件格式,CouchDB最大的意義在于它是一個(gè)面向web應(yīng)用的新一代存儲(chǔ)系統(tǒng),事實(shí)上,CouchDB的口號(hào)就是:下一代的Web應(yīng)用存儲(chǔ)系統(tǒng)。

    特點(diǎn):

    一、CouchDB是分布式的數(shù)據(jù)庫(kù),他可以把存儲(chǔ)系統(tǒng)分布到n臺(tái)物理的節(jié)點(diǎn)上面,并且很好的協(xié)調(diào)和同步節(jié)點(diǎn)之間的數(shù)據(jù)讀寫一致性。這當(dāng)然也得靠Erlang無(wú)與倫比的并發(fā)特性才能做到。對(duì)于基于web的大規(guī)模應(yīng)用文檔應(yīng)用,分布式可以讓它不必像傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)那樣分庫(kù)拆表,在應(yīng)用代碼層進(jìn)行大量的改動(dòng)。
    二、CouchDB是面向文檔的數(shù)據(jù)庫(kù),存儲(chǔ)半結(jié)構(gòu)化的數(shù)據(jù),比較類似lucene的index結(jié)構(gòu),特別適合存儲(chǔ)文檔,因此很適合CMS,電話本,地址本等應(yīng)用,在這些應(yīng)用場(chǎng)合,文檔數(shù)據(jù)庫(kù)要比關(guān)系數(shù)據(jù)庫(kù)更加方便,性能更好。
    三、CouchDB支持REST API,可以讓用戶使用JavaScript來(lái)操作CouchDB數(shù)據(jù)庫(kù),也可以用JavaScript編寫查詢語(yǔ)句,我們可以想像一下,用AJAX技術(shù)結(jié)合CouchDB開(kāi)發(fā)出來(lái)的CMS系統(tǒng)會(huì)是多么的簡(jiǎn)單和方便。
    其實(shí)CouchDB只是Erlang應(yīng)用的冰山一角,在最近幾年,基于Erlang的應(yīng)用也得到的蓬勃的發(fā)展,特別是在基于web的大規(guī)模,分布式應(yīng)用領(lǐng)域,幾乎都是Erlang的優(yōu)勢(shì)項(xiàng)目。
    官網(wǎng):http://couchdb.apache.org/

     

    二、MongoDB
    簡(jiǎn)介:MongoDB 是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù)。由C++語(yǔ)言編寫。旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。
    MongoDB是一個(gè)介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫(kù)當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫(kù)的。他支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似json的bson格式,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類型。Mongo最大的特點(diǎn)是他支持的查詢語(yǔ)言非常強(qiáng)大,其語(yǔ)法有點(diǎn)類似于面向?qū)ο蟮牟樵冋Z(yǔ)言,幾乎可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫(kù)單表查詢的絕大部分功能,而且還支持對(duì)數(shù)據(jù)建立索引。
    相關(guān)文章:MongoDB的基本特性與內(nèi)部構(gòu)造  大數(shù)據(jù)吃香 創(chuàng)業(yè)公司MongoDB估值達(dá)16億美元
     
    特點(diǎn)
    它的特點(diǎn)是高性能、易部署、易使用,存儲(chǔ)數(shù)據(jù)非常方便。主要功能特性有:
    *面向集合存儲(chǔ),易存儲(chǔ)對(duì)象類型的數(shù)據(jù)。
    mongodb集群參考
    mongodb集群參考
    *模式自由。
    *支持動(dòng)態(tài)查詢。
    *支持完全索引,包含內(nèi)部對(duì)象。
    *支持查詢。
    *支持復(fù)制和故障恢復(fù)。
    *使用高效的二進(jìn)制數(shù)據(jù)存儲(chǔ),包括大型對(duì)象(如視頻等)。
    *自動(dòng)處理碎片,以支持云計(jì)算層次的擴(kuò)展性。
    *支持RUBY,PYTHON,JAVA,C++,PHP,C#等多種語(yǔ)言。
    *文件存儲(chǔ)格式為BSON(一種JSON的擴(kuò)展)。
    *可通過(guò)網(wǎng)絡(luò)訪問(wèn)。
    官網(wǎng):https://www.mongodb.org/

    三、Tachyon

    貢獻(xiàn)者:Haoyuan Li(李浩源)

    簡(jiǎn)介:Tachyon是一個(gè)分布式內(nèi)存文件系統(tǒng),可以在集群里以訪問(wèn)內(nèi)存的速度來(lái)訪問(wèn)存在tachyon里的文件。把Tachyon是架構(gòu)在最底層的分布式文件存儲(chǔ)和上層的各種計(jì)算框架之間的一種中間件。主要職責(zé)是將那些不需要落地到DFS里的文件,落地到分布式內(nèi)存文件系統(tǒng)中,來(lái)達(dá)到共享內(nèi)存,從而提高效率。同時(shí)可以減少內(nèi)存冗余,GC時(shí)間等。

    Tachyon架構(gòu)

    Tachyon的架構(gòu)是傳統(tǒng)的Master—slave架構(gòu),這里和Hadoop類似,TachyonMaster里WorkflowManager是 Master進(jìn)程,因?yàn)槭菫榱朔乐箚吸c(diǎn)問(wèn)題,通過(guò)Zookeeper做了HA,可以部署多臺(tái)Standby Master。Slave是由Worker Daemon和Ramdisk構(gòu)成。這里個(gè)人理解只有Worker Daemon是基于JVM的,Ramdisk是一個(gè)off heap memory。Master和Worker直接的通訊協(xié)議是Thrift。
    下圖來(lái)自Tachyon的作者Haoyuan Li:
     
    下載地址:https://github.com/amplab/tachyon

    四、KFS

    簡(jiǎn)介:GFS的C++開(kāi)源版本,Kosmos distributed file system (KFS)是一個(gè)專門為數(shù)據(jù)密集型應(yīng)用(搜索引擎,數(shù)據(jù)挖掘等)而設(shè)計(jì)的存儲(chǔ)系統(tǒng),類似于Google的GFS和Hadoop的HDFS分布式文件系統(tǒng)。 KFS使用C++實(shí)現(xiàn),支持的客戶端包括C++,Java和Python。KFS系統(tǒng)由三部分組成,分別是metaserver、chunkserver和client library。
    官網(wǎng):http://code.google.com/p/kosmosfs/

    五、HDFS

    簡(jiǎn)介:Hadoop分布式文件系統(tǒng)(HDFS)被設(shè)計(jì)成適合運(yùn)行在通用硬件(commodity hardware)上的分布式文件系統(tǒng)。它和現(xiàn)有的分布式文件系統(tǒng)有很多共同點(diǎn)。但同時(shí),它和其他的分布式文件系統(tǒng)的區(qū)別也是很明顯的。HDFS是一個(gè)高度容錯(cuò)性的系統(tǒng),適合部署在廉價(jià)的機(jī)器上。HDFS能提供高吞吐量的數(shù)據(jù)訪問(wèn),非常適合大規(guī)模數(shù)據(jù)集上的應(yīng)用。HDFS放寬了一部分POSIX約束,來(lái)實(shí)現(xiàn)流式讀取文件系統(tǒng)數(shù)據(jù)的目的。HDFS在最開(kāi)始是作為Apache Nutch搜索引擎項(xiàng)目的基礎(chǔ)架構(gòu)而開(kāi)發(fā)的。HDFS是Apache Hadoop Core項(xiàng)目的一部分。
    官網(wǎng):http://hadoop.apache.org/


    資源管理

    一、Twitter Mesos
    開(kāi)發(fā)者:Twitter研發(fā)人員John Oskasson

    簡(jiǎn)介:Apache Mesos是由加州大學(xué)伯克利分校的AMPLab首先開(kāi)發(fā)的一款開(kāi)源群集管理軟件,支持Hadoop、ElasticSearch、Spark、Storm 和Kafka等架構(gòu),由于其開(kāi)源性質(zhì)越來(lái)越受到一些大型云計(jì)算公司的青睞,例如Twitter、Facebook等。

    官網(wǎng):http://mesos.apache.org/

    二、Hadoop Yarn

    Hadoop 新 MapReduce 框架 Yarn。為從根本上解決舊 MapReduce 框架的性能瓶頸,促進(jìn) Hadoop 框架的更長(zhǎng)遠(yuǎn)發(fā)展,從 0.23.0 版本開(kāi)始,Hadoop 的 MapReduce 框架完全重構(gòu),發(fā)生了根本的變化。新的 Hadoop MapReduce 框架命名為 MapReduceV2 或者叫 Yarn,其架構(gòu)圖如下圖所示:
     
    Yarn 框架相對(duì)于老的 MapReduce 框架什么優(yōu)勢(shì)呢?我們可以看到:

    1、這個(gè)設(shè)計(jì)大大減小了 JobTracker(也就是現(xiàn)在的 ResourceManager)的資源消耗,并且讓監(jiān)測(cè)每一個(gè) Job 子任務(wù) (tasks) 狀態(tài)的程序分布式化了,更安全、更優(yōu)美。

    2、在新的 Yarn 中,ApplicationMaster 是一個(gè)可變更的部分,用戶可以對(duì)不同的編程模型寫自己的 AppMst,讓更多類型的編程模型能夠跑在 Hadoop 集群中,可以參考 hadoop Yarn 官方配置模板中的 mapred-site.xml 配置。
    3、對(duì)于資源的表示以內(nèi)存為單位 ( 在目前版本的 Yarn 中,沒(méi)有考慮 cpu 的占用 ),比之前以剩余 slot 數(shù)目更合理。
    4、老的框架中,JobTracker 一個(gè)很大的負(fù)擔(dān)就是監(jiān)控 job 下的 tasks 的運(yùn)行狀況,現(xiàn)在,這個(gè)部分就扔給 ApplicationMaster 做了,而 ResourceManager 中有一個(gè)模塊叫做 ApplicationsMasters( 注意不是 ApplicationMaster),它是監(jiān)測(cè) ApplicationMaster 的行狀況,如果出問(wèn)題,會(huì)將其在其他機(jī)器上重啟。
    5、Container 是 Yarn 為了將來(lái)作資源隔離而提出的一個(gè)框架。這一點(diǎn)應(yīng)該借鑒了 Mesos 的工作,目前是一個(gè)框架,僅僅提供 java 虛擬機(jī)內(nèi)存的隔離 ,hadoop 團(tuán)隊(duì)的設(shè)計(jì)思路應(yīng)該后續(xù)能支持更多的資源調(diào)度和控制 , 既然資源表示成內(nèi)存量,那就沒(méi)有了之前的 map slot/reduce slot 分開(kāi)造成集群資源閑置的尷尬情況。
    官網(wǎng):http://hadoop.apache.org/

    接上一部分:這部分主要收集整理的內(nèi)容主要有日志收集系統(tǒng)、消息系統(tǒng)、分布式服務(wù)、集群管理、RPC、基礎(chǔ)設(shè)施、搜索引擎、Iaas和監(jiān)控管理等大數(shù)據(jù)開(kāi)源工具。

    日志收集系統(tǒng)

    一、Facebook Scribe
     
    貢獻(xiàn)者:Facebook
    簡(jiǎn)介:Scribe是Facebook開(kāi)源的日志收集系統(tǒng),在Facebook內(nèi)部已經(jīng)得到大量的應(yīng)用。它能夠從各種日志源上收集日志,存儲(chǔ)到一個(gè)中央存儲(chǔ)系統(tǒng)(可以是NFS,分布式文件系統(tǒng)等)上,以便于進(jìn)行集中統(tǒng)計(jì)分析處理。它為日志的“分布式收集,統(tǒng)一處理”提供了一個(gè)可擴(kuò)展的,高容錯(cuò)的方案。當(dāng)中央存儲(chǔ)系統(tǒng)的網(wǎng)絡(luò)或者機(jī)器出現(xiàn)故障時(shí),scribe會(huì)將日志轉(zhuǎn)存到本地或者另一個(gè)位置,當(dāng)中央存儲(chǔ)系統(tǒng)恢復(fù)后,scribe會(huì)將轉(zhuǎn)存的日志重新傳輸給中央存儲(chǔ)系統(tǒng)。其通常與Hadoop結(jié)合使用,scribe用于向HDFS中push日志,而Hadoop通過(guò)MapReduce作業(yè)進(jìn)行定期處理。

    Scribe的系統(tǒng)架構(gòu)

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

    二、Cloudera Flume

    貢獻(xiàn)者:Cloudera

    簡(jiǎn)介:Flume是Cloudera提供的一個(gè)高可用的,高可靠的,分布式的海量日志采集、聚合和傳輸?shù)南到y(tǒng),F(xiàn)lume支持在日志系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方,用于收集數(shù)據(jù);同時(shí),F(xiàn)lume提供對(duì)數(shù)據(jù)進(jìn)行簡(jiǎn)單處理,并寫到各種數(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ù)的能力。
    當(dāng)前Flume有兩個(gè)版本Flume 0.9X版本的統(tǒng)稱Flume-og,F(xiàn)lume1.X版本的統(tǒng)稱Flume-ng。由于Flume-ng經(jīng)過(guò)重大重構(gòu),與Flume-og有很大不同,使用時(shí)請(qǐng)注意區(qū)分。
    Cloudera Flume構(gòu)架:
     
    官網(wǎng):http://flume.apache.org/

    三、logstash

    簡(jiǎn)介:logstash 是一個(gè)應(yīng)用程序日志、事件的傳輸、處理、管理和搜索的平臺(tái)。你可以用它來(lái)統(tǒng)一對(duì)應(yīng)用程序日志進(jìn)行收集管理,提供 Web 接口用于查詢和統(tǒng)計(jì)。他可以對(duì)你的日志進(jìn)行收集、分析,并將其存儲(chǔ)供以后使用(如,搜索),您可以使用它。說(shuō)到搜索,logstash帶有一個(gè)web界面,搜索和展示所有日志。

    官網(wǎng):http://www.logstash.net/

     

    四、kibana
    簡(jiǎn)介:Kibana 是一個(gè)為 Logstash 和 ElasticSearch 提供的日志分析的 Web 接口??墒褂盟鼘?duì)日志進(jìn)行高效的搜索、可視化、分析等各種操作。kibana 也是一個(gè)開(kāi)源和免費(fèi)的工具,他可以幫助您匯總、分析和搜索重要數(shù)據(jù)日志并提供友好的web界面。他可以為 Logstash 和 ElasticSearch 提供的日志分析的 Web 界面。
    主頁(yè): http://kibana.org/
    代碼托管: https://github.com/rashidkpc/Kibana/downloads


    消息系統(tǒng)

    一、StormMQ
    簡(jiǎn)介:MQMessageQueue消息隊(duì)列產(chǎn)品 StormMQ,是一種服務(wù)程序。
    官網(wǎng):http://stormmq.com/

    二、ZeroMQ

    簡(jiǎn)介:這是個(gè)類似于Socket的一系列接口,他跟Socket的區(qū)別是:普通的socket是端到端的(1:1的關(guān)系),而ZMQ卻是可以N:M 的關(guān)系,人們對(duì)BSD套接字的了解較多的是點(diǎn)對(duì)點(diǎn)的連接,點(diǎn)對(duì)點(diǎn)連接需要顯式地建立連接、銷毀連接、選擇協(xié)議(TCP/UDP)和處理錯(cuò)誤等,而ZMQ屏蔽了這些細(xì)節(jié),讓你的網(wǎng)絡(luò)編程更為簡(jiǎn)單。ZMQ用于node與node間的通信,node可以是主機(jī)或者是進(jìn)程。
    引用官方的說(shuō)法: “ZMQ(以下ZeroMQ簡(jiǎn)稱ZMQ)是一個(gè)簡(jiǎn)單好用的傳輸層,像框架一樣的一個(gè)socket library,他使得Socket編程更加簡(jiǎn)單、簡(jiǎn)潔和性能更高。是一個(gè)消息處理隊(duì)列庫(kù),可在多個(gè)線程、內(nèi)核和主機(jī)盒之間彈性伸縮。ZMQ的明確目標(biāo)是“成為標(biāo)準(zhǔn)網(wǎng)絡(luò)協(xié)議棧的一部分,之后進(jìn)入Linux內(nèi)核”?,F(xiàn)在還未看到它們的成功。但是,它無(wú)疑是極具前景的、并且是人們更加需要的“傳統(tǒng)”BSD套接字之上的一 層封裝。ZMQ讓編寫高性能網(wǎng)絡(luò)應(yīng)用程序極為簡(jiǎn)單和有趣。”
    官網(wǎng):http://zeromq.org/

    三、RabbitMQ

    簡(jiǎn)介:RabbitMQ是一個(gè)受歡迎的消息代理,通常用于應(yīng)用程序之間或者程序的不同組件之間通過(guò)消息來(lái)進(jìn)行集成。本文簡(jiǎn)單介紹了如何使用 RabbitMQ,假定你已經(jīng)配置好了rabbitmq服務(wù)器。

    RabbitMQ是用Erlang,對(duì)于主要的編程語(yǔ)言都有驅(qū)動(dòng)或者客戶端。我們這里要用的是Java,所以先要獲得Java客戶端。

    像RabbitMQ這樣的消息代理可用來(lái)模擬不同的場(chǎng)景,例如點(diǎn)對(duì)點(diǎn)的消息分發(fā)或者訂閱/推送。我們的程序足夠簡(jiǎn)單,有兩個(gè)基本的組件,一個(gè)生產(chǎn)者用于產(chǎn)生消息,還有一個(gè)消費(fèi)者用來(lái)使用產(chǎn)生的消息。
    官網(wǎng):https://www.rabbitmq.com/

    四、Apache ActiveMQ

    簡(jiǎn)介:ActiveMQ 是Apache出品,最流行的,能力強(qiáng)勁的開(kāi)源消息總線。ActiveMQ 是一個(gè)完全支持JMS1.1和J2EE 1.4規(guī)范的 JMS Provider實(shí)現(xiàn),盡管JMS規(guī)范出臺(tái)已經(jīng)是很久的事情了,但是JMS在當(dāng)今的J2EE應(yīng)用中間仍然扮演著特殊的地位。
     
    特性:
    ⒈ 多種語(yǔ)言和協(xié)議編寫客戶端。語(yǔ)言: Java,C,C++,C#,Ruby,Perl,Python,PHP。應(yīng)用協(xié)議: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
    ⒉ 完全支持JMS1.1和J2EE 1.4規(guī)范 (持久化,XA消息,事務(wù))
    ⒊ 對(duì)Spring的支持,ActiveMQ可以很容易內(nèi)嵌到使用Spring的系統(tǒng)里面去,而且也支持Spring2.0的特性
    ⒋ 通過(guò)了常見(jiàn)J2EE服務(wù)器(如 Geronimo,JBoss 4,GlassFish,WebLogic)的測(cè)試,其中通過(guò)JCA 1.5 resource adaptors的配置,可以讓ActiveMQ可以自動(dòng)的部署到任何兼容J2EE 1.4 商業(yè)服務(wù)器上
    ⒌ 支持多種傳送協(xié)議:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
    ⒍ 支持通過(guò)JDBC和journal提供高速的消息持久化
    ⒎ 從設(shè)計(jì)上保證了高性能的集群,客戶端-服務(wù)器,點(diǎn)對(duì)點(diǎn)
    ⒏ 支持Ajax
    ⒐ 支持與Axis的整合
    ⒑ 可以很容易得調(diào)用內(nèi)嵌JMS provider,進(jìn)行測(cè)試
    官網(wǎng):http://activemq.apache.org/

    五、Jafka

    貢獻(xiàn)者:LinkedIn
    簡(jiǎn)介:Jafka 是一個(gè)開(kāi)源的、高性能的、跨語(yǔ)言分布式消息系統(tǒng),使用GitHub托管。Jafka 最早是由Apache孵化的Kafka(由LinkedIn捐助給Apache)克隆而來(lái)。由于是一個(gè)開(kāi)放式的數(shù)據(jù)傳輸協(xié)議,因此除了Java開(kāi)發(fā)語(yǔ)言受到支持,Python、Ruby、C、C++等其他語(yǔ)言也能夠很好的得到支持。
    特性:
    1、消息持久化非常快,服務(wù)端存儲(chǔ)消息的開(kāi)銷為O(1),并且基于文件系統(tǒng),能夠持久化TB級(jí)的消息而不損失性能。
    2、吞吐量取決于網(wǎng)絡(luò)帶寬。
    3、完全的分布式系統(tǒng),broker、producer、consumer都原生自動(dòng)支持分布式。自動(dòng)實(shí)現(xiàn)復(fù)雜均衡。
    4、內(nèi)核非常小,整個(gè)系統(tǒng)(包括服務(wù)端和客戶端)只有一個(gè)272KB的jar包,內(nèi)部機(jī)制也不復(fù)雜,適合進(jìn)行內(nèi)嵌或者二次開(kāi)發(fā) 。整個(gè)服務(wù)端加上依賴組件共3.5MB。
    5、消息格式以及通信機(jī)制非常簡(jiǎn)單,適合進(jìn)行跨語(yǔ)言開(kāi)發(fā)。目前自帶的Python3.x的客戶端支持發(fā)送消息和接收消息。
    官網(wǎng):http://kafka.apache.org/

    六、Apache Kafka

    貢獻(xiàn)者:LinkedIn
    簡(jiǎn)介:Apache Kafka是由Apache軟件基金會(huì)開(kāi)發(fā)的一個(gè)開(kāi)源消息系統(tǒng)項(xiàng)目,由Scala寫成。Kafka最初是由LinkedIn開(kāi)發(fā),并于2011年初開(kāi)源。2012年10月從Apache Incubator畢業(yè)。該項(xiàng)目的目標(biāo)是為處理實(shí)時(shí)數(shù)據(jù)提供一個(gè)統(tǒng)一、高通量、低等待的平臺(tái)。
    Kafka是一個(gè)分布式的、分區(qū)的、多復(fù)本的日志提交服務(wù)。它通過(guò)一種獨(dú)一無(wú)二的設(shè)計(jì)提供了一個(gè)消息系統(tǒng)的功能。
    Kafka集群可以在一個(gè)指定的時(shí)間內(nèi)保持所有發(fā)布上來(lái)的消息,不管這些消息有沒(méi)有被消費(fèi)。打個(gè)比方,如果這個(gè)時(shí)間設(shè)置為兩天,那么在消息發(fā)布的兩天以內(nèi),這條消息都是可以被消費(fèi)的,但是在兩天后,這條消息就會(huì)被系統(tǒng)丟棄以釋放空間。Kafka的性能不會(huì)受數(shù)據(jù)量的大小影響,因此保持大量的數(shù)據(jù)不是一個(gè)問(wèn)題。
    官網(wǎng):http://kafka.apache.org/


    分布式服務(wù)

    一、ZooKeeper
    貢獻(xiàn)者:Google
    簡(jiǎn)介:ZooKeeper是一個(gè)分布式的,開(kāi)放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是Google的Chubby一個(gè)開(kāi)源的實(shí)現(xiàn),是Hadoop和Hbase的重要組件。它是一個(gè)為分布式應(yīng)用提供一致性服務(wù)的軟件,提供的功能包括:配置維護(hù)、名字服務(wù)、分布式同步、組服務(wù)等。
    ZooKeeper是以Fast Paxos算法為基礎(chǔ)的,paxos算法存在活鎖的問(wèn)題,即當(dāng)有多個(gè)proposer交錯(cuò)提交時(shí),有可能互相排斥導(dǎo)致沒(méi)有一個(gè)proposer能提交成功,而Fast Paxos作了一些優(yōu)化,通過(guò)選舉產(chǎn)生一個(gè)leader,只有l(wèi)eader才能提交propose,具體算法可見(jiàn)Fast Paxos。因此,要想弄懂ZooKeeper首先得對(duì)Fast Paxos有所了解。
    架構(gòu):
     
    官網(wǎng):http://zookeeper.apache.org/


    RPC

    (Remote Procedure Call Protocol)——遠(yuǎn)程過(guò)程調(diào)用協(xié)議
    一、Apache Avro
    簡(jiǎn)介:Apache Avro是Hadoop下的一個(gè)子項(xiàng)目。它本身既是一個(gè)序列化框架,同時(shí)也實(shí)現(xiàn)了RPC的功能。Avro官網(wǎng)描述Avro的特性和功能如下:
    • 豐富的數(shù)據(jù)結(jié)構(gòu)類型;
    • 快速可壓縮的二進(jìn)制數(shù)據(jù)形式;
    • 存儲(chǔ)持久數(shù)據(jù)的文件容器;
    • 提供遠(yuǎn)程過(guò)程調(diào)用RPC;
    • 簡(jiǎn)單的動(dòng)態(tài)語(yǔ)言結(jié)合功能。
    相比于Apache Thrift 和Google的Protocol Buffers,Apache Avro具有以下特點(diǎn):
    • 支持動(dòng)態(tài)模式。Avro不需要生成代碼,這有利于搭建通用的數(shù)據(jù)處理系統(tǒng),同時(shí)避免了代碼入侵。
    • 數(shù)據(jù)無(wú)須加標(biāo)簽。讀取數(shù)據(jù)前,Avro能夠獲取模式定義,這使得Avro在數(shù)據(jù)編碼時(shí)只需要保留更少的類型信息,有利于減少序列化后的數(shù)據(jù)大小。
    官網(wǎng):http://avro.apache.org/

    二、Facebook Thrift

    貢獻(xiàn)者:Facebook
    簡(jiǎn)介:Thrift源于大名鼎鼎的facebook之手,在2007年facebook提交Apache基金會(huì)將Thrift作為一個(gè)開(kāi)源項(xiàng)目,對(duì)于當(dāng)時(shí)的facebook來(lái)說(shuō)創(chuàng)造thrift是為了解決facebook系統(tǒng)中各系統(tǒng)間大數(shù)據(jù)量的傳輸通信以及系統(tǒng)之間語(yǔ)言環(huán)境不同需要跨平臺(tái)的特性。
    thrift可以支持多種程序語(yǔ)言,例如: C++, C#, Cocoa, Erlang, Haskell, Java, Ocami, Perl, PHP, Python, Ruby, Smalltalk. 在多種不同的語(yǔ)言之間通信thrift可以作為二進(jìn)制的高性能的通訊中間件,支持?jǐn)?shù)據(jù)(對(duì)象)序列化和多種類型的RPC服務(wù)。
    Thrift適用于程序?qū)Τ?序靜態(tài)的數(shù)據(jù)交換,需要先確定好他的數(shù)據(jù)結(jié)構(gòu),他是完全靜態(tài)化的,當(dāng)數(shù)據(jù)結(jié)構(gòu)發(fā)生變化時(shí),必須重新編輯IDL文件,代碼生成,再編譯載入的流程,跟其他IDL工具相比較可以視為是Thrift的弱項(xiàng),Thrift適用于搭建大型數(shù)據(jù)交換及存儲(chǔ)的通用工具,對(duì)于大型系統(tǒng)中的內(nèi)部數(shù)據(jù)傳輸相對(duì)于JSON和xml無(wú)論在性能、傳輸大小上有明顯的優(yōu)勢(shì)。
    Thrift 主要由5個(gè)部分組成:
    · 類型系統(tǒng)以及 IDL 編譯器:負(fù)責(zé)由用戶給定的 IDL 文件生成相應(yīng)語(yǔ)言的接口代碼
    · TProtocol:實(shí)現(xiàn) RPC 的協(xié)議層,可以選擇多種不同的對(duì)象串行化方式,如 JSON, Binary。
    · TTransport:實(shí)現(xiàn) RPC 的傳輸層,同樣可以選擇不同的傳輸層實(shí)現(xiàn),如socket, 非阻塞的 socket, MemoryBuffer 等。
    · TProcessor:作為協(xié)議層和用戶提供的服務(wù)實(shí)現(xiàn)之間的紐帶,負(fù)責(zé)調(diào)用服務(wù)實(shí)現(xiàn)的接口。
    · TServer:聚合 TProtocol, TTransport 和 TProcessor 幾個(gè)對(duì)象。
    上述的這5個(gè)部件都是在 Thrift 的源代碼中通過(guò)為不同語(yǔ)言提供庫(kù)來(lái)實(shí)現(xiàn)的,這些庫(kù)的代碼在 Thrift 源碼目錄的 lib 目錄下面,在使用 Thrift 之前需要先熟悉與自己的語(yǔ)言對(duì)應(yīng)的庫(kù)提供的接口。
    Facebook Thrift構(gòu)架:
     
    官網(wǎng):http://thrift.apache.org/

    集群管理

    一、Nagios

    簡(jiǎn)介:Nagios是一款開(kāi)源的免費(fèi)網(wǎng)絡(luò)監(jiān)視工具,能有效監(jiān)控Windows、Linux和Unix的主機(jī)狀態(tài),交換機(jī)路由器等網(wǎng)絡(luò)設(shè)置,打印機(jī)等。在系統(tǒng)或服務(wù)狀態(tài)異常時(shí)發(fā)出郵件或短信報(bào)警第一時(shí)間通知網(wǎng)站運(yùn)維人員,在狀態(tài)恢復(fù)后發(fā)出正常的郵件或短信通知。
    Nagios可運(yùn)行在Linux/Unix平臺(tái)之上,同時(shí)提供一個(gè)可選的基于瀏覽器的WEB界面以方便系統(tǒng)管理人員查看網(wǎng)絡(luò)狀態(tài),各種系統(tǒng)問(wèn)題,以及日志等等。
    官網(wǎng):http://www.nagios.org/

    二、Ganglia

    簡(jiǎn)介:Ganglia是UC Berkeley發(fā)起的一個(gè)開(kāi)源集群監(jiān)視項(xiàng)目,設(shè)計(jì)用于測(cè)量數(shù)以千計(jì)的節(jié)點(diǎn)。Ganglia的核心包含gmond、gmetad以及一個(gè)Web前端。主要是用來(lái)監(jiān)控系統(tǒng)性能,如:cpu 、mem、硬盤利用率, I/O負(fù)載、網(wǎng)絡(luò)流量情況等,通過(guò)曲線很容易見(jiàn)到每個(gè)節(jié)點(diǎn)的工作狀態(tài),對(duì)合理調(diào)整、分配系統(tǒng)資源,提高系統(tǒng)整體性能起到重要作用。
     
    官網(wǎng):http://ganglia.sourceforge.net/

    三、Apache Ambari

    簡(jiǎn)介:Apache Ambari是一種基于Web的工具,支持Apache Hadoop集群的供應(yīng)、管理和監(jiān)控。Ambari目前已支持大多數(shù)Hadoop組件,包括HDFS、MapReduce、Hive、Pig、 Hbase、Zookeper、Sqoop和Hcatalog等。

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

    Ambari主要取得了以下成績(jī):

    • 通過(guò)一步一步的安裝向?qū)Ш?jiǎn)化了集群供應(yīng)。
    • 預(yù)先配置好關(guān)鍵的運(yùn)維指標(biāo)(metrics),可以直接查看Hadoop Core(HDFS和MapReduce)及相關(guān)項(xiàng)目(如HBase、Hive和HCatalog)是否健康。
    • 支持作業(yè)與任務(wù)執(zhí)行的可視化與分析,能夠更好地查看依賴和性能。
    • 通過(guò)一個(gè)完整的RESTful API把監(jiān)控信息暴露出來(lái),集成了現(xiàn)有的運(yùn)維工具。
    • 用戶界面非常直觀,用戶可以輕松有效地查看信息并控制集群。
    Ambari使用Ganglia收集度量指標(biāo),用Nagios支持系統(tǒng)報(bào)警,當(dāng)需要引起管理員的關(guān)注時(shí)(比如,節(jié)點(diǎn)停機(jī)或磁盤剩余空間不足等問(wèn)題),系統(tǒng)將向其發(fā)送郵件。
    此外,Ambari能夠安裝安全的(基于Kerberos)Hadoop集群,以此實(shí)現(xiàn)了對(duì)Hadoop 安全的支持,提供了基于角色的用戶認(rèn)證、授權(quán)和審計(jì)功能,并為用戶管理集成了LDAP和Active Directory。
    官網(wǎng):http://ambari.apache.org/


    基礎(chǔ)設(shè)施

    一、LevelDB
    貢獻(xiàn)者:Jeff Dean和Sanjay Ghemawat
    簡(jiǎn)介:Leveldb是一個(gè)google實(shí)現(xiàn)的非常高效的kv數(shù)據(jù)庫(kù),目前的版本1.2能夠支持billion級(jí)別的數(shù)據(jù)量了。 在這個(gè)數(shù)量級(jí)別下還有著非常高的性能,主要?dú)w功于它的良好的設(shè)計(jì)。特別是LMS算法。LevelDB 是單進(jìn)程的服務(wù),性能非常之高,在一臺(tái)4核Q6600的CPU機(jī)器上,每秒鐘寫數(shù)據(jù)超過(guò)40w,而隨機(jī)讀的性能每秒鐘超過(guò)10w。
    Leveldb框架:
     
    官網(wǎng):http://code.google.com/p/leveldb/

    二、SSTable

    簡(jiǎn)介:如果說(shuō)Protocol Buffer是谷歌獨(dú)立數(shù)據(jù)記錄的通用語(yǔ)言 ,那么有序字符串表(SSTable,Sorted String Table)則是用于存儲(chǔ),處理和數(shù)據(jù)集交換的最流行??的數(shù)據(jù)輸出格式。正如它的名字本身,SSTable是有效存儲(chǔ)大量鍵-值對(duì)的簡(jiǎn)單抽象,對(duì)高吞吐量順序讀/寫進(jìn)行了優(yōu)化。
    SSTable是Bigtable中至關(guān)重要的一塊,對(duì)于LevelDB來(lái)說(shuō)也是如此。

    三、RecordIO

    貢獻(xiàn)者:Google
    簡(jiǎn)介:我們大家都在用文件來(lái)存儲(chǔ)數(shù)據(jù)。文件是存儲(chǔ)在磁盤上的。如果在一些不穩(wěn)定的介質(zhì)上,文件很容損壞。即時(shí)文件某個(gè)位置出現(xiàn)一點(diǎn)小小的問(wèn)題,整個(gè)文件就廢了。
    下面我來(lái)介紹Google的一個(gè)做法,可以比較好的解決這個(gè)問(wèn)題。那就是recordio文件格式。recoidio的存儲(chǔ)單元是一個(gè)一個(gè)record。這個(gè)record可以根據(jù)業(yè)務(wù)的需要自行定義。但Google有一種建議的處理方式就是使用protobuf。
    reocordio底層的格式其實(shí)很簡(jiǎn)單。一個(gè)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.
    詳細(xì)格式如下圖所示:
     
    到這里,大家可能已經(jīng)知道,recordio之所以能對(duì)付壞數(shù)據(jù),其實(shí)就是在這個(gè)MagicNumber(校驗(yàn)值)。

    四、Flat Buffers

    貢獻(xiàn)者:Google
    簡(jiǎn)介:谷歌開(kāi)源高效、跨平臺(tái)的序列化庫(kù)FlatBuffers。
    該庫(kù)的構(gòu)建是專門為游戲開(kāi)發(fā)人員的性能需求提供支持,它將序列化數(shù)據(jù)存儲(chǔ)在緩存中,這些數(shù)據(jù)既可以存儲(chǔ)在文件中,又可以通過(guò)網(wǎng)絡(luò)原樣傳輸,而不需要任何解析開(kāi)銷。
    FlatBuffers有如下一些關(guān)鍵特性——
    • 訪問(wèn)序列化數(shù)據(jù)不需要打包/拆包
    • 節(jié)省內(nèi)存而且訪問(wèn)速度快——緩存只占用訪問(wèn)數(shù)據(jù)所需要的內(nèi)存;不需要任何額外的內(nèi)存。
    • 靈活性——通過(guò)可選字段向前向后兼容
    • 代碼規(guī)模小
    • 強(qiáng)類型——錯(cuò)誤在編譯時(shí)捕獲,而不是在運(yùn)行時(shí)
    • 便利性——生成的C++頭文件代碼簡(jiǎn)潔。如果需要,有一項(xiàng)可選功能可以用來(lái)在運(yùn)行時(shí)高效解析Schema和JSON-like格式的文本。
    • 跨平臺(tái)——使用C++編寫,不依賴STL之外的庫(kù),因此可以用于任何有C++編輯器的平臺(tái)。當(dāng)前,該項(xiàng)目包含構(gòu)建方法和在Android、Linux、Windows和OSX等操作系統(tǒng)上使用該庫(kù)的示例。
    與Protocol Buffers或JSON Parsing這樣的可選方案相比,F(xiàn)latBuffers的優(yōu)勢(shì)在于開(kāi)銷更小,這主要是由于它沒(méi)有解析過(guò)程。
    代碼托管:https://github.com/google/flatbuffers

    五、Protocol Buffers

    貢獻(xiàn)者:Google
    簡(jiǎn)介:Protocol Buffers是Google公司開(kāi)發(fā)的一種數(shù)據(jù)描述語(yǔ)言,類似于XML能夠?qū)⒔Y(jié)構(gòu)化數(shù)據(jù)序列化,可用于數(shù)據(jù)存儲(chǔ)、通信協(xié)議等方面。它不依賴于語(yǔ)言和平臺(tái)并且可擴(kuò)展性極強(qiáng)?,F(xiàn)階段官方支持C++、JAVA、Python等三種編程語(yǔ)言,但可以找到大量的幾乎涵蓋所有語(yǔ)言的第三方拓展包。
    通過(guò)它,你可以定義你的數(shù)據(jù)的結(jié)構(gòu),并生成基于各種語(yǔ)言的代碼。這些你定義的數(shù)據(jù)流可以輕松地在傳遞并不破壞你已有的程序。并且你也可以更新這些數(shù)據(jù)而現(xiàn)有的程序也不會(huì)受到任何的影響。
    Protocol Buffers經(jīng)常被簡(jiǎn)稱為protobuf。
    官網(wǎng):http://code.google.com/p/protobuf/

    六、Consistent Hashing(哈希算法)

    簡(jiǎn)介:一致性哈希算法在1997年由麻省理工學(xué)院提出的一種分布式哈希(DHT)實(shí)現(xiàn)算法,設(shè)計(jì)目標(biāo)是為了解決因特網(wǎng)中的熱點(diǎn)(Hot spot)問(wèn)題,初衷和CARP十分類似。一致性哈希修正了CARP使用的簡(jiǎn) 單哈希算法帶來(lái)的問(wèn)題,使得分布式哈希(DHT)可以在P2P環(huán)境中真正得到應(yīng)用。
     

    一致性hash算法提出了在動(dòng)態(tài)變化的Cache環(huán)境中,判定哈希算法好壞的四個(gè)定義:

    1、平衡性(Balance):平衡性是指哈希的結(jié)果能夠盡可能分布到所有的緩沖中去,這樣可以使得所有的緩沖空間都得到利用。很多哈希算法都能夠滿足這一條件。
    2、單調(diào)性(Monotonicity):?jiǎn)握{(diào)性是指如果已經(jīng)有一些內(nèi)容通過(guò)哈希分派到了相應(yīng)的緩沖中,又有新的緩沖加入到系統(tǒng)中。哈希的結(jié)果應(yīng)能夠保證原有已分配的內(nèi)容可以被映射到原有的或者新的緩沖中去,而不會(huì)被映射到舊的緩沖集合中的其他緩沖區(qū)。
    3、分散性(Spread):在分布式環(huán)境中,終端有可能看不到所有的緩沖,而是只能看到其中的一部分。當(dāng)終端希望通過(guò)哈希過(guò)程將內(nèi)容映射到緩沖上時(shí),由于不同終端所見(jiàn)的緩沖范圍有可能不同,從而導(dǎo)致哈希的結(jié)果不一致,最終的結(jié)果是相同的內(nèi)容被不同的終端映射到不同的緩沖區(qū)中。這種情況顯然是應(yīng)該避免的,因?yàn)樗鼘?dǎo)致相同內(nèi)容被存儲(chǔ)到不同緩沖中去,降低了系統(tǒng)存儲(chǔ)的效率。分散性的定義就是上述情況發(fā)生的嚴(yán)重程度。好的哈希算法應(yīng)能夠盡量避免不一致的情況發(fā)生,也就是盡量降低分散性。
    4、負(fù)載(Load):負(fù)載問(wèn)題實(shí)際上是從另一個(gè)角度看待分散性問(wèn)題。既然不同的終端可能將相同的內(nèi)容映射到不同的緩沖區(qū)中,那么對(duì)于一個(gè)特定的緩沖區(qū)而言,也可能被不同的用戶映射為不同 的內(nèi)容。與分散性一樣,這種情況也是應(yīng)當(dāng)避免的,因此好的哈希算法應(yīng)能夠盡量降低緩沖的負(fù)荷。
    在分布式集群中,對(duì)機(jī)器的添加刪除,或者機(jī)器故障后自動(dòng)脫離集群這些操作是分布式集群管理最基本的功能。如果采用常用的hash(object)%N算法,那么在有機(jī)器添加或者刪除后,很多原有的數(shù)據(jù)就無(wú)法找到了,這樣嚴(yán)重的違反了單調(diào)性原則。
    七、Netty
    貢獻(xiàn)者:JBOSS
    簡(jiǎn)介:Netty是由JBOSS提供的一個(gè)java開(kāi)源框架。Netty提供異步的、事件驅(qū)動(dòng)的網(wǎng)絡(luò)應(yīng)用程序框架和工具,用以快速開(kāi)發(fā)高性能、高可靠性的網(wǎng)絡(luò)服務(wù)器和客戶端程序。
     
    也就是說(shuō),Netty 是一個(gè)基于NIO的客戶,服務(wù)器端編程框架,使用Netty 可以確保你快速和簡(jiǎn)單的開(kāi)發(fā)出一個(gè)網(wǎng)絡(luò)應(yīng)用,例如實(shí)現(xiàn)了某種協(xié)議的客戶,服務(wù)端應(yīng)用。Netty相當(dāng)簡(jiǎn)化和流線化了網(wǎng)絡(luò)應(yīng)用的編程開(kāi)發(fā)過(guò)程,例如,TCP和UDP的socket服務(wù)開(kāi)發(fā)。
    “快速”和“簡(jiǎn)單”并不意味著會(huì)讓你的最終應(yīng)用產(chǎn)生維護(hù)性或性能上的問(wèn)題。Netty 是一個(gè)吸收了多種協(xié)議的實(shí)現(xiàn)經(jīng)驗(yàn),這些協(xié)議包括FTP,SMTP,HTTP,各種二進(jìn)制,文本協(xié)議,并經(jīng)過(guò)相當(dāng)精心設(shè)計(jì)的項(xiàng)目,最終,Netty 成功的找到了一種方式,在保證易于開(kāi)發(fā)的同時(shí)還保證了其應(yīng)用的性能,穩(wěn)定性和伸縮性。
    官網(wǎng):http://netty.io/

    八、BloomFilter

    簡(jiǎn)介:Bloom filter 是由 Howard Bloom 在 1970 年提出的二進(jìn)制向量數(shù)據(jù)結(jié)構(gòu),它具有很好的空間和時(shí)間效率,被用來(lái)檢測(cè)一個(gè)元素是不是集合中的一個(gè)成員。如果檢測(cè)結(jié)果為是,該元素不一定在集合中;但如果檢測(cè)結(jié)果為否,該元素一定不在集合中。因此Bloom filter具有100%的召回率。這樣每個(gè)檢測(cè)請(qǐng)求返回有“在集合內(nèi)(可能錯(cuò)誤)”和“不在集合內(nèi)(絕對(duì)不在集合內(nèi))”兩種情況,可見(jiàn) Bloom filter 是犧牲了正確率和時(shí)間以節(jié)省空間。
    Bloom filter 優(yōu)點(diǎn)就是它的插入和查詢時(shí)間都是常數(shù),另外它查詢?cè)貐s不保存元素本身,具有良好的安全性。

    搜索引擎

    一、Nutch

    簡(jiǎn)介:Nutch 是一個(gè)開(kāi)源Java 實(shí)現(xiàn)的搜索引擎。它提供了我們運(yùn)行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬蟲。

    盡管Web搜索是漫游Internet的基本要求, 但是現(xiàn)有web搜索引擎的數(shù)目卻在下降. 并且這很有可能進(jìn)一步演變成為一個(gè)公司壟斷了幾乎所有的web搜索為其謀取商業(yè)利益.這顯然 不利于廣大Internet用戶.
     
    Nutch為我們提供了這樣一個(gè)不同的選擇. 相對(duì)于那些商用的搜索引擎, Nutch作為開(kāi)放源代碼 搜索引擎將會(huì)更加透明, 從而更值得大家信賴. 現(xiàn)在所有主要的搜索引擎都采用私有的排序算法, 而不會(huì)解釋為什么一個(gè)網(wǎng)頁(yè)會(huì)排在一個(gè)特定的位置. 除此之外, 有的搜索引擎依照網(wǎng)站所付的 費(fèi)用, 而不是根據(jù)它們本身的價(jià)值進(jìn)行排序. 與它們不同, Nucth沒(méi)有什么需要隱瞞, 也沒(méi)有 動(dòng)機(jī)去扭曲搜索的結(jié)果. Nutch將盡自己最大的努力為用戶提供最好的搜索結(jié)果.
    Nutch目前最新的版本為version v2.2.1。
    官網(wǎng):https://nutch.apache.org/

    二、Lucene

    開(kāi)發(fā)者:Doug Cutting(Hadoop之父,你懂的)
    簡(jiǎn)介:Lucene是apache軟件基金會(huì)4 jakarta項(xiàng)目組的一個(gè)子項(xiàng)目,是一個(gè)開(kāi)放源代碼的全文檢索引擎工具包,即它不是一個(gè)完整的全文檢索引擎,而是一個(gè)全文檢索引擎的架構(gòu),提供了完整的查詢引擎和索引引擎,部分文本分析引擎(英文與德文兩種西方語(yǔ)言)。Lucene的目的是為軟件開(kāi)發(fā)人員提供一個(gè)簡(jiǎn)單易用的工具包,以方便的在目標(biāo)系統(tǒng)中實(shí)現(xiàn)全文檢索的功能,或者是以此為基礎(chǔ)建立起完整的全文檢索引擎。
     
    官網(wǎng):http://lucene.apache.org/

    三、SolrCloud

    簡(jiǎn)介:SolrCloud是Solr4.0版本以后基于Solr和Zookeeper的分布式搜索方案。SolrCloud是Solr的基于Zookeeper一種部署方式。Solr可以以多種方式部署,例如單機(jī)方式,多機(jī)Master-Slaver方式。
    原理圖:
     
    SolrCloud有幾個(gè)特色功能:
    集中式的配置信息使用ZK進(jìn)行集中配置。啟動(dòng)時(shí)可以指定把Solr的相關(guān)配置文件上傳
    Zookeeper,多機(jī)器共用。這些ZK中的配置不會(huì)再拿到本地緩存,Solr直接讀取ZK中的配置信息。配置文件的變動(dòng),所有機(jī)器都可以感知到。另外,Solr的一些任務(wù)也是通過(guò)ZK作為媒介發(fā)布的。目的是為了容錯(cuò)。接收到任務(wù),但在執(zhí)行任務(wù)時(shí)崩潰的機(jī)器,在重啟后,或者集群選出候選者時(shí),可以再次執(zhí)行這個(gè)未完成的任務(wù)。
    自動(dòng)容錯(cuò)SolrCloud對(duì)索引分片,并對(duì)每個(gè)分片創(chuàng)建多個(gè)Replication。每個(gè)Replication都可以對(duì)外提供服務(wù)。一個(gè)Replication掛掉不會(huì)影響索引服務(wù)。更強(qiáng)大的是,它還能自動(dòng)的在其它機(jī)器上幫你把失敗機(jī)器上的索引Replication重建并投入使用。
    近實(shí)時(shí)搜索立即推送式的replication(也支持慢推送)??梢栽诿雰?nèi)檢索到新加入索引。
    查詢時(shí)自動(dòng)負(fù)載均衡SolrCloud索引的多個(gè)Replication可以分布在多臺(tái)機(jī)器上,均衡查詢壓力。如果查詢壓力大,可以通過(guò)擴(kuò)展機(jī)器,增加Replication來(lái)減緩。
    自動(dòng)分發(fā)的索引和索引分片發(fā)送文檔到任何節(jié)點(diǎn),它都會(huì)轉(zhuǎn)發(fā)到正確節(jié)點(diǎn)。
    事務(wù)日志事務(wù)日志確保更新無(wú)丟失,即使文檔沒(méi)有索引到磁盤。

    四、Solr

    簡(jiǎn)介:Solr是一個(gè)獨(dú)立的企業(yè)級(jí)搜索應(yīng)用服務(wù)器,它對(duì)外提供類似于Web-service的API接口。用戶可以通過(guò)http請(qǐng)求,向搜索引擎服務(wù)器提交一定格式的XML文件,生成索引;也可以通過(guò)Http Get操作提出查找請(qǐng)求,并得到XML格式的返回結(jié)果。

    Solr是一個(gè)高性能,采用Java5開(kāi)發(fā),基于Lucene的全文搜索服務(wù)器。同時(shí)對(duì)其進(jìn)行了擴(kuò)展,提供了比Lucene更為豐富的查詢語(yǔ)言,同時(shí)實(shí)現(xiàn)了可配置、可擴(kuò)展并對(duì)查詢性能進(jìn)行了優(yōu)化,并且提供了一個(gè)完善的功能管理界面,是一款非常優(yōu)秀的全文搜索引擎。

    官網(wǎng):https://lucene.apache.org/solr/

    五、ElasticSearch

    簡(jiǎn)介:ElasticSearch是一個(gè)基于Lucene的搜索服務(wù)器。它提供了一個(gè)分布式多用戶能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java開(kāi)發(fā)的,并作為Apache許可條款下的開(kāi)放源碼發(fā)布,是第二最流行的企業(yè)搜索引擎。設(shè)計(jì)用于云計(jì)算中,能夠達(dá)到實(shí)時(shí)搜索,穩(wěn)定,可靠,快速,安裝使用方便。
    官網(wǎng):http://www.elasticsearch.org/

    六、Sphinx

    簡(jiǎn)介:Sphinx是一個(gè)基于SQL的全文檢索引擎,可以結(jié)合MySQL,PostgreSQL做全文搜索,它可以提供比數(shù)據(jù)庫(kù)本身更專業(yè)的搜索功能,使得應(yīng)用程序更容易實(shí)現(xiàn)專業(yè)化的全文檢索。Sphinx特別為一些腳本語(yǔ)言設(shè)計(jì)搜索API接口,如PHP,Python,Perl,Ruby等,同時(shí)為MySQL也設(shè)計(jì)了一個(gè)存儲(chǔ)引擎插件。
    Sphinx單一索引最大可包含1億條記錄,在1千萬(wàn)條記錄情況下的查詢速度為0.x秒(毫秒級(jí))。Sphinx創(chuàng)建索引的速度為:創(chuàng)建100萬(wàn)條記錄的索引只需 3~4分鐘,創(chuàng)建1000萬(wàn)條記錄的索引可以在50分鐘內(nèi)完成,而只包含最新10萬(wàn)條記錄的增量索引,重建一次只需幾十秒。
    官網(wǎng):http://sphinxsearch.com

    七、SenseiDB

    貢獻(xiàn)者:linkedin
    簡(jiǎn)介:SenseiDB是一個(gè)NoSQL數(shù)據(jù)庫(kù),它專注于高更新率以及復(fù)雜半結(jié)構(gòu)化搜索查詢。熟悉Lucene和Solor的用戶會(huì)發(fā)現(xiàn),SenseiDB背后有許多似曾相識(shí)的概念。SenseiDB部署在多節(jié)點(diǎn)集群中,其中每個(gè)節(jié)點(diǎn)可以包括N塊數(shù)據(jù)片。Apache Zookeeper用于管理節(jié)點(diǎn),它能夠保持現(xiàn)有配置,并可以將任意改動(dòng)(如拓?fù)湫薷模﹤鬏數(shù)秸麄€(gè)節(jié)點(diǎn)群中。SenseiDB集群還需要一種模式用于定義將要使用的數(shù)據(jù)模型。
    從SenseiDB集群中獲取數(shù)據(jù)的唯一方法是通過(guò)Gateways(它 沒(méi)有“INSERT”方法)。每個(gè)集群都連接到一個(gè)單一gateway。你需要了解很重要的一點(diǎn)是,由于SenseiDB本身沒(méi)法處理原子性 (Atomicity)和隔離性(Isolation),因此只能通過(guò)外部在gateway層進(jìn)行限制。另外,gateway必須確保數(shù)據(jù)流按照預(yù)期的方 式運(yùn)作。內(nèi)置的gateway有以下幾種形式:
    • 來(lái)自文件
    • 來(lái)自JMS隊(duì)列
    • 通過(guò)JDBC
    • 來(lái)自Apache Kafka
    官網(wǎng):http://senseidb.com


    數(shù)據(jù)挖掘

    一、Mahout
     
    簡(jiǎn)介:Apache Mahout 是 Apache Software Foundation (ASF) 開(kāi)發(fā)的一個(gè)全新的開(kāi)源項(xiàng)目,其主要目標(biāo)是創(chuàng)建一些可伸縮的機(jī)器學(xué)習(xí)算法,供開(kāi)發(fā)人員在 Apache 在許可下免費(fèi)使用。該項(xiàng)目已經(jīng)發(fā)展到了它的最二個(gè)年頭,目前只有一個(gè)公共發(fā)行版。Mahout 包含許多實(shí)現(xiàn),包括集群、分類、CP 和進(jìn)化程序。此外,通過(guò)使用 Apache Hadoop 庫(kù),Mahout 可以有效地?cái)U(kuò)展到云中。
    雖然在開(kāi)源領(lǐng)域中相對(duì)較為年輕,但 Mahout 已經(jīng)提供了大量功能,特別是在集群和 CF 方面。Mahout 的主要特性包括:
    • Taste CF。Taste 是 Sean Owen 在 SourceForge 上發(fā)起的一個(gè)針對(duì) CF 的開(kāi)源項(xiàng)目,并在 2008 年被贈(zèng)予 Mahout。
    • 一些支持 Map-Reduce 的集群實(shí)現(xiàn)包括 k-Means、模糊 k-Means、Canopy、Dirichlet 和 Mean-Shift。
    • Distributed Naive Bayes 和 Complementary Naive Bayes 分類實(shí)現(xiàn)。
    • 針對(duì)進(jìn)化編程的分布式適用性功能。
    • Matrix 和矢量庫(kù)。
    • 上述算法的示例。
    官網(wǎng):http://mahout.apache.org/


    Iaas

    IaaS(Infrastructure as a Service),即基礎(chǔ)設(shè)施即服務(wù)。
    一、OpenStack
    簡(jiǎn)介:OpenStack是一個(gè)由NASA(美國(guó)國(guó)家航空航天局)和Rackspace合作研發(fā)并發(fā)起的,以Apache許可證授權(quán)的自由軟件和開(kāi)放源代碼項(xiàng)目。
    OpenStack是一個(gè)開(kāi)源的云計(jì)算管理平臺(tái)項(xiàng)目,由幾個(gè)主要的組件組合起來(lái)完成具體工作。OpenStack支持幾乎所有類型的云環(huán)境,項(xiàng)目目標(biāo)是提供實(shí)施簡(jiǎn)單、可大規(guī)模擴(kuò)展、豐富、標(biāo)準(zhǔn)統(tǒng)一的云計(jì)算管理平臺(tái)。OpenStack通過(guò)各種互補(bǔ)的服務(wù)提供了基礎(chǔ)設(shè)施即服務(wù)(IaaS)的解決方案,每個(gè)服務(wù)提供API以進(jìn)行集成。
     
    6個(gè)核心項(xiàng)目:Nova(計(jì)算,Compute),Swift(對(duì)象存儲(chǔ),Object),Glance(鏡像,Image),Keystone(身份,Identity),Horizon(自助門戶,Dashboard),Quantum & Melange(網(wǎng)絡(luò)&地址管理),另外還有若干社區(qū)項(xiàng)目,如Rackspace(負(fù)載均衡)、Rackspace(關(guān)系型數(shù)據(jù)庫(kù))。
    相關(guān)閱讀:
    官網(wǎng):https://www.openstack.org/

     

    二、Docker
    貢獻(xiàn)者:dotCloud
     
    簡(jiǎn)介:Docker 是一個(gè)開(kāi)源的應(yīng)用容器引擎,讓開(kāi)發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上,也可以實(shí)現(xiàn)虛擬化。容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口(類似 iPhone 的 app)。幾乎沒(méi)有性能開(kāi)銷,可以很容易地在機(jī)器和數(shù)據(jù)中心中運(yùn)行。最重要的是,他們不依賴于任何語(yǔ)言、框架或包括系統(tǒng)。
    官網(wǎng):http://www.docker.io/

     

    三、Kubernetes
    貢獻(xiàn)者:Google
    簡(jiǎn)介:Kubernetes是Google開(kāi)源的容器集群管理系統(tǒng)。它構(gòu)建Ddocker技術(shù)之上,為容器化的應(yīng)用提供資源調(diào)度、部署運(yùn)行、服務(wù)發(fā)現(xiàn)、擴(kuò)容縮容等整一套功能,本質(zhì)上可看作是基于容器技術(shù)的mini-PaaS平臺(tái)。
    Kubernetes從另一個(gè)角度對(duì)資源進(jìn)行抽象,它讓開(kāi)發(fā)人員和管理人員共同著眼于服務(wù)的行為和性能的提升,而不是僅僅關(guān)注對(duì)單一的組件或者是基礎(chǔ)資源。
    那么Kubernetes集群到底提供了哪些單一容器所沒(méi)有功能?它主要關(guān)注的是對(duì)服務(wù)級(jí)別的控制而并非僅僅是對(duì)容器級(jí)別的控制,Kubernetes提供了一種“機(jī)智”的管理方式,它將服務(wù)看成一個(gè)整體。在Kubernete的解決方案中,一個(gè)服務(wù)甚至可以自我擴(kuò)展,自我診斷,并且容易升級(jí)。例如,在Google中,我們使用機(jī)器學(xué)習(xí)技術(shù)來(lái)保證每個(gè)運(yùn)行的服務(wù)的當(dāng)前狀態(tài)都是最高效的。
    代碼托管:https://github.com/GoogleCloudPlatform/kubernetes/
     
    四、Imctfy
    貢獻(xiàn)者:Google
    簡(jiǎn)介:Google開(kāi)源了自己所用Linux容器系統(tǒng)的開(kāi)源版本lmctfy,讀音為lem-kut-fee。包括一個(gè)C++庫(kù)(使用了C++11,文檔可以參考頭文件)和命令行界面。目前的版本是0.1,只提供了CPU與內(nèi)存隔離。項(xiàng)目還在密集開(kāi)發(fā)中。
    mctfy本身是針對(duì)某些特定使用場(chǎng)景設(shè)計(jì)和實(shí)現(xiàn)的,目前擁有一臺(tái)機(jī)器上所有容器時(shí)運(yùn)行情況最好,不推薦與LXC和其他容器系統(tǒng)一起使用(雖然也可行)。已在Ubuntu 12.04+和Ubuntu 3.3與3.8內(nèi)核上測(cè)試。
    代碼托管:https://github.com/google/Imctfy/


    監(jiān)控管理

    一、Dapper
    貢獻(xiàn)者:Google
    簡(jiǎn)介:Dapper是一個(gè)輕量的ORM(對(duì)象關(guān)系映射(英語(yǔ):Object Relational Mapping,簡(jiǎn)稱ORM,或O/RM,或O/R mapping)。并不單純的是一個(gè)DBHelper.因?yàn)樵贒apper中數(shù)據(jù)其實(shí)就是一個(gè)對(duì)象。Dapper擴(kuò)展與IDbConnection上,所以事實(shí)上它的傾入性很低。我用了StructureMap。如果不喜歡可以自己更換,或者自己實(shí)現(xiàn)下。
    代碼就一個(gè)SqlMapper.cs文件,主要是IDbConnection的擴(kuò)展方法,編譯后就40K的一個(gè)很小的dll。
    特性:
    • Dapper很快。Dapper的速度接近與IDataReader。
    • Dapper支持主流數(shù)據(jù)庫(kù) Mysql,SqlLite,Mssql2000,Mssql2005,Oracle等一系列的數(shù)據(jù)庫(kù)
    • 支持多表并聯(lián)的對(duì)象。支持一對(duì)多 多對(duì)多的關(guān)系,并且沒(méi)侵入性。
    • 原理通過(guò)Emit反射IDataReader的序列隊(duì)列,來(lái)快速的得到和產(chǎn)生對(duì)象
    • Dapper語(yǔ)法十分簡(jiǎn)單。并且無(wú)須遷就數(shù)據(jù)庫(kù)的設(shè)計(jì)
    官方站點(diǎn) http://code.google.com/p/dapper-dot-net/
    代碼托管:http://bigbully.github.io/Dapper-translation/

     

    二、Zipkin
    貢獻(xiàn)者:Twitter
    簡(jiǎn)介:Zipkin (分布式跟蹤系統(tǒng))是 Twitter 的一個(gè)開(kāi)源項(xiàng)目,允許開(kāi)發(fā)者收集 Twitter 各個(gè)服務(wù)上的監(jiān)控?cái)?shù)據(jù),并提供查詢接口。該系統(tǒng)讓開(kāi)發(fā)者可通過(guò)一個(gè) Web 前端輕松的收集和分析數(shù)據(jù),例如用戶每次請(qǐng)求服務(wù)的處理時(shí)間等,可方便的監(jiān)測(cè)系統(tǒng)中存在的瓶頸。
     
    官方網(wǎng)站:http://twitter.github.io/zipkin/
    代碼托管:https://github.com/twitter/zipkin/

    慧都控件網(wǎng)年終促銷最后一波,全場(chǎng)6折起,豪禮搶不停>>>

    截止時(shí)間:2016年12月31日

    更多大數(shù)據(jù)與分析相關(guān)行業(yè)資訊、解決方案、案例、教程等請(qǐng)點(diǎn)擊查看>>>

    詳情請(qǐng)咨詢在線客服!

    客服熱線:023-66090381

    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();