1. 程式人生 > >開源的搜尋引擎——詳細概述

開源的搜尋引擎——詳細概述

開源的搜尋引擎

搜尋服務主要分為兩個部分:爬蟲crawler和查詢searcher。

爬蟲的工作策略一般則可以分為累積式抓取(cumulative crawling)和增量式抓取(incrementalcrawling)兩種。

1    爬蟲

1.1  nutch

        Nutch依賴Hadoop資料結構,該資料結果可以用於批量處理。現在Nutch可以不依賴於Tomcat或Lucence來建立索引,可以單獨工作。

Nutch並不是一個可擴充套件性很強的爬蟲,是一個專門為搜尋引擎定製的網路爬蟲,雖然有一套強大的外掛機制,但定製外掛並不能修改爬蟲的遍歷演算法、去重演算法和爬取流程。

不過Nutch需要使用者熟悉網路爬蟲原理、hadoop開發基礎及linux shell,且需要熟悉Apache Ant。

架構比較重

1.1.1 nutch環境搭建

從下載連結:http://nutch.apache.org/downloads.html中下載bin包用來部署環境。Nutch有兩個主版本1.x和2.x,1.x版本是基於Hadoop架構的,底層儲存使用的是HDFS,而2.x通過使用ApacheGora,使得Nutch可以訪問HBase、Accumulo、Cassandra、MySQL、DataFileAvroStore、AvroStore等NoSQL。

1)先設定JAVA_HOME環境變數。PS:檢視MAC中java路徑: /usr/libexec/java_home -V

        2)建立urls資料夾,其中建立test檔案,在test檔案裡面存放http://nutch.apache.org

        3)編輯conf/regex-urlfilter.txt將原有的

# accept anything else

+.

替換為你以正則表示式匹配的你希望爬的地址。例如:

+^http://([a-z0-9]*\.)*nutch.apache.org/

用正則表示式來限制爬蟲的範圍僅限於nutch.apache.org這個域。

4)修改conf/nutch-default.xml

其中大多數內容可以直接使用,可以定義爬取屬性

修改http.agent.name 屬性

<property> 

<name>http.agent.name</name> 

<value>My Nutch Spider</value>

</property>

並確保plugin.includes 屬性是indexer-solr

5)然後執行:$ bin/crawl urls crawl 2 進行爬取。

PS:如果是原始碼檔案,則解壓後在目錄中使用ant命令進行編譯,編譯缺少的jar可以手動下載後直接放到解壓目錄中即可。可以使用ant clean命令來刪除檔案。

Nutch1.x從1.7版本開始不再提供完整的部署檔案,只提供原始碼檔案及相關的build.xml檔案,這就要求使用者自己編譯Nutch,而整個Nutch2.x版本都不提供編譯完成的檔案,想要學習Nutch2.x的功能,須自己手動編譯檔案。編譯之後多了兩個目錄:build和runtime

1.1.2 Nutch原理

inject要crawl的URL入口初始化到DB。

Generate,以一個batchId為入參,標記新的一批要被fetch的URL

fetch開始實際抓取網頁內容,

parse是解析內容,會多生成一些key-value對

updatedb會更新db,把outlinks裡面的URL抽取出來,去重,再生成新的資料,進行下一輪generate。

Index把網頁都進行索引建立,在搜尋引擎服務裡面就可以進行搜尋。

1.1.3 開發環境搭建     

        安裝ant,mac 下使用命令:brewinstall ant命令來進行安裝。

nutch的下載地址:

        http://nutch.apache.org/downloads.html

        src原始碼包下載解壓後,使用ant命令進行編譯。

1.1.4 概念

WebDB:儲存網頁資料和連線資訊

Fetch lists:將WebDB所儲存的連線分成多個組,來用於分散式檢索

Fetchers:檢索Fetch list中的內容並下載到本地,共有兩項輸出:分別是連線的update資訊和內容content

Updates:更新WebDB的頁面檢索狀態

WebDB、updates、fetch lists和fetchers組成迴圈結構,不斷執行下去,來確保所得到的Web映象是最新的

Content:介面內容,獲取內容之後,Nutch便可以根據它來建立索引並執行查詢操作

Indexers:對目標Content建立索引,當索引內容較大時,可把索引劃分成多個索引片段,然後分配給不同的seracher實現並行檢索

