开源的搜索引擎
搜索服务主要分为两个部分:爬虫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
下载地址:https://www.elastic.co/products/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认为他的成功主要归功于两点,一是对自己工作的热情;二是目标不要定得过大,要踏踏实实,一步一个脚印。
每一个行业都正在致力于围绕其信息系统构建数据驱动型运营模式
我们在本世纪取得的大部分进展将来自于对所产生的数据的理解的增加。