開源的搜尋引擎——詳細概述
開源的搜尋引擎
搜尋服務主要分為兩個部分:爬蟲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實現,能執行在HDFS或HBase上,使用C++開發 |
|
Apache Drill |
參照Google Dremel實現 |
|
Apache Tajo |
一個執行在YARN上支援SQL的分散式資料倉庫 |
|
Hiv |
基於Hadoop MapReduce的SQL查詢引擎 |
|
流式計算 |
Facebook Puma |
實時資料流分析 |
Twitter Rainbird |
分散式實時統計系統,如網站的點選統計 |
|
Yahoo S4 |
Java開發的一個通用的、分散式的、可擴充套件的、分割槽容錯的、可插拔的無主架構的流式系統 |
|
Twitter Storm |
使用Java和Clojure實現 |
|
Samza |
samza是一個分散式的流式資料處理框架(streaming processing),它是基於Kafka訊息佇列來實現類實時的流式資料處理的。(準確的說,samza是通過模組化的形式來使用kafka的,因此可以構架在其他訊息佇列框架上,但出發點和預設實現是基於kafka) |
|
DataTorrent |
基於Hadoop2.X構建的實時流式處理和分析平臺,每秒可以處理超過10億個實時事件 |
|
Spark Streaming |
Spark Streaming是一種構建在Spark上的實時計算框架,它擴充套件了Spark處理大規模流式資料的能力。 |
|
Apache Flink |
Apache Flink是一個高效、分散式、基於Java實現的通用大資料分析引擎,它具有分散式 MapReduce一類平臺的高效性、靈活性和擴充套件性以及並行資料庫查詢優化方案,它支援批量和基於流的資料分析,且提供了基於Java和Scala的API。 |
|
迭代計算 |
Apache Hama |
建立在Hadoop上基於BSP(Bulk Synchronous Parallel)的計算框架,模仿了Google的Pregel。 |
Apache Giraph |
建立在Hadoop上的可伸縮的分散式迭代圖處理系統,靈感來自BSP(bulk synchronous parallel)和Google的Pregel |
|
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一類平臺的高效性、靈活性和擴充套件性以及並行資料庫查詢優化方案,它支援批量和基於流的資料分析,且提供了基於Java和Scala的API。 |
|
鍵值儲存 |
LevelDB |
Google開源的高效KV程式設計庫,注意它只是個庫 |
RocksDB |
Facebook開源的,基於Google的LevelDB,但提高了擴充套件性可以執行在多核處理器上 |
|
HyperDex |
下一代KV儲存系統,支援strings、integers、floats、lists、maps和sets等豐富的資料型別 |
|
TokyoCabinet |
日本人Mikio Hirabayashi(平林幹雄)開發的一款DBM資料庫,注意它只是個庫(大名鼎鼎的DBM資料庫qdbm就是Mikio Hirabayashi開發的),讀寫非常快 |
|
Voldemort |
一個分散式鍵值儲存系統,是Amazon Dynamo的一個開源克隆,LinkedIn開源 |
|
Amazon Dynamo |
亞馬遜的KV模式的儲存平臺,無主架構 |
|
Tair |
淘寶出品的高效能、分散式、可擴充套件、高可靠的KV結構儲存系統,專為小檔案優化,並提供簡單易用的介面(類似Map),Tair支援Java和C版本的客戶端 |
|
Apache Accumulo |
一個可靠的、可伸縮的、高效能的排序分散式的KV儲存系統,參照Google Bigtable而設計,建立在Hadoop、Thrift和Zookeeper之上。 |
|
Redi |
使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、單機版KV資料庫。從2010年3月15日起,Redis的開發工作由VMware主持 |
|
Memcache |
Memcached 是一個高效能的分散式記憶體物件快取系統,用於動態Web應用以減輕資料庫負載。它通過在記憶體中快取資料和物件來減少讀取資料庫的次數,從而提高動態、資料庫驅動網站的速度。Memcached基於一個儲存鍵/值對的hashmap。其守護程序(daemon)是用C寫的,但是客戶端可以用任何語言來編寫,並通過Memcached協議與守護程序通訊。 |
|
OceanBas |
支援海量資料的高效能分散式資料庫系統,實現了數千億條記錄、數百TB資料上的跨行跨表事務 |
|
Amazon SimpleDB |
一個可大規模伸縮、用 Erlang編寫的高可用資料儲存 |
|
Vertica |
惠普2011收購Vertica,Vertica是傳統的關係型資料庫,基於列儲存,同時支援MPP,使用標準的SQL查詢,可以和Hadoop/MapReduce進行整合 |
|
Cassandra |
Hadoop成員,Facebook於2008將Cassandra開源,基於O(1)DHT的完全P2P架構 |
|
HyperTable |
搜尋引擎公司Zvents針對Bigtable的C++開源實現 |
|
FoundationDB |
支援ACID事務處理的NoSQL資料庫,提供非常好的效能、資料一致性和操作彈性 |
|
HBas |
Bigtable在Hadoop中的實現,最初是Powerset公司為了處理自然語言搜尋產生的海量資料而開展的專案 |
|
檔案儲存 |
CouchDB |
面向文件的資料儲存 |
MongoDB |
文件資料庫 |
|
Tachyon |
加州大學伯克利分校的AMPLab基於Hadoop的核心元件開發出一個更快的版本Tachyon,它從底層重構了Hadoop平臺。 |
|
KFS |
GFS的C++開源版本 |
|
HDF |
GFS在Hadoop中的實現 |
|
資源管理 |
Twitter Mesos |
Google Borg的翻版 |
Hadoop Yarn |
類似於Mesos |
|
日誌收集系統 |
Facebook Scribe |
Facebook開源的日誌收集系統,能夠從各種日誌源上收集日誌,儲存到一箇中央儲存系統(可以是NFS,分散式檔案系統等)上,以便於進行集中統計分析處理,常與Hadoop結合使用,Scribe用於向HDFS中Push日誌 |
Cloudera Flume |
Cloudera提供的日誌收集系統,支援對日誌的實時性收集 |
|
Logstash |
日誌管理、分析和傳輸工具,可配合kibana、ElasticSearch組建成日誌查詢系統 |
|
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 |
Linkedin於2010年12月份開源的分散式訊息系統,它主要用於處理活躍的流式資料,由Scala寫成 |
|
分散式服務 |
ZooKeepe |
分散式鎖服務,PoxOS演算法的實現,對應Google的Chubby |
RPC |
Apache Avro |
Hadoop中的RPC |
Facebook Thrift |
RPC,支援C++/Java/PHP等眾多語言 |
|
叢集管理 |
Nagios |
監視系統執行狀態和網路資訊的監視系統 |
Ganglia |
UC Berkeley發起的一個開源叢集監視專案,設計用於測量數以千計的節點。 |
|
Apache Ambari |
Hadoop成員,管理和監視Apache Hadoop叢集的開源框架 |
|
基礎設施 |
LevelDB |
Google頂級大牛開發的單機版鍵值資料庫,具有非常高的寫效能 |
SSTable |
源於Google,orted 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 |
基於Solr和Zookeeper的分散式搜尋,Solr4.0的核心元件之一,主要思想是使用Zookeeper作為叢集的配置資訊中心 |
|
Solr |
Solr是基於Lucene的搜尋。 |
|
ElasticSearch |
開源的(Apache2協議),分散式的,RESTful的,構建在Apache Lucene之上的的搜尋引擎。 |
|
Sphinx |
一個基於SQL的全文檢索引擎,可結合MySQL、PostgreSQL做全文檢索,可提供比資料庫本身更專業的搜尋功能,單一索引可達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虛擬機器,XenServer,VMware,Oracle VM,Xen等。 |
|
監控管理 |
Dapper |
Google生產環境下的大規模分散式系統的跟蹤系統 |
Zipkin |
Twitter開源的參考Google Dapper而開發,使用Apache Cassandra做為資料儲存系統 |
21 閱讀筆記
Cutting認為他的成功主要歸功於兩點,一是對自己工作的熱情;二是目標不要定得過大,要踏踏實實,一步一個腳印。
每一個行業都正在致力於圍繞其資訊系統構建資料驅動型運營模式
我們在本世紀取得的大部分進展將來自於對所產生的資料的理解的增加。