Searchers:實現查詢功能的同時也會快取content

Webservers:有兩種角色:

1處理使用者的互動請求(Nutch Search Client)

2從searchers中獲取查詢結果(HTTP Server)

fetchers和searchers兩個節點所對應的操作可放到分散式環境(Hadoop)中去完成

建立索引及查詢的操作可通過solr框架來實現

1.2     WebMagic

webmagic的是無須配置、便於二次開發的爬蟲框架,提供簡單靈活的API,只需少量程式碼即可實現一個爬蟲。

下載地址如下:

http://webmagic.io/download.html

1.3     Crawler4j

Crawler4j是一個單機版的垂直爬蟲,其遍歷演算法是一種類似泛爬的演算法。Crawler4j並沒有提供定製http請求的介面,並不適用於需要定製http請求的爬取業務(例如模擬登陸、多代理切換)

1.4  jsoup

1.5     WebCollector

WebCollector是一個無須配置、便於二次開發的Java爬蟲框架(核心),它提供精簡的的API,只需少量程式碼即可實現一個功能強大的爬蟲。

1.6  Heritrix

1.7  pyspider

python爬蟲

1.8  scrapy

python爬蟲

1.9  小結

爬蟲框架

語言

外掛

上手難度

支援分散式

支援JS頁面抓取

特點

Nutch

Java

支援,開發複雜

支援

不支援

專門為搜尋引擎設計

Crawler4j

Java

不支援

不支援

不支援

簡單

WebMagic

Java

支援

不支援

不支援

scrapy的Java版本

WebCollector

Java

支援

不支援

支援

內建selenium

Heritrix

Java

支援

不支援

不支援

擴充套件性較好

scrapy

python

支援

擴充套件可支援

不支援

擴充套件性強

pyspider

python

支援

支援

支援

強大的爬蟲管理和監控

1.10 爬蟲分類

2    solr

Solr是一個基於Lucene的Java搜尋引擎伺服器。提供了層面搜尋、命中醒目顯示並且支援多種輸出格式(包括 XML/XSLT 和 JSON 格式),附帶了一個基於 HTTP 的管理介面。Solr已經在眾多大型的網站中使用,擴充套件了 Lucene,沿用了Lucene的相關術語。Solr 建立的索引與 Lucene 搜尋引擎庫完全相容。Solr 可以閱讀和使用構建到其他 Lucene 應用程式中的索引。此外,很多 Lucene 工具(如Nutch、 Luke)也可以使用Solr 建立的索引。

建索引的時候需要使用Solr,需要安裝並啟動一個Solr伺服器。

下載連結:http://lucene.apache.org/solr/mirrors-solr-latest-redir.html

有原始碼包和二進位制包。

Solr是一個基於Lucene的Java搜尋引擎伺服器。Solr 提供了層面搜尋、命中醒目顯示並且支援多種輸出格式(包括 XML/XSLT 和 JSON 格式)

cd solr-x/example

        在解壓目錄中執行:

#bin/solr start

# java -jar start.jar

瀏覽器開啟 http://localhost:8983/solr/admin/

如果可以訪問則說明訪問成功。

        停止服務使用命令:

#bin/solr stop -all

3    序列化

目的

1、以某種儲存形式使自定義物件持久化;

2、將物件從一個地方傳遞到另一個地方;

3、使程式更具維護性。

3.1  protocol Buffers

        Protocol buffers是Google開源的一個序列化框架;是一個用來序列化結構化資料的技術,支援多種語言諸如C++、Java以及Python語言,可以使用該技術來持久化資料或者序列化成網路傳輸的資料。

3.2  Thrift

3.3  JSON

        JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式。 易於人閱讀和編寫。同時也易於機器解析和生成。

3.4    XML

        XML 序列化用處很多,包括物件持久化和資料傳輸。但是一些 XML 序列化技術實現起來可能很複雜。

3.5    Avro

        Avro是Hadoop的一個子專案,由Hadoop的創始人DougCutting(也是Lucene,Nutch等專案的創始人)牽頭開發。Avro是一個數據序列化系統,設計用於支援大批量資料交換的應用。

4    儲存方式

4.1  HBASE

        Hbase啟動指南如下:http://hbase.apache.org/book.html#quickstart

Hbase下載地址如下:http://www.apache.org/dyn/closer.cgi/hbase/

        有原始碼包和二進位制包下載。

