[思路网注] 本文一共分为上下两部分。咱们将针对大数据开源工具不一样的用处来进行分类,而且附上了官网和部分下载连接,但愿能给作大数据的朋友作个参考。前端
本文一共分为上下两部分。咱们将针对大数据开源工具不一样的用处来进行分类,而且附上了官网和部分下载连接,但愿能给作大数据的朋友作个参考。下面是第一部分。java
查询引擎node
1、Phoenixios
贡献者::Salesforcegit
简介:这是一个Java中间层,可让开发者在Apache HBase上执行SQL查询。Phoenix彻底使用Java编写,代码位于GitHub上,而且提供了一个客户端可嵌入的JDBC驱动。github
Phoenix查询引擎会将SQL查询转换为一个或多个HBase scan,并编排执行以生成标准的JDBC结果集。直接使用HBase API、协同处理器与自定义过滤器,对于简单查询来讲,其性能量级是毫秒,对于百万级别的行数来讲,其性能量级是秒。web
Phoenix最值得关注的一些特性有:redis
嵌入式的JDBC驱动,实现了大部分的java.sql接口,包括元数据API算法
能够经过多部行键或是键/值单元对列进行建模sql
完善的查询支持,能够使用多个谓词以及优化的扫描键
DDL支持:经过CREATE TABLE、DROP TABLE及ALTER TABLE来添加/删除列
版本化的模式仓库:当写入数据时,快照查询会使用恰当的模式
DML支持:用于逐行插入的UPSERT VALUES、用于相同或不一样表之间大量数据传输的UPSERTSELECT、用于删除行的DELETE
经过客户端的批处理实现的有限的事务支持
单表——尚未链接,同时二级索引也在开发当中
紧跟ANSI SQL标准
2、Stinger
贡献者::Hortonworks
简介:原叫Tez,下一代Hive,Hortonworks主导开发,运行在YARN上的DAG计算框架。
某些测试下,Stinger能提高10倍左右的性能,同时会让Hive支持更多的SQL,其主要优势包括:
让用户在Hadoop得到更多的查询匹配。其中包括相似OVER的字句分析功能,支持WHERE查询,让Hive的样式系统更符合SQL模型。
优化了Hive请求执行计划,优化后请求时间减小90%。改动了Hive执行引擎,增长单Hive任务的被秒处理记录数。
在Hive社区中引入了新的列式文件格式(如ORC文件),提供一种更现代、高效和高性能的方式来储存Hive数据。
引入了新的运行时框架——Tez,旨在消除Hive的延时和吞吐量限制。Tez经过消除没必要要的task、障碍同步和对HDFS的读写做业来优化Hive job。这将优化Hadoop内部的执行链,完全加速Hive负载处理。
Stinger官方网站>>>
3、Presto
贡献者::Facebook
简 介:Facebook开源的数据查询引擎Presto,可对250PB以上的数据进行快速地交互式分析。该项目始于2012年秋季开始开发,目前该项目已 经在超过1000名 Facebook雇员中使用,运行超过30000个查询,每日数据在1PB级别。Facebook称 Presto的性能比诸如Hive和 Map*Reduce要好上10倍有多。
Presto当前支持ANSI SQL的大多数特效,包括联合查询、左右联接、子查询以及一些聚合和计算函数;支持近似大相径庭的计数(DISTINCT COUNT)等。
github源代码下载>>>
4、Shark
简 介:Shark即Hive on Spark,本质上是经过Hive的HQL解析,把HQL翻译成Spark上的RDD操做,而后经过Hive的metadata获取数据库里的表信息,实 际HDFS上的数据和文件,会由Shark获取并放到Spark上运算。Shark的特色就是快,彻底兼容Hive,且能够在shell模式下使用 rdd2sql()这样的API,把HQL获得的结果集,继续在scala环境下运算,支持本身编写简单的机器学习或简单分析处理函数,对HQL结果进一 步分析计算。
Shark速度快的缘由除了Spark平台提供的基于内存迭代计算外,在设计上还存在对Spark上进行了必定的改造,主要有
partial DAG execution:对join优化,调节并行粒度,由于Spark自己的宽依赖和窄依赖会影响并行计算和速度
基于列的压缩和存储:把HQL表数据按列存,每列是一个array,存在JVM上,避免了JVM GC低效,而压缩和解压相关的技术是Yahoo!提供的。
结 来讲,Shark是一个插件式的东西,在我现有的Spark和Hive及hadoop-client之间,在这两套均可用的状况下,Shark只要获取 Hive的配置(还有metastore和exec等关键包),Spark的路径,Shark就能利用Hive和Spark,把HQL解析成RDD的转 换,把数据取到Spark上运算和分析。在SQL on Hadoop这块,Shark有别于Impala,Stringer,而这些系统各有本身的设计思路,相对于对MR进行优化和改进的思路,Shark的思 路更加简单明了些。
Shark官方网站>>>
5、Pig
简介:Pig是一种编程语言,它简化了Hadoop常见的工做任务。Pig可加载数据、表达转换数据以及存储最终结果。Pig内置的操做使得半结构化数据变得有意义(如日志文件)。同时Pig可扩展使用Java中添加的自定义数据类型并支持数据转换。
Pig 最大的做用就是对mapreduce算法(框架)实现了一套shell脚本 ,相似咱们一般熟悉的SQL语句,在Pig中称之为Pig Latin,在这套脚本中咱们能够对加载出来的数据进行排序、过滤、求和、分组(group by)、关联(Joining),Pig也能够由用户自定义一些函数对数据集进行操做,也就是传说中的UDF(user-defined functions)。
Pig官方网站>>>
6、ClouderaImpala
贡献者::Cloudera
简 介:Cloudera Impala能够直接为存储在HDFS或HBase中的Hadoop数据提供快速,交互式的SQL查询。除了使用相同的存储平台外,Impala和 Apache Hive同样也使用了相同的元数据,SQL语法(Hive SQL),ODBC驱动和用户接口(Hue Beeswax),这就很方便的为用户提供了一个类似而且统一的平台来进行批量或实时查询。
Cloudera Impala是用来进行大数据查询的补充工具。Impala并无取代像Hive这样基于MapReduce的分布式处理框架。Hive和其它基于 MapReduce的计算框架很是适合长时间运行的批处理做业,例如那些涉及到批量Extract、Transform、Load,即须要进行ETL做 业。
Impala提供了:
数据科学家或数据分析师已经熟知的SQL接口
可以在Apache Hadoop的大数据中进行交互式数据查询
Single system for big data processing and analytics so customers can avoid costly modeling and ETL just for analytics
ClouderaImpala官方网站>>>
7、ApacheDrill
贡献者::MapR
简 介:Apache Drill是是一个可以对大数据进行交互分析、开源的分布式系统,且基于Google Dremel实现,它可以运行在上千个节点的服务器集群上,且能在几秒内处理PB级或者万亿条的数据记录。Drill可以帮助企业用户快速、高效地进行 Hadoop数据查询和企业级大数据分析。Drill于2012年8月份由Apache推出。
从 Drill官方对其架构的介绍中得知,其具备适于实时的分析和快速的应用开发、适于半结构化/嵌套数据的分析、兼容现有的SQL环境和Apache Hive等特征。另外,Drill的核心模块是Drillbit服务,该服务模块包括远程访问子模块、SQL解析器、查询优化器、任务计划执行引擎、存储 插件接口(DFS、HBase、Hive等的接口)、分布式缓存模块等几部分,以下图所示:
ApacheDrill官方网站>>>
8、ApacheTajo
简 介:Apache Tajo项目的目的是在HDFS之上构建一个先进的数据仓库系统。Tajo将本身标榜为一个“大数据仓库”,可是它好像和以前介绍的那些低延迟查询引擎类 似。虽然它支持外部表和Hive数据集(经过HCatalog),可是它的重点是数据管理,提供低延迟的数据访问,以及为更传统的ETL提供工具。它也需 要在数据节点上部署Tajo特定的工做进程。
Tajo的功能包括:
ANSI SQL兼容
JDBC驱动
集成Hive metastore可以访问Hive数据集
一个命令行客户端
一个自定义函数API
ApacheTajo官方网站>>>
9、Hive
简 介:hive是基于Hadoop的一个数据仓库工具,能够将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,能够将sql语句转换为 MapReduce任务进行运行。 其优势是学习成本低,能够经过类SQL语句快速实现简单的MapReduce统计,没必要开发专门的MapReduce应用,十分适合数据仓库的统计分析。
Hive官方网站>>>
流式计算
1、FacebookPuma
贡献者:Facebook
简介:实时数据流分析
2、Twitter Rainbird
贡献者:Twitter
简介:Rainbird一款基于Zookeeper,Cassandra,Scribe,Thrift的分布式实时统计系统,这些基础组件的基本功能以下:
Zookeeper,Hadoop子项目中的一款分布式协调系统,用于控制分布式系统中各个组件中的一致性。
Cassandra,NoSQL中一款很是出色的产品,集合了Dynamo和Bigtable特性的分布式存储系统,用于存储须要进行统计的数据,统计数据,而且提供客户端进行统计数据的查询。(须要使用分布式Counter补丁CASSANDRA-1072)
Scribe,Facebook开源的一款分布式日志收集系统,用于在系统中将各个须要统计的数据源收集到Cassandra中。
Thrift,Facebook开源的一款跨语言C/S网络通讯框架,开发人员基于这个框架能够轻易地开发C/S应用。
用处
Rainbird能够用于实时数据的统计:
统计网站中每个页面,域名的点击次数
内部系统的运行监控(统计被监控服务器的运行状态)
记录最大值和最小值
3、Yahoo S4
贡献者:Yahoo
简 介:S4(Simple Scalable Streaming System)最初是Yahoo!为提升搜索广告有效点击率的问题而开发的一个平台,经过统计分析用户对广告的点击率,排除相关度低的广告,提高点击率。 目前该项目刚启动不久,因此也能够理解为是他们提出的一个分布式流计算(Distributed Stream Computing)的模型。
S4的设计目标是:
·提供一种简单的编程接口来处理数据流
·设计一个能够在普通硬件之上可扩展的高可用集群。
·经过在每一个处理节点使用本地内存,避免磁盘I/O瓶颈达到最小化延迟
·使用一个去中心的,对等架构;全部节点提供相同的功能和职责。没有担负特殊责任的中心节点。这大大简化了部署和维护。
·使用可插拔的架构,使设计尽量的即通用又可定制化。
·友好的设计理念,易于编程,具备灵活的弹性
Yahoo S4官方网站>>>
4、TwitterStorm
贡献者:Twitter
简介:Storm是Twitter开源的一个相似于Hadoop的实时数据处理框架,它原来是由BackType开发,后BackType被Twitter收购,将Storm做为Twitter的实时数据分析系统。
实时数据处理的应用场景很普遍,例如商品推荐,广告投放,它能根据当前情景上下文(用户偏好,地理位置,已发生的查询和点击等)来估计用户点击的可能性并实时作出调整。
storm的三大做用领域:
1.信息流处理(Stream Processing)
Storm能够用来实时处理新数据和更新数据库,兼具容错性和可扩展性,它 能够用来处理源源不断的消息,并将处理以后的结果保存到持久化介质中。
2.连续计算(Continuous Computation)
Storm能够进行连续查询并把结果即时反馈给客户,好比将Twitter上的热门话题发送到客户端。
3.分布式远程过程调用(Distributed RPC)
除此以外,Storm也被普遍用于如下方面:
精确的广告推送
实时日志的处理
TwitterStorm官方网站>>>
迭代计算
1、Apache Hama
简介:Apache Hama是一个纯BSP(Bulk Synchronous Parallel)计算框架,模仿了Google的Pregel。用来处理大规模的科学计算,特别是矩阵和图计算。
创建在Hadoop上的分布式并行计算模型。
基于Map/Reduce和 Bulk Synchronous的实现框架。
运行环境须要关联Zookeeper、HBase、HDFS组件。
Hama中有2个主要的模型:
– 矩阵计算(Matrix package)
– 面向图计算(Graph package)
2、ApacheGiraph
代码托管地址:
简介:Apache Giraph是一个可伸缩的分布式迭代图处理系统,灵感来自BSP(bulk synchronous parallel)和Google的Pregel,与它们 区别于则是是开源、基于Hadoop的架构等。
Giraph处理平台适用于运行大规模的逻辑计算,好比页面排行、共享连接、基于个性化排行等。Giraph专一于社交图计算,被Facebook做为其Open Graph工具的核心,几分钟内处理数万亿次用户及其行为之间的链接。
3、HaLoop
简介:迭代的MapReduce,HaLoop——适用于迭代计算的Hadoop。
Hadoop与HaLoop的不一样
与Hadoop比较的四点改变:
1.提供了一套新的编程接口,更加适用于迭代计算;
HaLoop给迭代计算一个抽象的递归公式:
2.HaLoop的master进行job内的循环控制,直到迭代计算结束;
3.Task Scheduler也进行了修改,使得任务可以尽可能知足data locality
4.slave nodes对数据进行cache并index索引,索引也以文件的形式保存在本地磁盘。
HaLoop官网>>>
4、Twister
简介:Twister, 迭代式MapReduce框架,Twister是由一个印度人开发的,其架构以下:
在 Twister中,大文件不会自动被切割成一个一个block,于是用户需提早把文件分红一个一个小文件,以供每一个task处理。在map阶段,通过 map()处理完的结果被放在分布式内存中,而后经过一个broker network(NaradaBroking系统)将数据push给各个reduce task(Twister假设内存足够大,中间数据能够所有放在内存中);在reduce阶段,全部reduce task产生的结果经过一个combine操做进行归并,此时,用户能够进行条件断定, 肯定迭代是否结束。combine后的数据直接被送给map task,开始新一轮的迭代。为了提升容错性,Twister每隔一段时间会将map task和reduce task产生的结果写到磁盘上,这样,一旦某个task失败,它能够从最近的备份中获取输入,从新计算。
为 了避免每次迭代从新建立task,Twister维护了一个task pool,每次须要task时直接从pool中取。在Twister中,全部消息和数据都是经过broker network传递的,该broker network是一个独立的模块,目前支持NaradaBroking和ActiveMQ。
离线计算
1、HadoopMapReduce
简 介:MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念”Map(映射)”和”Reduce(归约)”,和它们的主要思 想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的状况下,将本身的程序运行在分布式系 统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证全部映射的键值对中 的每个共享相同的键组。
HadoopMapReduce官方网站>>>
2、Berkeley Spark
简 介:Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行,Spark,拥有Hadoop MapReduce所具备的优势;但不一样于MapReduce的是Job中间输出结果能够保存在内存中,从而再也不须要读写HDFS,所以Spark能更好 地适用于数据挖掘与机器学习等须要迭代的map reduce的算法。
3、DataTorrent
简介:DataTorrent基于Hadoop 2.x构建,是一个实时的、有容错能力的数据流式处理和分析平台,它使用本地Hadoop应用程序,而这些应用程序能够与执行其它任务,如批处理,的应用程序共存。该平台的架构以下图所示:
相关文章:DataTorrent 1.0每秒处理超过10亿个实时事件
DataTorrent将数据分析速度从“实时”提高至“如今时”
键值存储
1、LevelDB
贡献者:Google
简介:Leveldb是一个google实现的很是高效的kv数据库,目前的版本1.2可以支持billion级别的数据量了。 在这个数量级别下还有着很是高的性能,主要归功于它的良好的设计。特别是LMS算法。
LevelDB是单进程的服务,性能很是之高,在一台4核Q6600的CPU机器上,每秒钟写数据超过40w,而随机读的性能每秒钟超过10w。
此处随机读是彻底命中内存的速度,若是是不命中 速度大大降低。
LevelDB官方网站>>>
2、RocksDB
贡献者:facebook
简 介:RocksDB虽然在代码层面上是在LevelDB原有的代码上进行开发的,但却借鉴了Apache HBase的一些好的idea。在云计算横行的年代,开口不离Hadoop,RocksDB也开始支持HDFS,容许从HDFS读取数据。RocksDB 支持一次获取多个K-V,还支持Key范围查找。LevelDB只能获取单个Key。
RocksDB除了简单的Put、Delete操做,还提供了一个Merge操做,说是为了对多个Put操做进行合并。
RocksDB提供一些方便的工具,这些工具包含解析sst文件中的K-V记录、解析MANIFEST文件的内容等。RocksDB支持多线程合并,而LevelDB是单线程合并的。
RocksDB官方网站>>>
3、HyperDex
贡献者:Facebook
HyperDex是一个分布式、可搜索的键值存储系统,特性以下:
分布式KV存储,系统性能可以随节点数目线性扩展
吞吐和延时都能秒杀如今风头正劲的MonogDB,吞吐甚至强于Redis
使用了hyperspace hashing技术,使得对存储的K-V的任意属性进行查询成为可能
官网:http://hyperdex.org/
4、TokyoCabinet
日 本人MikioHirabayashi(平林干雄)开发的一款DBM数据库。Tokyo Cabinet是一个DBM的实现。这里的数据库由一系列key-value对的记录构成。key和value均可以是任意长度的字节序列,既能够是二进 制也能够是字符串。这里没有数据类型和数据表的概念。
当 作为Hash表数据库使用时,每一个key必须是不一样的,所以没法存储两个key相同的值。提供了如下访问方法:提供key,value参数来存储,按 key删除记录,按key来读取记录,另外,遍历key也被支持,虽然顺序是任意的不能被保证。这些方法跟Unix标准的DBM,例如GDBM,NDBM 等等是相同的,可是比它们的性能要好得多(所以能够替代它们) 。下一代KV存储系统,支持strings、integers、floats、lists、maps和sets等丰富的数据类型。
TokyoCabinet官方网站>>>
5、Voldemort
Voldemort是一个分布式键值存储系统,是Amazon’s Dynamo的一个开源克隆。特性以下:
支持自动复制数据到多个服务器上。
支持数据自动分割因此每一个服务器只包含总数据的一个子集。
提供服务器故障透明处理功能。
支持可拨插的序化支持,以实现复杂的键-值存储,它可以很好的5.集成经常使用的序化框架如:Protocol Buffers、Thrift、Avro和Java Serialization。
数据项都被标识版本可以在发生故障时尽可能保持数据的完整性而不会影响系统的可用性。
每一个节点相互独立,互不影响。
支持可插拔的数据放置策略
官网:http://project-voldemort.com/
6、AmazonDynamo
贡献者:亚马逊
简 介:Amazon Dynamo是一个经典的分布式Key-Value存储系统,具有去中心化,高可用性,高扩展性的特色,可是为了达到这个目标在不少场景中牺牲了一致性。 Dynamo在Amazon中获得了成功的应用,可以跨数据中心部署于上万个结点上提供服务,它的设计思想也被后续的许多分布式系统借鉴。如近来火热的 Cassandra,实际上就是基本照搬了Dynamo的P2P架构,同时融合了BigTable的数据模型及存储算法。
Amazon Dynamo官方网站>>>
7、Tair
贡献者:淘宝
简 介:tair是淘宝本身开发的一个分布式key/value存储引擎.tair分为持久化和非持久化两种使用方式. 非持久化的tair能够当作是一个分布式缓存. 持久化的tair将数据存放于磁盘中. 为了解决磁盘损坏致使数据丢失,tair能够配置数据的备份数目,tair自动将一份数据的不一样备份放到不一样的主机上, 当有主机发生异常, 没法正常提供服务的时候, 其于的备份会继续提供服务.tair的整体结构
tair 做为一个分布式系统, 是由一个中心控制节点和一系列的服务节点组成. 咱们称中心控制节点为config server. 服务节点是data server.config server负责管理全部的data server, 维护data server的状态信息.data server对外提供各类数据服务, 并以心跳的形式将自身情况汇报给config server.config server是控制点, 并且是单点, 目前采用一主一备的形式来保证其可靠性. 全部的data server地位都是等价的.
8、ApacheAccumulo
Apache Accumulo是一个可靠的、可伸缩的、高性能的排序分布式的Key-Value存储解决方案,基于单元访问控制以及可定制的服务器端处理。 Accumulo使用Google BigTable设计思路,基于Apache Hadoop、Zookeeper和 Thrift构建。
官网:http://accumulo.apache.org/
9、Redis
Redis 是一个高性能的key-value存储系统,和Memcached相似,它支持存储的value类型相对更多,包括string(字符串)、list(链 表)、set(集合)和zset(有序集合)。与memcached同样,为了保证效率,数据都是缓存在内存中,区别的是Redis会周期性的把更新的数 据写入磁盘或者把修改操做写入追加的记录文件,而且在此基础上实现了主从同步。
Redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合能够对关系数据库起到很好的补充做用。它提供了Python、Ruby、Erlang、PHP客户端,使用很方便。
官网:http://redis.io/
表格存储
1、OceanBase
贡献者:阿里巴巴
相关文章:26页PPT解密支撑支付宝交易的分布式数据库系统——OceanBase
简 介:OceanBase是一个支持海量数据的高性能分布式数据库系统,实现了数千亿条记录、数百TB数据上的跨行跨表事务,由淘宝核心系统研发部、运维、 DBA、广告、应用研发等部门共同完成。在设计和实现OceanBase的时候暂时摒弃了不紧急的DBMS的功能,例如临时表,视图(view),研发团 队把有限的资源集中到关键点上,当前OceanBase主要解决数据更新一致性、高性能的跨表读事务、范围查询、join、数据全量及增量dump、批量 数据导入。
目前OceanBase已经应用于淘宝收藏夹,用于存储淘宝用户收藏条目和具体的商品、店铺信息,天天支持4~5千万的更新操做。等待上线的应用还包括CTU、SNS等,天天更新超过20亿,更新数据量超过2.5TB,并会逐步在淘宝内部推广。
OceanBase 0.3.1在Github开源,开源版本为Revision:12336。
官网:http://alibaba.github.io/oceanbase/
2、AmazonSimpleDB
贡献者:亚马逊
Amazon SimpleDB是一个分散式数据库,以Erlang撰写。同与Amazon EC2和亚马逊的S3同样做为一项Web服务,属于亚马逊网络服务的一部分。
正如EC2和S3,SimpleDB的按照存储量,在互联网上的传输量和吞吐量收取费用。 在2008年12月1日,亚马逊推出了新的订价策略,提供了免费1 GB的数据和25机器小时的自由层(Free Tire)。 将其中的数据转移到其余亚马逊网络服务是免费的。
它是一个可大规模伸缩、用Erlang编写的高可用数据存储。
官网:http://aws.amazon.com/cn/simpledb/
3、Vertica
贡献者:惠普
简 介:惠普2011年2月份起始3月21号完成收购Vertica。Vertica基于列存储。基于列存储的设计相比传统面向行存储的数据库具备巨大的优 势。同时Vertica支持MPP(massively parallel processing)等技术,查询数据时Vertica只需取得须要的列,而不是被选择行的全部数据,其平均性能可提升50x-1000x倍。(查询性 能高速度快)
Vertica的设计者屡次表示他们的产品围绕着高性能和高可用性设计。因为对MPP技术的支持,可提供对粒度,可伸缩性和可用性的优点。每一个节点彻底独立运做,彻底无共享架构,下降对共享资源的系统竞争。
Vertica的数据库使用标准的SQL查询,同时Vertica的架构很是适合云计算,包括虚拟化,分布式多节点运行等,而且能够和Hadoop/MapReduce进行集成。
Vertica官网:http://www.vertica.com/
4、Cassandra
贡献者:facebook
相关文章:开源分布式NoSQL数据库系统——Cassandra Cassandra与HBase的大数据对决 谁是胜者?
简 介:Cassandra是一套开源分布式NoSQL数据库系统。它最初由Facebook开发,用于储存收件箱等简单格式数据,集 GoogleBigTable的数据模型与Amazon Dynamo的彻底分布式的架构于一身Facebook于2008将Cassandra开源,此后,因为Cassandra良好的可扩放性,被Digg、 Twitter等知名Web 2.0网站所采纳,成为了一种流行的分布式结构化数据存储方案。
Cassandra 是一个混合型的非关系的数据库,相似于Google的BigTable。其主要功能比Dynamo(分布式的Key-Value存储系统)更丰富,但支持 度却不如文档存储MongoDB(介于关系数据库和非关系数据库之间的开源产品,是非关系数据库当中功能最丰富,最像关系数据库的。支持的数据结构很是松 散,是相似json的bjson格式,所以能够存储比较复杂的数据类型)。Cassandra最初由Facebook开发,后转变成了开源项目。它是一个 网络社交云计算方面理想的数据库。以Amazon专有的彻底分布式的Dynamo为基础,结合了Google BigTable基于列族(Column Family)的数据模型。P2P去中心化的存储。不少方面均可以称之为Dynamo 2.0。
Cassandra官网:http://cassandra.apache.org/
5、HyperTable
简介:Hypertable是一个开源、高性能、可伸缩的数据库,它采用与Google的Bigtable类似的模型。在过去数年中,Google为在PC集群 上运行的可伸缩计算基础设施设计建造了三个关键部分。
第 一个关键的基础设施是Google File System(GFS),这是一个高可用的文件系统,提供了一个全局的命名空间。它经过跨机器(和跨机架)的文件数据复制来达到高可用性,并所以免受传统 文件存储系统没法避免的许多失败的影响,好比电源、内存和网络端口等失败。第二个基础设施是名为Map-Reduce的计算框架,它与GFS紧密协做,帮 助处理收集到的海量数据。第三个基础设施是Bigtable,它是传统数据库的替代。Bigtable让你能够经过一些主键来组织海量数据,并实现高效的 查询。Hypertable是Bigtable的一个开源实现,而且根据咱们的想法进行了一些改进。
HyperTable官网:http://hypertable.org/
6、FoundationDB
简介:支持ACID事务处理的NoSQL数据库,提供很是好的性能、数据一致性和操做弹性。
2015 年1月2日,FoundationDB已经发布了其key-value数据库的3.0版本,主要专一于可伸缩性和性能上的改善。FoundationDB 的CEO David Rosenthal在一篇博客上宣布了新的版本,其中展现了FoundationDB 3.0在可伸缩性方面的数据,它能够在一个32位的c3.8xlarge EC2实例上每秒写入1440万次;这在性能上是以前版本的36倍。
除了性能和可伸缩性的改善以外,FoundationDB 3.0还包含了对监控支持的改善。这种监控机制不只仅是简单的机器检查,它添加了对多种潜在的硬件瓶颈的诊断,而且把那些高层级的信息整合到现有监控基础架构中。
官网:https://foundationdb.com/
七:HBase
贡献者:Fay Chang所撰写的“Bigtable
简 介:HBase是一个分布式的、面向列的开源数据库,该技术来源于Fay Chang所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储同样,HBase在Hadoop之上提供了相似于Bigtable的能力。HBase是Apache的Hadoop 项目的子项目。HBase不一样于通常的关系数据库,它是一个适合于非结构化数据存储的数据库。另外一个不一样的是HBase基于列的而不是基于行的模式。
官网:http://hbase.apache.org/
文件存储
1、CouchDB
简 介:CouchDB是用Erlang开发的面向文档的数据库系统,最近刚刚发布了1.0版本(2010年7月14日)。CouchDB不是一个传统的关系 数据库,而是面向文档的数据库,其数据存储方式有点相似lucene的index文件格式,CouchDB最大的意义在于它是一个面向web应用的新一代 存储系统,事实上,CouchDB的口号就是:下一代的Web应用存储系统。
特色:
1、 CouchDB是分布式的数据库,他能够把存储系统分布到n台物理的节点上面,而且很好的协调和同步节点之间的数据读写一致性。这固然也得靠Erlang 无与伦比的并发特性才能作到。对于基于web的大规模应用文档应用,分布式可让它没必要像传统的关系数据库那样分库拆表,在应用代码层进行大量的改动。
2、CouchDB是面向文档的数据库,存储半结构化的数据,比较相似lucene的index结构,特别适合存储文档,所以很适合CMS,电话本,地址本等应用,在这些应用场合,文档数据库要比关系数据库更加方便,性能更好。
3、CouchDB支持REST API,可让用户使用JavaScript来操做CouchDB数据库,也能够用JavaScript编写查询语句,咱们能够想像一下,用AJAX技术结合CouchDB开发出来的CMS系统会是多么的简单和方便。
其实CouchDB只是Erlang应用的冰山一角,在最近几年,基于Erlang的应用也获得的蓬勃的发展,特别是在基于web的大规模,分布式应用领域,几乎都是Erlang的优点项目。
官网:http://couchdb.apache.org/
2、MongoDB
简介:MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构很是松散,是相似json的bson 格式,所以能够存储比较复杂的数据类型。Mongo最大的特色是他支持的查询语言很是强大,其语法有点相似于面向对象的查询语言,几乎能够实现相似关系数 据库单表查询的绝大部分功能,并且还支持对数据创建索引。
第二部分主要收集整理的内容主要有日志收集系统、消息系统、分布式服务、集群管理、RPC、基础设施、搜索引擎、Iaas和监控管理等大数据开源工具。
日志收集系统
1、Facebook Scribe
贡献者:Facebook
简介:Scribe是Facebook开源的日志收集系统,在Facebook内部已经获得大量的应用。它 可以从各类日志源上收集日志,存储到一个中央存储系统(能够是NFS,分布式文件系统等)上,以便于进行集中统计分析处理。它为日志的“分布式收集,统一 处理”提供了一个可扩展的,高容错的方案。当中央存储系统的网络或者机器出现故障时,scribe会将日志转存到本地或者另外一个位置,当中央存储系统恢复 后,scribe会将转存的日志从新传输给中央存储系统。其一般与Hadoop结合使用,scribe用于向HDFS中push日志,而Hadoop经过 MapReduce做业进行按期处理。
Scribe的系统架构
代码托管:https://github.com/facebook/scribe
2、Cloudera Flume
贡献者:Cloudera
简介:Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各种数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各类数据接受方(可定制)的能力。
Flume提供了从console(控制台)、RPC(Thrift-RPC)、text(文件)、tail(UNIX tail)、syslog(syslog日志系统,支持TCP和UDP等2种模式),exec(命令执行)等数据源上收集数据的能力。
当前Flume有两个版本Flume 0.9X版本的统称Flume-og,Flume1.X版本的统称Flume-ng。因为Flume-ng通过重大重构,与Flume-og有很大不一样,使用时请注意区分。
Cloudera Flume构架:
官网:http://flume.apache.org/
3、logstash
简介:logstash 是一个应用程序日志、事件的传输、处理、管理和搜索的平台。你能够用它来统一对应用程序日志进行收集管理,提供 Web 接口用于查询和统计。他能够对你的日志进行收集、分析,并将其存储供之后使用(如,搜索),您能够使用它。说到搜索,logstash带有一个web界 面,搜索和展现全部日志。
官网:http://www.logstash.net/
4、kibana
简介:Kibana 是一个为 Logstash 和 ElasticSearch 提供的日志分析的 Web 接口。可以使用它对日志进行高效的搜索、可视化、分析等各类操做。kibana 也是一个开源和免费的工具,他能够帮助您汇总、分析和搜索重要数据日志并提供友好的web界面。他能够为 Logstash 和 ElasticSearch 提供的日志分析的 Web 界面。
主页: http://kibana.org/
代码托管: https://github.com/rashidkpc/Kibana/downloads
消息系统
1、StormMQ
简介:MQMessageQueue消息队列产品 StormMQ,是一种服务程序。
官网:http://stormmq.com/
2、ZeroMQ
简介:这是个相似于Socket的一系列接口,他跟Socket的区别是:普通的socket是端到端的 (1:1的关系),而ZMQ倒是能够N:M 的关系,人们对BSD套接字的了解较多的是点对点的链接,点对点链接须要显式地创建链接、销毁链接、选择协议(TCP/UDP)和处理错误等,而ZMQ屏 蔽了这些细节,让你的网络编程更为简单。ZMQ用于node与node间的通讯,node能够是主机或者是进程。
引用官方的说法: “ZMQ(如下ZeroMQ简称ZMQ)是一个简单好用的传输层,像框架同样的一个socket library,他使得Socket编程更加简单、简洁和性能更高。是一个消息处理队列库,可在多个线程、内核和主机盒之间弹性伸缩。ZMQ的明确目标是 “成为标准网络协议栈的一部分,以后进入Linux内核”。如今还未看到它们的成功。可是,它无疑是极具前景的、而且是人们更加须要的“传统”BSD套接 字之上的一 层封装。ZMQ让编写高性能网络应用程序极为简单和有趣。”
官网:http://zeromq.org/
3、RabbitMQ
简介:RabbitMQ是一个受欢迎的消息代理,一般用于应用程序之间或者程序的不一样组件之间经过消息来进行集成。本文简单介绍了如何使用 RabbitMQ,假定你已经配置好了rabbitmq服务器。
RabbitMQ是用Erlang,对于主要的编程语言都有驱动或者客户端。咱们这里要用的是Java,因此先要得到Java客户端。
像RabbitMQ这样的消息代理可用来模拟不一样的场景,例如点对点的消息分发或者订阅/推送。咱们的程序足够简单,有两个基本的组件,一个生产者用于产生消息,还有一个消费者用来使用产生的消息。
官网:https://www.rabbitmq.com/
4、Apache ActiveMQ
简介:ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个彻底支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已是好久的事情了,可是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。
特性:
⒈ 多种语言和协议编写客户端。语言: Java,C,C++,C#,Ruby,Perl,Python,PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
⒉ 彻底支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)
⒊ 对Spring的支持,ActiveMQ能够很容易内嵌到使用Spring的系统里面去,并且也支持Spring2.0的特性
⒋ 经过了常见J2EE服务器(如 Geronimo,JBoss 4,GlassFish,WebLogic)的测试,其中经过JCA 1.5 resource adaptors的配置,可让ActiveMQ能够自动的部署到任何兼容J2EE 1.4 商业服务器上
⒌ 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
⒍ 支持经过JDBC和journal提供高速的消息持久化
⒎ 从设计上保证了高性能的集群,客户端-服务器,点对点
⒏ 支持Ajax
⒐ 支持与Axis的整合
⒑ 能够很容易得调用内嵌JMS provider,进行测试
官网:http://activemq.apache.org/
5、Jafka
贡献者:LinkedIn
简介:Jafka 是一个开源的、高性能的、跨语言分布式消息系统,使用GitHub托管。Jafka 最先是由Apache孵化的Kafka(由LinkedIn捐助给Apache)克隆而来。因为是一个开放式的数据传输协议,所以除了Java开发语言受 到支持,Python、Ruby、C、C++等其余语言也可以很好的获得支持。
特性:
一、消息持久化很是快,服务端存储消息的开销为O(1),而且基于文件系统,可以持久化TB级的消息而不损失性能。
二、吞吐量取决于网络带宽。
三、彻底的分布式系统,broker、producer、consumer都原生自动支持分布式。自动实现复杂均衡。
四、内核很是小,整个系统(包括服务端和客户端)只有一个272KB的jar包,内部机制也不复杂,适合进行内嵌或者二次开发 。整个服务端加上依赖组件共3.5MB。
五、消息格式以及通讯机制很是简单,适合进行跨语言开发。目前自带的Python3.x的客户端支持发送消息和接收消息。
官网:http://kafka.apache.org/
6、Apache Kafka
贡献者:LinkedIn
简介:Apache Kafka是由Apache软件基金会开发的一个开源消息系统项目,由Scala写成。Kafka最初是由LinkedIn开发,并于2011年初开源。 2012年10月从Apache Incubator毕业。该项目的目标是为处理实时数据提供一个统1、高通量、低等待的平台。
Kafka是一个分布式的、分区的、多复本的日志提交服务。它经过一种独一无二的设计提供了一个消息系统的功能。
Kafka集群能够在一个指定的时间内保持全部发布上来的消息,无论这些消息有没有被消费。打个比方,若是这个时间设置为两天,那么在消息发布 的两天之内,这条消息都是能够被消费的,可是在两天后,这条消息就会被系统丢弃以释放空间。Kafka的性能不会受数据量的大小影响,所以保持大量的数据 不是一个问题。
官网:http://kafka.apache.org/
分布式服务
1、ZooKeeper
贡献者:Google
简介:ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。
ZooKeeper是以Fast Paxos算法为基础的,paxos算法存在活锁的问题,即当有多个proposer交错提交时,有可能互相排斥致使没有一个proposer能提交成 功,而Fast Paxos做了一些优化,经过选举产生一个leader,只有leader才能提交propose,具体算法可见Fast Paxos。所以,要想弄懂ZooKeeper首先得对Fast Paxos有所了解。
架构:
官网:http://zookeeper.apache.org/
RPC
(Remote Procedure Call Protocol)——远程过程调用协议
1、Apache Avro
简介:Apache Avro是Hadoop下的一个子项目。它自己既是一个序列化框架,同时也实现了RPC的功能。Avro官网描述Avro的特性和功能以下:
丰富的数据结构类型;
快速可压缩的二进制数据形式;
存储持久数据的文件容器;
提供远程过程调用RPC;
简单的动态语言结合功能。
相比于Apache Thrift 和Google的Protocol Buffers,Apache Avro具备如下特色:
支持动态模式。Avro不须要生成代码,这有利于搭建通用的数据处理系统,同时避免了代码入侵。
数据无须加标签。读取数据前,Avro可以获取模式定义,这使得Avro在数据编码时只须要保留更少的类型信息,有利于减小序列化后的数据大小。
官网:http://avro.apache.org/
2、Facebook Thrift
贡献者:Facebook
简介:Thrift源于大名鼎鼎的facebook之手,在2007年facebook提交Apache基金会将Thrift做为一个开源项 目,对于当时的facebook来讲创造thrift是为了解决facebook系统中各系统间大数据量的传输通讯以及系统之间语言环境不一样须要跨平台的 特性。
thrift能够支持多种程序语言,例如: C++, C#, Cocoa, Erlang, Haskell, Java, Ocami, Perl, PHP, Python, Ruby, Smalltalk. 在多种不一样的语言之间通讯thrift能够做为二进制的高性能的通信中间件,支持数据(对象)序列化和多种类型的RPC服务。
Thrift适用于程序对程 序静态的数据交换,须要先肯定好他的数据结构,他是彻底静态化的,当数据结构发生变化时,必须从新编辑IDL文件,代码生成,再编译载入的流程,跟其余 IDL工具相比较能够视为是Thrift的弱项,Thrift适用于搭建大型数据交换及存储的通用工具,对于大型系统中的内部数据传输相对于JSON和 xml不管在性能、传输大小上有明显的优点。
Thrift 主要由5个部分组成:
· 类型系统以及 IDL 编译器:负责由用户给定的 IDL 文件生成相应语言的接口代码
· TProtocol:实现 RPC 的协议层,能够选择多种不一样的对象串行化方式,如 JSON, Binary。
· TTransport:实现 RPC 的传输层,一样能够选择不一样的传输层实现,如socket, 非阻塞的 socket, MemoryBuffer 等。
· TProcessor:做为协议层和用户提供的服务实现之间的纽带,负责调用服务实现的接口。
· TServer:聚合 TProtocol, TTransport 和 TProcessor 几个对象。
上述的这5个部件都是在 Thrift 的源代码中经过为不一样语言提供库来实现的,这些库的代码在 Thrift 源码目录的 lib 目录下面,在使用 Thrift 以前须要先熟悉与本身的语言对应的库提供的接口。
Facebook Thrift构架:
官网:http://thrift.apache.org/
集群管理
1、Nagios
简介:Nagios是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。
Nagios可运行在Linux/Unix平台之上,同时提供一个可选的基于浏览器的WEB界面以方便系统管理人员查看网络状态,各类系统问题,以及日志等等。
官网:http://www.nagios.org/
2、Ganglia
简介:Ganglia是UC Berkeley发起的一个开源集群监视项目,设计用于测量数以千计的节点。Ganglia的核心包含gmond、gmetad以及一个Web前端。主要 是用来监控系统性能,如:cpu 、mem、硬盘利用率, I/O负载、网络流量状况等,经过曲线很容易见到每一个节点的工做状态,对合理调整、分配系统资源,提升系统总体性能起到重要做用。
官网:http://ganglia.sourceforge.net/
3、Apache Ambari
简介:Apache Ambari是一种基于Web的工具,支持Apache Hadoop集群的供应、管理和监控。Ambari目前已支持大多数Hadoop组件,包括HDFS、MapReduce、Hive、Pig、 Hbase、Zookeper、Sqoop和Hcatalog等。
Apache Ambari 支持HDFS、MapReduce、Hive、Pig、Hbase、Zookeper、Sqoop和Hcatalog等的集中管理。也是5个顶级hadoop管理工具之一。
Ambari主要取得了如下成绩:
经过一步一步的安装向导简化了集群供应。
预先配置好关键的运维指标(metrics),能够直接查看Hadoop Core(HDFS和MapReduce)及相关项目(如HBase、Hive和HCatalog)是否健康。
支持做业与任务执行的可视化与分析,可以更好地查看依赖和性能。
经过一个完整的RESTful API把监控信息暴露出来,集成了现有的运维工具。
用户界面很是直观,用户能够轻松有效地查看信息并控制集群。
Ambari使用Ganglia收集度量指标,用Nagios支持系统报警,当须要引发管理员的关注时(好比,节点停机或磁盘剩余空间不足等问题),系统将向其发送邮件。
此外,Ambari可以安装安全的(基于Kerberos)Hadoop集群,以此实现了对Hadoop 安全的支持,提供了基于角色的用户认证、受权和审计功能,并为用户管理集成了LDAP和Active Directory。
官网:http://ambari.apache.org/
基础设施
1、LevelDB
贡献者:Jeff Dean和Sanjay Ghemawat
简介:Leveldb是一个google实现的很是高效的kv数据库,目前的版本1.2可以支持 billion级别的数据量了。 在这个数量级别下还有着很是高的性能,主要归功于它的良好的设计。特别是LMS算法。LevelDB 是单进程的服务,性能很是之高,在一台4核Q6600的CPU机器上,每秒钟写数据超过40w,而随机读的性能每秒钟超过10w。
Leveldb框架:
官网:http://code.google.com/p/leveldb/
2、SSTable
简介:若是说Protocol Buffer是谷歌独立数据记录的通用语言 ,那么有序字符串表(SSTable,Sorted String Table)则是用于存储,处理和数据集交换的最流行的数据输出格式。正如它的名字自己,SSTable是有效存储大量键-值对的简单抽象,对高吞吐 量顺序读/写进行了优化。
SSTable是Bigtable中相当重要的一块,对于LevelDB来讲也是如此。
3、RecordIO
贡献者:Google
简介:咱们你们都在用文件来存储数据。文件是存储在磁盘上的。若是在一些不稳定的介质上,文件很容损坏。即时文件某个位置出现一点小小的问题,整个文件就废了。
下面我来介绍Google的一个作法,能够比较好的解决这个问题。那就是recordio文件格式。recoidio的存储单元是一个一个record。这个record能够根据业务的须要自行定义。但Google有一种建议的处理方式就是使用protobuf。
reocordio底层的格式其实很简单。一个record由四部分组成:
MagicNumber (32 bits)
Uncompressed data payload size (64 bits)
Compressed data payload size (64 bits), or 0 if the data is not compressed
Payload, possibly compressed.
详细格式以下图所示:
到这里,你们可能已经知道,recordio之因此能对付坏数据,其实就是在这个MagicNumber(校验值)。
4、Flat Buffers
贡献者:Google
简介:谷歌开源高效、跨平台的序列化库FlatBuffers。
该库的构建是专门为游戏开发人员的性能需求提供支持,它将序列化数据存储在缓存中,这些数据既能够存储在文件中,又能够经过网络原样传输,而不须要任何解析开销。
FlatBuffers有以下一些关键特性——
访问序列化数据不须要打包/拆包
节省内存并且访问速度快——缓存只占用访问数据所须要的内存;不须要任何额外的内存。
灵活性——经过可选字段向前向后兼容
代码规模小
强类型——错误在编译时捕获,而不是在运行时
便利性——生成的C++头文件代码简洁。若是须要,有一项可选功能能够用来在运行时高效解析Schema和JSON-like格式的文本。
跨平台——使用C++编写,不依赖STL以外的库,所以能够用于任何有C++编辑器的平台。当前,该项目包含构建方法和在Android、Linux、Windows和OSX等操做系统上使用该库的示例。
与Protocol Buffers或JSON Parsing这样的可选方案相比,FlatBuffers的优点在于开销更小,这主要是因为它没有解析过程。
代码托管:https://github.com/google/flatbuffers
5、Protocol Buffers
贡献者:Google
简介:Protocol Buffers是Google公司开发的一种数据描述语言,相似于XML可以将结构化数据序列化,可用于数据存储、通讯协议等方面。它不依赖于语言和平台 而且可扩展性极强。现阶段官方支持C++、JAVA、Python等三种编程语言,但能够找到大量的几乎涵盖全部语言的第三方拓展包。
经过它,你能够定义你的数据的结构,并生成基于各类语言的代码。这些你定义的数据流能够轻松地在传递并不破坏你已有的程序。而且你也能够更新这些数据而现有的程序也不会受到任何的影响。
Protocol Buffers常常被简称为protobuf。
官网:http://code.google.com/p/protobuf/
6、Consistent Hashing(哈希算法)
简介:一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了 解决因特网中的热点(Hot spot)问题,初衷和CARP十分相似。一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)能够在P2P环境中真正获得应用。
一致性hash算法提出了在动态变化的Cache环境中,断定哈希算法好坏的四个定义:
一、平衡性(Balance):平衡性是指哈希的结果可以尽量分布到全部的缓冲中去,这样能够使得全部的缓冲空间都获得利用。不少哈希算法都可以知足这一条件。
二、单调性(Monotonicity):单调性是指若是已经有一些内容经过哈希分派到了相应的缓冲中,又有新的缓冲加入到系统中。哈希的结果应可以保证原有已分配的内容能够被映射到原有的或者新的缓冲中去,而不会被映射到旧的缓冲集合中的其余缓冲区。
三、分散性(Spread):在分布式环境中,终端有可能看不到全部的缓冲,而是只能看到其中的一部分。当终端但愿经过哈希过程将内容映射到缓 冲上时,因为不一样终端所见的缓冲范围有可能不一样,从而致使哈希的结果不一致,最终的结果是相同的内容被不一样的终端映射到不一样的缓冲区中。这种状况显然是应 该避免的,由于它致使相同内容被存储到不一样缓冲中去,下降了系统存储的效率。分散性的定义就是上述状况发生的严重程度。好的哈希算法应可以尽可能避免不一致 的状况发生,也就是尽可能下降分散性。
四、负载(Load):负载问题其实是从另外一个角度看待分散性问题。既然不一样的终端可能将相同的内容映射到不一样的缓冲区中,那么对于一个特定 的缓冲区而言,也可能被不一样的用户映射为不一样 的内容。与分散性同样,这种状况也是应当避免的,所以好的哈希算法应可以尽可能下降缓冲的负荷。
在分布式集群中,对机器的添加删除,或者机器故障后自动脱离集群这些操做是分布式集群管理最基本的功能。若是采用经常使用的hash(object)%N算法,那么在有机器添加或者删除后,不少原有的数据就没法找到了,这样严重的违反了单调性原则。
7、Netty
贡献者:JBOSS
简介:Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。
也就是说,Netty 是一个基于NIO的客户,服务器端编程框架,使用Netty 能够确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用。Netty至关简化和流线化了网络应用的编程开发过程,例如,TCP 和UDP的socket服务开发。
“快速”和“简单”并不意味着会让你的最终应用产生维护性或性能上的问题。Netty 是一个吸取了多种协议的实现经验,这些协议包括FTP,SMTP,HTTP,各类二进制,文本协议,并通过至关精心设计的项目,最终,Netty 成功的找到了一种方式,在保证易于开发的同时还保证了其应用的性能,稳定性和伸缩性。
官网:http://netty.io/
8、BloomFilter
简介:Bloom filter 是由 Howard Bloom 在 1970 年提出的二进制向量数据结构,它具备很好的空间和时间效率,被用来检测一个元素是否是集合中的一个成员。若是检测结果为是,该元素不必定在集合中;但若是 检测结果为否,该元素必定不在集合中。所以Bloom filter具备100%的召回率。这样每一个检测请求返回有“在集合内(可能错误)”和“不在集合内(绝对不在集合内)”两种状况,可见 Bloom filter 是牺牲了正确率和时间以节省空间。
Bloom filter 优势就是它的插入和查询时间都是常数,另外它查询元素却不保存元素自己,具备良好的安全性。
搜索引擎
1、Nutch
简介:Nutch 是一个开源Java 实现的搜索引擎。它提供了咱们运行本身的搜索引擎所需的所有工具。包括全文搜索和Web爬虫。
尽管Web搜索是漫游Internet的基本要求, 可是现有web搜索引擎的数目却在降低. 而且这颇有可能进一步演变成为一个公司垄断了几乎全部的web搜索为其谋取商业利益.这显然 不利于广大Internet用户.
Nutch为咱们提供了这样一个不一样的选择. 相对于那些商用的搜索引擎, Nutch做为开放源代码 搜索引擎将会更加透明, 从而更值得你们信赖. 如今全部主要的搜索引擎都采用私有的排序算法, 而不会解释为何一个网页会排在一个特定的位置. 除此以外, 有的搜索引擎依照网站所付的 费用, 而不是根据它们自己的价值进行排序. 与它们不一样, Nucth没有什么须要隐瞒, 也没有 动机去扭曲搜索的结果. Nutch将尽本身最大的努力为用户提供最好的搜索结果.
Nutch目前最新的版本为version v2.2.1。
官网:https://nutch.apache.org/
2、Lucene
开发者:Doug Cutting(Hadoop之父,你懂的)
简介:Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的 查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中 实现全文检索的功能,或者是以此为基础创建起完整的全文检索引擎。
官网:http://lucene.apache.org/
3、SolrCloud
简介:SolrCloud是Solr4.0版本之后基于Solr和Zookeeper的分布式搜索方案。SolrCloud是Solr的基于Zookeeper一种部署方式。Solr能够以多种方式部署,例如单机方式,多机Master-Slaver方式。
原理图:
SolrCloud有几个特点功能:
集中式的配置信息使用ZK进行集中配置。启动时能够指定把Solr的相关配置文件上传
Zookeeper,多机器共用。这些ZK中的配置不会再拿到本地缓存,Solr直接读取ZK中的配置信息。配置文件的变更,全部机器均可以感 知到。另外,Solr的一些任务也是经过ZK做为媒介发布的。目的是为了容错。接收到任务,但在执行任务时崩溃的机器,在重启后,或者集群选出候选者时, 能够再次执行这个未完成的任务。
自动容错SolrCloud对索引分片,并对每一个分片建立多个Replication。每一个Replication均可以对外提供服务。一个 Replication挂掉不会影响索引服务。更强大的是,它还能自动的在其它机器上帮你把失败机器上的索引Replication重建并投入使用。
近实时搜索当即推送式的replication(也支持慢推送)。能够在秒内检索到新加入索引。
查询时自动负载均衡SolrCloud索引的多个Replication能够分布在多台机器上,均衡查询压力。若是查询压力大,能够经过扩展机器,增长Replication来减缓。
自动分发的索引和索引分片发送文档到任何节点,它都会转发到正确节点。
事务日志事务日志确保更新无丢失,即便文档没有索引到磁盘。
4、Solr
简介:Solr是一个独立的企业级搜索应用服务器,它对外提供相似于Web-service的API接口。用户能够经过http请求,向搜索引擎服务器提交必定格式的XML文件,生成索引;也能够经过Http Get操做提出查找请求,并获得XML格式的返回结果。
Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,而且提供了一个完善的功能管理界面,是一款很是优秀的全文搜索引擎。
官网:https://lucene.apache.org/solr/
5、ElasticSearch
简介:ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全 文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并做为Apache许可条款下的开放源码发布,是第二最流行的企业搜索引擎。设计用于云计算 中,可以达到实时搜索,稳定,可靠,快速,安装使用方便。
官网:http://www.elasticsearch.org/
6、Sphinx
简介:Sphinx是一个基于SQL的全文检索引擎,能够结合MySQL,PostgreSQL作全文搜 索,它能够提供比数据库自己更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。Sphinx特别为一些脚本语言设计搜索API接口,如 PHP,Python,Perl,Ruby等,同时为MySQL也设计了一个存储引擎插件。
Sphinx单一索引最大可包含1亿条记录,在1千万条记录状况下的查询速度为0.x秒(毫秒级)。Sphinx建立索引的速度为:建立100 万条记录的索引只需 3~4分钟,建立1000万条记录的索引能够在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。
官网:http://sphinxsearch.com
7、SenseiDB
贡献者:linkedin
简介:SenseiDB是一个NoSQL数据库,它专一于高更新率以及复杂半结构化搜索查询。熟悉 Lucene和Solor的用户会发现,SenseiDB背后有许多似曾相识的概念。SenseiDB部署在多节点集群中,其中每一个节点能够包括N块数据 片。Apache Zookeeper用于管理节点,它可以保持现有配置,并能够将任意改动(如拓扑修改)传输到整个节点群中。SenseiDB集群还须要一种模式用于定义 将要使用的数据模型。
从SenseiDB集群中获取数据的惟一方法是经过Gateways(它 没有“INSERT”方法)。每一个集群都链接到一个单一gateway。你须要了解很重要的一点是,因为SenseiDB自己无法处理原子性 (Atomicity)和隔离性(Isolation),所以只能经过外部在gateway层进行限制。另外,gateway必须确保数据流按照预期的方 式运做。内置的gateway有如下几种形式:
来自文件
来自JMS队列
经过JDBC
来自Apache Kafka
官网:http://senseidb.com
数据挖掘
1、Mahout
简介:Apache Mahout 是 Apache Software Foundation (ASF) 开发的一个全新的开源项目,其主要目标是建立一些可伸缩的机器学习算法,供开发人员在 Apache 在许可下无偿使用。该项目已经发展到了它的最二个年头,目前只有一个公共发行版。Mahout 包含许多实现,包括集群、分类、CP 和进化程序。此外,经过使用 Apache Hadoop 库,Mahout 能够有效地扩展到云中。
虽然在开源领域中相对较为年轻,但 Mahout 已经提供了大量功能,特别是在集群和 CF 方面。Mahout 的主要特性包括:
Taste CF。Taste 是 Sean Owen 在 SourceForge 上发起的一个针对 CF 的开源项目,并在 2008 年被赠予 Mahout。
一些支持 Map-Reduce 的集群实现包括 k-Means、模糊 k-Means、Canopy、Dirichlet 和 Mean-Shift。
Distributed Naive Bayes 和 Complementary Naive Bayes 分类实现。
针对进化编程的分布式适用性功能。
Matrix 和矢量库。
上述算法的示例。
官网:http://mahout.apache.org/
Iaas
IaaS(Infrastructure as a Service),即基础设施即服务。
1、OpenStack
简介:OpenStack是一个由NASA(美国国家航空航天局)和Rackspace合做研发并发起的,以Apache许可证受权的自由软件和开放源代码项目。
OpenStack是一个开源的云计算管理平台项目,由几个主要的组件组合起来完成具体工做。OpenStack支持几乎全部类型的云环境,项 目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenStack经过各类互补的服务提供了基础设施即服务(IaaS)的解决方 案,每一个服务提供API以进行集成。
6个核心项目:Nova(计算,Compute),Swift(对象存储,Object),Glance(镜 像,Image),Keystone(身份,Identity),Horizon(自助门户,Dashboard),Quantum &Melange(网络&地址管理),另外还有若干社区项目,如Rackspace(负载均衡)、Rackspace(关系型数据库)。
相关阅读:
什么是OpenStack?
成功部署OpenStack的十大要点
官网:https://www.openstack.org/
2、Docker
贡献者:dotCloud
简介:Docker 是一个开源的应用容器引擎,让开发者能够打包他们的应用以及依赖包到一个可移植的容器中,而后发布到任何流行的 Linux 机器上,也能够实现虚拟化。容器是彻底使用沙箱机制,相互之间不会有任何接口(相似 iPhone 的 app)。几乎没有性能开销,能够很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架或包括系统。
官网:http://www.docker.io/
3、Kubernetes
贡献者:Google
简介:Kubernetes是Google开源的容器集群管理系统。它构建Ddocker技术之上,为容器化的应用提供资源调度、部署运行、服务发现、扩容缩容等整一套功能,本质上可看做是基于容器技术的mini-PaaS平台。
Kubernetes从另外一个角度对资源进行抽象,它让开发人员和管理人员共同着眼于服务的行为和性能的提高,而不是仅仅关注对单一的组件或者是基础资源。
那么Kubernetes集群到底提供了哪些单一容器所没有功能?它主要关注的是对服务级别的控制而并不是仅仅是对容器级别的控 制,Kubernetes提供了一种“机智”的管理方式,它将服务当作一个总体。在Kubernete的解决方案中,一个服务甚至能够自我扩展,自我诊 断,而且容易升级。例如,在Google中,咱们使用机器学习技术来保证每一个运行的服务的当前状态都是最高效的。
代码托管:https://github.com/GoogleCloudPlatform/kubernetes/
4、Imctfy
贡献者:Google
简介:Google开源了本身所用Linux容器系统的开源版本lmctfy,读音为lem-kut-fee。包括一个C++库(使用了C++11,文档能够参考头文件)和命令行界面。目前的版本是0.1,只提供了CPU与内存隔离。项目还在密集开发中。
mctfy自己是针对某些特定使用场景设计和实现的,目前拥有一台机器上全部容器时运行状况最好,不推荐与LXC和其余容器系统一块儿使用(虽然也可行)。已在Ubuntu 12.04+和Ubuntu 3.3与3.8内核上测试。
代码托管:https://github.com/google/Imctfy/
监控管理
1、Dapper
贡献者:Google
简介:Dapper是一个轻量的ORM(对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping)。并不单纯的是一个DBHelper.由于在Dapper中数据其实就是一个对象。Dapper扩展与IDbConnection上,所 以事实上它的倾入性很低。我用了StructureMap。若是不喜欢能够本身更换,或者本身实现下。
代码就一个SqlMapper.cs文件,主要是IDbConnection的扩展方法,编译后就40K的一个很小的dll。
特性:
Dapper很快。Dapper的速度接近与IDataReader。
Dapper支持主流数据库 Mysql,SqlLite,Mssql2000,Mssql2005,Oracle等一系列的数据库
支持多表并联的对象。支持一对多 多对多的关系,而且没侵入性。
原理经过Emit反射IDataReader的序列队列,来快速的获得和产生对象
Dapper语法十分简单。而且无须迁就数据库的设计
官方站点http://code.google.com/p/dapper-dot-net/
代码托管:http://bigbully.github.io/Dapper-translation/
2、Zipkin
贡献者:Twitter
简介:Zipkin (分布式跟踪系统)是 Twitter 的一个开源项目,容许开发者收集 Twitter 各个服务上的监控数据,并提供查询接口。该系统让开发者可经过一个 Web 前端轻松的收集和分析数据,例如用户每次请求服务的处理时间等,可方便的监测系统中存在的瓶颈。
官方网站:http://twitter.github.io/zipkin/
代码托管:https://github.com/twitter/zipkin/