4.2     Cassandra

4.3  Accumulo

4.4  Avro

4.5  Mongodb

Mongodb入門使用可以檢視如下連結:

        http://blog.csdn.net/notbaron/article/details/76789501

        下載連結:

        http://www.mongodb.org/downloads

5    hadoop

Hadoop是大叢集上執行程式的框架。框架提供了應用的可靠性和資料移動。實現了Map/Reduce可以應用分割成碎片可以在叢集的任何一個上執行。提供了HDFS用於儲存計算節點的資料,在叢集間提供了可觀的頻寬。Map/Reduce和HDFS從框架上來實現容錯。

是在將Nutch中的分散式檔案系統和MapReduce軟體分隔開來形成了一個新的專案,即“Hadoop”

下載地址:http://hadoop.apache.org/releases.html#Download

5.1    Map/Reduce

5.2       HDFS

6    視覺化

6.1      Kibana

        Kibana是開源的分析與視覺化平臺,用於和Elasticsearch一起使用的。可以用kibana搜尋、檢視、互動存放在Elasticsearch索引裡的資料,使用各種不同的圖表、表格、地圖等kibana能夠很輕易地展示高階資料分析與視覺化。

        下載地址如下:

https://www.elastic.co/downloads/kibana

7    Nutch+hadoop

        Nutch可以使用兩種模式來執行,本地的或部署的。預設不會和hadoop一起釋出,執行在本地模式,即一個機器上執行一個執行緒。這個適用於小型站點來爬去和索引,但是很多人選擇nutch是因為他和hadoop叢集一起的部署執行模式。可以從分散式檔案系統(HDFS)和MapReduce過程中受益。

8    搜尋

8.1     ElasticSearch

最流行的開源搜尋引擎之一

9      SolrCloud

10                          ZooKeeper

11                          頁面分析渲染

11.1 Phantomjs

11.2 Selenium

        Web自動化工具Selenium,核心採用WebDriver

11.3 crawler4j

11.4  htmlunit

HtmlUnit 是一款開源的java 頁面分析工具,讀取頁面後,可以有效的使用HtmlUnit分析頁面上的內容。

12                          瀏覽器核心

12.1 Trident

Trident(IE核心):該核心程式在 1997 年的 IE4 中首次被採用,是微軟在 Mosaic("馬賽克",這是人類歷史上第一個瀏覽器,從此網頁可以在圖形介面的視窗瀏覽)程式碼的基礎之上修改而來的,並沿用到 IE11,也被普遍稱作 "IE核心"。

12.2 Webkit

chrome 將 Webkit核心 深入人心, Webkit 的鼻祖其實是 Safari。chrome核心已經是 blink。

12.3 chromium

chromium fork 自開源引擎 webkit,把程式碼梳理得可讀性提高很多,以前可能需要一天進行編譯的程式碼,現在只要兩個小時就能搞定。因此 Chromium 引擎和其它基於 WebKit 的引擎所渲染頁面的效果也是有出入的。所以有些地方會把 chromium 引擎和 webkit 區分開來單獨介紹,而有的文章把 chromium 歸入 webkit 引擎中。

12.4 Blink

Google 決定從 WebKit 衍生出自己的 Blink 引擎(後由 Google 和 OperaSoftware 共同研發),將在 WebKit 程式碼的基礎上研發更加快速和簡約的渲染引擎,並逐步脫離 WebKit 的影響,創造一個完全獨立的 Blink 引擎。這樣維繫 Google 和蘋果之間技術關係的紐帶就這樣被切斷了。

12.5 Presto

Presto 是挪威產瀏覽器 opera的 "前任" 核心,最新的 opera 瀏覽器早已將之拋棄從而投入到了谷歌大本營。

12.6 Gecko

        Gecko(Firefox 核心):Netscape6 開始採用的核心,後來的Mozilla FireFox(火狐瀏覽器) 也採用了該核心。

13                          搜尋引擎

lucene是apache下開源搜尋引擎核心,基於Java技術,處理索引,拼寫檢查,點選高亮和其他分析,分詞等技術。

而solr則是基於lucene的搜尋介面。提供XML/HTTP和 JSON/Python/Ruby API,提供搜尋入口,點選高亮,快取,備份和管理介面。

nutch原來都是lucene下的子專案。但後來nutch獨立成為獨立專案。nutch是2004年由俄勒岡州立大學開源實驗室模仿google搜尋引擎創立的開源搜尋引擎,後歸於apache旗下。nutch主要完成抓取,提取內容等工作。

hadoop原來也是nutch下的分散式任務子專案,現在也是apache下的頂級專案。nutch可以利用hadoop進行分散式多工抓取和分析儲存工作。

使用lucene,nutch,solr,hadoop能完成一箇中型的搜尋引擎工作的。

13.1 ElasticSearch

        執行:bin/elasticsearch (或者 bin\elasticsearch.bat on Windows)

        瀏覽器執行:

http://localhost:9200/ 

14                          代理

14.1 Squid

14.2 Privoxy

14.3 Varnish

14.4 Polipo

14.5  Tinyproxy

15                          專案管理

15.1 Maven

Maven使用宣告構建專案,並進行依賴管理,使用約定而不是配置進行構建。優於Apache Ant,ant採用了一種過程化的方式進行配置,所以維護起來困難。

15.2 Gradle

Gradle採用增量構建。Gradle通過Groovy程式設計而不是傳統的XML宣告進行配置。Gradle可以很好地配合Maven進行依賴管理,並且把Ant腳本當作頭等公民。

15.3 ant

使用可以參考:http://blog.csdn.net/notbaron/article/details/77595620

下載連線:http://ant.apache.org/bindownload.cgi

16                          一個開源引擎搭建

使用Nutch,mongodb,elasticSearch,kibana來搭建。

        下載地址可參見各個章節中說明。其中JDK下載地址如下:

http://www.oracle.com/technetwork/java/javase/downloads/index.html

        使用的包分別如下:

jdk-8u144-linux-x64.tar.gz

apache-nutch-1.13-bin.tar.gz 

kibana-5.5.2-linux-x86_64.tar.gz

elasticsearch-5.5.2.zip

apache-ant-1.10.1-bin.tar.gz

16.1 設定JAVA環境變數

tar -xvfjdk-8u144-linux-x64.tar.gz

echo 'exportJAVA_HOME=/root/jdk1.8.0_144' >> ~/.bash_profile

echo 'export PATH=$PATH:/root/jdk1.8.0_144/bin'>> ~/.bash_profile

16.2 設定ant

解壓ant壓縮包

tar -xvf apache-ant-1.10.1-bin.tar.gz

echo 'export PATH=$PATH:/root/apache-ant-1.10.1/bin' >>~/.bash_profile

16.3 設定MongoDB

解壓:tar -xvfmongodb-linux-x86_64-rhel70-3.4.7.tgz

mvmongodb-linux-x86_64-rhel70-3.4.7 mongodb

cd mongodb/

mkdir -p log/conf/ data/

viconf/es.yml

內容如下(可參考:

https://docs.mongodb.com/v2.6/reference/configuration-options/):

啟動mongodb資料庫:

#bin/mongod-f conf/es.yml

檢測資料庫:

#bin/mongo

> show dbs

> exit

16.4 elasticsearch

解壓:unzipelasticsearch-5.5.2.zip

配置路徑:

echo 'export PATH=$PATH:/root/elasticsearch-5.5.2/bin' >>~/.bash_profile

編輯檔案:

#vi config/elasticsearch.yml

增加內容如下:

        elasticsearch不能用root啟動,需要新建使用者。

        #useradd -g root es

        #chmod 775 -R elasticsearch-5.5.2

        #su – es

        #cat /root/.bash_profile >>~/.bash_profile

        #elasticsearch

        檢查elasticsearch:

curl -XGET'http://localhost:9200'

16.5 Kibana

16.6 nutch

17                          參考

17.1 macos部署mysql

macos部署mysql:http://blog.csdn.net/notbaron/article/details/68952997

17.2 nutch部署:

http://blog.csdn.net/gobitan/article/details/13916981

17.3 nutch官方wiki指南:

https://wiki.apache.org/nutch/NutchTutorial

elasticsearch官方指南:

https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started.html

17.4 nutchhadoop教程

https://wiki.apache.org/nutch/NutchHadoopTutorial

17.5 hadoop官方wiki指南

https://wiki.apache.org/hadoop/

17.6 Mongodb使用指南:

https://docs.mongodb.com/v2.6/reference/configuration-options/

17.7 Nutch+MongoDB+ES

http://www.aossama.com/search-engine-with-apache-nutch-mongodb-and-elasticsearch/

17.8 Hadoop十年

http://www.infoq.com/cn/news/2016/01/hadoop-ten-years-Doug?utm_campaign=rightbar_v2&utm_source=infoq&utm_medium=news_link&utm_content=link_text

17.9 瀏覽器核心

http://www.cnblogs.com/Leo_wl/p/5119719.html

18                          TIPS

18.1 紅帽安裝桌面

yum grouplist

yum groupinstall-y  "Server with GUI"

19                          材料

19.1 中國2016大資料技術大會材料

http://download.csdn.net/meeting/meeting_detail/25

http://download.csdn.net/meeting

20                          大資料開源工具

類別

名稱

備註

查詢引擎

Phoenix

Salesforce公司出品,Apache HBase之上的一個SQL中間層,完全使用Java編寫

Stinger

原叫Tez,下一代Hive, Hortonworks主導開發,執行在YARN上的DAG計算框架

Presto

Facebook開源

Spark SQL

Spark上的SQL執行引擎

Pig

基於Hadoop MapReduce的指令碼語言

Cloudera Impala

參照Google Dremel實現,能執行在HDFSHBase上,使用C++開發

Apache Drill

參照Google Dremel實現

Apache Tajo

一個執行在YARN上支援SQL的分散式資料倉庫

Hiv

基於Hadoop MapReduceSQL查詢引擎

流式計算

Facebook Puma

實時資料流分析

Twitter Rainbird

分散式實時統計系統,如網站的點選統計

Yahoo S4

Java開發的一個通用的、分散式的、可擴充套件的、分割槽容錯的、可插拔的無主架構的流式系統

Twitter Storm

使用JavaClojure實現

Samza

samza是一個分散式的流式資料處理框架(streaming processing),它是基於Kafka訊息佇列來實現類實時的流式資料處理的。(準確的說,samza是通過模組化的形式來使用kafka的,因此可以構架在其他訊息佇列框架上,但出發點和預設實現是基於kafka)

DataTorrent

基於Hadoop2.X構建的實時流式處理和分析平臺,每秒可以處理超過10億個實時事件

Spark Streaming

Spark Streaming是一種構建在Spark上的實時計算框架,它擴充套件了Spark處理大規模流式資料的能力。

Apache Flink

Apache Flink是一個高效、分散式、基於Java實現的通用大資料分析引擎,它具有分散式 MapReduce一類平臺的高效性、靈活性和擴充套件性以及並行資料庫查詢優化方案,它支援批量和基於流的資料分析,且提供了基於JavaScalaAPI

迭代計算

Apache Hama

建立在Hadoop上基於BSPBulk Synchronous Parallel)的計算框架,模仿了GooglePregel

Apache Giraph

建立在Hadoop上的可伸縮的分散式迭代圖處理系統,靈感來自BSPbulk synchronous parallel)和GooglePregel

HaLoop

迭代的MapReduce

Twister

迭代的MapReduce

Spark GraphX

GraphX Spark中用於圖(e.g., Web-Graphs and Social Networks)和圖平行計算(e.g., PageRank and Collaborative Filtering)API,可以認為是GraphLab(C++)Pregel(C++)Spark(Scala)上的重寫及優化,

離線計算

Hadoop MapReduce

經典的大資料批處理系統

Berkeley Spark

使用Scala語言實現,和MapReduce有較大的競爭關係,效能強於MapReduce

Apache Flink

Apache Flink是一個高效、分散式、基於Java實現的通用大資料分析引擎,它具有分散式 MapReduce一類平臺的高效性、靈活性和擴充套件性以及並行資料庫查詢優化方案,它支援批量和基於流的資料分析,且提供了基於JavaScalaAPI

鍵值儲存

LevelDB

Google開源的高效KV程式設計庫,注意它只是個庫

RocksDB

Facebook開源的,基於GoogleLevelDB,但提高了擴充套件性可以執行在多核處理器上

HyperDex

下一代KV儲存系統,支援stringsintegersfloatslistsmapssets等豐富的資料型別

TokyoCabinet

日本人Mikio Hirabayashi(平林幹雄)開發的一款DBM資料庫,注意它只是個庫(大名鼎鼎的DBM資料庫qdbm就是Mikio Hirabayashi開發的),讀寫非常快

Voldemort

一個分散式鍵值儲存系統,是Amazon Dynamo的一個開源克隆,LinkedIn開源

Amazon Dynamo

亞馬遜的KV模式的儲存平臺,無主架構

Tair

淘寶出品的高效能、分散式、可擴充套件、高可靠的KV結構儲存系統,專為小檔案優化,並提供簡單易用的介面(類似Map),Tair支援JavaC版本的客戶端

Apache Accumulo

一個可靠的、可伸縮的、高效能的排序分散式的KV儲存系統,參照Google Bigtable而設計,建立在HadoopThriftZookeeper之上。

Redi

使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、單機版KV資料庫。從2010315日起,Redis的開發工作由VMware主持

Memcache

Memcached 是一個高效能的分散式記憶體物件快取系統,用於動態Web應用以減輕資料庫負載。它通過在記憶體中快取資料和物件來減少讀取資料庫的次數,從而提高動態、資料庫驅動網站的速度。Memcached基於一個儲存鍵/值對的hashmap。其守護程序(daemon)是用C寫的,但是客戶端可以用任何語言來編寫,並通過Memcached協議與守護程序通訊。

OceanBas

支援海量資料的高效能分散式資料庫系統,實現了數千億條記錄、數百TB資料上的跨行跨表事務

Amazon SimpleDB

一個可大規模伸縮、用 Erlang編寫的高可用資料儲存

Vertica

惠普2011收購VerticaVertica是傳統的關係型資料庫,基於列儲存,同時支援MPP,使用標準的SQL查詢,可以和Hadoop/MapReduce進行整合

Cassandra

Hadoop成員,Facebook2008Cassandra開源,基於O(1)DHT的完全P2P架構

HyperTable

搜尋引擎公司Zvents針對BigtableC++開源實現

FoundationDB

支援ACID事務處理的NoSQL資料庫,提供非常好的效能、資料一致性和操作彈性

HBas

BigtableHadoop中的實現,最初是Powerset公司為了處理自然語言搜尋產生的海量資料而開展的專案

檔案儲存

CouchDB

面向文件的資料儲存

MongoDB

文件資料庫

Tachyon

加州大學伯克利分校的AMPLab基於Hadoop的核心元件開發出一個更快的版本Tachyon,它從底層重構了Hadoop平臺。

KFS

GFSC++開源版本

HDF

GFSHadoop中的實現

資源管理

Twitter Mesos

Google Borg的翻版

Hadoop Yarn

類似於Mesos

日誌收集系統

Facebook Scribe

Facebook開源的日誌收集系統,能夠從各種日誌源上收集日誌,儲存到一箇中央儲存系統(可以是NFS,分散式檔案系統等)上,以便於進行集中統計分析處理,常與Hadoop結合使用,Scribe用於向HDFSPush日誌

Cloudera Flume

Cloudera提供的日誌收集系統,支援對日誌的實時性收集

Logstash

日誌管理、分析和傳輸工具,可配合kibanaElasticSearch組建成日誌查詢系統

Fluentd

Fluentd是一個日誌收集系統,它的特點在於其各部分均是可定製化的,你可以通過簡單的配置,將日誌收集到不同的地方。開源社群已經貢獻了下面一些儲存外掛:MongoDB, Redis, CouchDB,Amazon S3, Amazon SQS, Scribe, 0MQ, AMQP, Delayed, Growl等等。

Kibana

為日誌提供友好的Web查詢頁面

訊息系統

StormMQ

ZeroMQ

很底層的高效能網路庫

RabbitMQ

AMQP基礎上完整的,可複用的企業訊息系統

Apache ActiveMQ

能力強勁的開源訊息匯流排

Jafka

開源的、高效能的、跨語言分散式訊息系統,最早是由Apache孵化的Kafka(由LinkedIn捐助給Apache)克隆而來

Apache Kafka

Linkedin201012月份開源的分散式訊息系統,它主要用於處理活躍的流式資料,由Scala寫成

分散式服務

ZooKeepe

分散式鎖服務,PoxOS演算法的實現,對應GoogleChubby

RPC

Apache Avro

Hadoop中的RPC

Facebook Thrift

RPC,支援C++/Java/PHP等眾多語言

叢集管理

Nagios

監視系統執行狀態和網路資訊的監視系統

Ganglia

UC Berkeley發起的一個開源叢集監視專案,設計用於測量數以千計的節點。

Apache Ambari

Hadoop成員,管理和監視Apache Hadoop叢集的開源框架

基礎設施

LevelDB

Google頂級大牛開發的單機版鍵值資料庫,具有非常高的寫效能

SSTable

源於Googleorted String Table

RecordIO

源於Google

Flat Buffers

針對遊戲開發的,高效的跨平臺序列化庫,相比Proto Buffers開銷更小,因為Flat Buffers沒有解析過程

Protocol Buffers

Google公司開發的一種資料描述語言,類似於XML能夠將結構化資料序列化,可用於資料儲存、通訊協議等方面。它不依賴於語言和平臺並且可擴充套件性極強。

Consistent Hashing

1997年由麻省理工學院提出,目標是為了解決因特網中的熱點(Hot spot)問題,初衷和CARP十分類似,基本解決了在P2P環境中最為關鍵的問題——如何在動態的網路拓撲中分佈儲存和路由。

Netty

JBOSS提供的一個Java開源框架,提供非同步的、事件驅動的網路應用程式框架,用以快速開發高效能、高可靠性的網路伺服器和客戶端程式。

BloomFilter

布隆過濾器,1970年由布隆提出,是一個很長的二進位制向量和一系列隨機對映函式,可以用於檢索一個元素是否在一個集合中,優點是空間效率和查詢時間都遠遠超過一般的演算法,缺點是有一定的誤識別率和刪除困難。

搜尋引擎

Nutch

開源Java實現的搜尋引擎,誕生Hadoop的地方。

Lucene

一套資訊檢索工具包,但並不包含搜尋引擎系統,它包含了索引結構、讀寫索引工具、相關性工具、排序等功能。

SolrCloud

基於SolrZookeeper的分散式搜尋,Solr4.0的核心元件之一,主要思想是使用Zookeeper作為叢集的配置資訊中心

Solr

Solr是基於Lucene的搜尋。

ElasticSearch

開源的(Apache2協議),分散式的,RESTful的,構建在Apache Lucene之上的的搜尋引擎。

Sphinx

一個基於SQL的全文檢索引擎,可結合MySQLPostgreSQL做全文檢索,可提供比資料庫本身更專業的搜尋功能,單一索引可達1億條記錄,1000萬條記錄情況下的查詢速度為毫秒級。

SenseiDB

Linkin公司開發的一個開源分散式實時半結構化資料庫,在全文索引的基礎封裝了Browse Query Language (BQL,類似SQL)的查詢語法。

資料探勘

Mahout

Hadoop成員,目標是建立一個可擴充套件的機器學習庫

Spark MLlib

Spark成員,可擴充套件機器學習庫

Iaas

OpenStack

美國國家航空航天局和Rackspace合作研發的,以Apache許可證授權雲平臺管理的專案,它不是一個軟體。這個專案由幾個主要的元件組合起來完成一些具體的工作,旨在為公共及私有云的建設與管理提供軟體的開源專案。6個核心專案:Nova(計算,Compute),Swift(物件儲存,Object),Glance(映象,Image),Keystone(身份,Identity),Horizon(自助門戶,Dashboard),Quantum & Melange(網路&地址管理),另外還有若干社群專案,如Rackspace(負載均衡)、Rackspace(關係型資料庫)。

Docker

應用容器引擎,讓開發者可打包應用及依賴包到一個可移植的容器中,然後釋出到Linux機器上,也可實現虛擬化。

Kubernetes

Google開源的容器叢集管理系統

Imctfy

Google開源的Linux容器

CloudStack

CloudStack是一個開源的具有高可用性及擴充套件性的雲端計算平臺。支援管理大部分主流的hypervisor,如KVM虛擬機器,XenServerVMwareOracle VMXen等。

監控管理

Dapper

Google生產環境下的大規模分散式系統的跟蹤系統

Zipkin

Twitter開源的參考Google Dapper而開發,使用Apache Cassandra做為資料儲存系統

21                          閱讀筆記

Cutting認為他的成功主要歸功於兩點,一是對自己工作的熱情;二是目標不要定得過大,要踏踏實實,一步一個腳印。

每一個行業都正在致力於圍繞其資訊系統構建資料驅動型運營模式

我們在本世紀取得的大部分進展將來自於對所產生的資料的理解的增加。