(转)一共81个,开源大数据处理工具汇总

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(转)一共81个,开源大数据处理工具汇总相关的知识,希望对你有一定的参考价值。

[思路网注] 本文一共分为上下两部分。我们将针对大数据开源工具不同的用处来进行分类,并且附上了官网和部分下载链接,希望能给做大数据的朋友做个参考。

 

本文一共分为上下两部分。我们将针对大数据开源工具不同的用处来进行分类,并且附上了官网和部分下载链接,希望能给做大数据的朋友做个参考。下面是第一部分。

查询引擎

一、Phoenix

贡献者::Salesforce

简介:这是一个Java中间层,可以让开发者在Apache HBase上执行SQL查询。Phoenix完全使用Java编写,代码位于GitHub上,并且提供了一个客户端可嵌入的JDBC驱动。

Phoenix查询引擎会将SQL查询转换为一个或多个HBase scan,并编排执行以生成标准的JDBC结果集。直接使用HBase API、协同处理器与自定义过滤器,对于简单查询来说,其性能量级是毫秒,对于百万级别的行数来说,其性能量级是秒。

Phoenix最值得关注的一些特性有:

嵌入式的JDBC驱动,实现了大部分的java.sql接口,包括元数据API

可以通过多部行键或是键/值单元对列进行建模

完善的查询支持,可以使用多个谓词以及优化的扫描键

DDL支持:通过CREATE TABLE、DROP TABLE及ALTER TABLE来添加/删除列

版本化的模式仓库:当写入数据时,快照查询会使用恰当的模式

DML支持:用于逐行插入的UPSERT VALUES、用于相同或不同表之间大量数据传输的UPSERTSELECT、用于删除行的DELETE

通过客户端的批处理实现的有限的事务支持

单表——还没有连接,同时二级索引也在开发当中

紧跟ANSI SQL标准

二、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官方网站>>>

三、Presto

贡献者::Facebook

简 介:Facebook开源的数据查询引擎Presto,可对250PB以上的数据进行快速地交互式分析。该项目始于2012年秋季开始开发,目前该项目已 经在超过1000名 Facebook雇员中使用,运行超过30000个查询,每日数据在1PB级别。Facebook称 Presto的性能比诸如Hive和 Map*Reduce要好上10倍有多。

Presto当前支持ANSI SQL的大多数特效,包括联合查询、左右联接、子查询以及一些聚合和计算函数;支持近似截然不同的计数(DISTINCT COUNT)等。

github源代码下载>>>

技术分享

四、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官方网站>>>

五、Pig

简介:Pig是一种编程语言,它简化了Hadoop常见的工作任务。Pig可加载数据、表达转换数据以及存储最终结果。Pig内置的操作使得半结构化数据变得有意义(如日志文件)。同时Pig可扩展使用Java中添加的自定义数据类型并支持数据转换。

Pig 最大的作用就是对mapreduce算法(框架)实现了一套shell脚本 ,类似我们通常熟悉的SQL语句,在Pig中称之为Pig Latin,在这套脚本中我们可以对加载出来的数据进行排序、过滤、求和、分组(group by)、关联(Joining),Pig也可以由用户自定义一些函数对数据集进行操作,也就是传说中的UDF(user-defined functions)。

Pig官方网站>>>

六、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官方网站>>>

七、ApacheDrill

贡献者::MapR

简 介:Apache Drill是是一个能够对大数据进行交互分析、开源的分布式系统,且基于Google Dremel实现,它能够运行在上千个节点的服务器集群上,且能在几秒内处理PB级或者万亿条的数据记录。Drill能够帮助企业用户快速、高效地进行 Hadoop数据查询和企业级大数据分析。Drill于2012年8月份由Apache推出。

从 Drill官方对其架构的介绍中得知,其具有适于实时的分析和快速的应用开发、适于半结构化/嵌套数据的分析、兼容现有的SQL环境和Apache Hive等特征。另外,Drill的核心模块是Drillbit服务,该服务模块包括远程访问子模块、SQL解析器、查询优化器、任务计划执行引擎、存储 插件接口(DFS、HBase、Hive等的接口)、分布式缓存模块等几部分,如下图所示:

技术分享

ApacheDrill官方网站>>>

八、ApacheTajo

简 介:Apache Tajo项目的目的是在HDFS之上构建一个先进的数据仓库系统。Tajo将自己标榜为一个“大数据仓库”,但是它好像和之前介绍的那些低延迟查询引擎类 似。虽然它支持外部表和Hive数据集(通过HCatalog),但是它的重点是数据管理,提供低延迟的数据访问,以及为更传统的ETL提供工具。它也需 要在数据节点上部署Tajo特定的工作进程。

Tajo的功能包括:

ANSI SQL兼容

JDBC驱动

集成Hive metastore能够访问Hive数据集

一个命令行客户端

一个自定义函数API

ApacheTajo官方网站>>>

九、Hive

简 介:hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为 MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

Hive官方网站>>>

流式计算

一、FacebookPuma

贡献者:Facebook

简介:实时数据流分析

二、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可以用于实时数据的统计:

统计网站中每一个页面,域名的点击次数

内部系统的运行监控(统计被监控服务器的运行状态)

记录最大值和最小值

技术分享

三、Yahoo S4

贡献者:Yahoo

简 介:S4(Simple Scalable Streaming System)最初是Yahoo!为提高搜索广告有效点击率的问题而开发的一个平台,通过统计分析用户对广告的点击率,排除相关度低的广告,提升点击率。 目前该项目刚启动不久,所以也可以理解为是他们提出的一个分布式流计算(Distributed Stream Computing)的模型。

S4的设计目标是:

·提供一种简单的编程接口来处理数据流

·设计一个可以在普通硬件之上可扩展的高可用集群。

·通过在每个处理节点使用本地内存,避免磁盘I/O瓶颈达到最小化延迟

·使用一个去中心的,对等架构;所有节点提供相同的功能和职责。没有担负特殊责任的中心节点。这大大简化了部署和维护。

·使用可插拔的架构,使设计尽可能的即通用又可定制化。

·友好的设计理念,易于编程,具有灵活的弹性

Yahoo S4官方网站>>>

四、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官方网站>>>

迭代计算

一、Apache Hama

简介:Apache Hama是一个纯BSP(Bulk Synchronous Parallel)计算框架,模仿了Google的Pregel。用来处理大规模的科学计算,特别是矩阵和图计算。

建立在Hadoop上的分布式并行计算模型。

基于Map/Reduce和 Bulk Synchronous的实现框架。

运行环境需要关联Zookeeper、HBase、HDFS组件。

Hama中有2个主要的模型:

– 矩阵计算(Matrix package)

– 面向图计算(Graph package)

二、ApacheGiraph

代码托管地址:

简介:Apache Giraph是一个可伸缩的分布式迭代图处理系统,灵感来自BSP(bulk synchronous parallel)和Google的Pregel,与它们 区别于则是是开源、基于Hadoop的架构等。

Giraph处理平台适用于运行大规模的逻辑计算,比如页面排行、共享链接、基于个性化排行等。Giraph专注于社交图计算,被Facebook作为其Open Graph工具的核心,几分钟内处理数万亿次用户及其行为之间的连接。

三、HaLoop

简介:迭代的MapReduce,HaLoop——适用于迭代计算的Hadoop。

技术分享

Hadoop与HaLoop的不同

与Hadoop比较的四点改变:

1.提供了一套新的编程接口,更加适用于迭代计算;

HaLoop给迭代计算一个抽象的递归公式:

技术分享

2.HaLoop的master进行job内的循环控制,直到迭代计算结束;

3.Task Scheduler也进行了修改,使得任务能够尽量满足data locality

4.slave nodes对数据进行cache并index索引,索引也以文件的形式保存在本地磁盘。

HaLoop官网>>>

四、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。

离线计算

一、HadoopMapReduce

简 介:MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念”Map(映射)”和”Reduce(归约)”,和它们的主要思 想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系 统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中 的每一个共享相同的键组。

HadoopMapReduce官方网站>>>

二、Berkeley Spark

简 介:Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好 地适用于数据挖掘与机器学习等需要迭代的map reduce的算法。

三、DataTorrent

简介:DataTorrent基于Hadoop 2.x构建,是一个实时的、有容错能力的数据流式处理和分析平台,它使用本地Hadoop应用程序,而这些应用程序可以与执行其它任务,如批处理,的应用程序共存。该平台的架构如下图所示:

技术分享

相关文章:DataTorrent 1.0每秒处理超过10亿个实时事件

DataTorrent将数据分析速度从“实时”提升至“现在时”

键值存储

一、LevelDB

技术分享

贡献者:Google

简介:Leveldb是一个google实现的非常高效的kv数据库,目前的版本1.2能够支持billion级别的数据量了。 在这个数量级别下还有着非常高的性能,主要归功于它的良好的设计。特别是LMS算法。

LevelDB是单进程的服务,性能非常之高,在一台4核Q6600的CPU机器上,每秒钟写数据超过40w,而随机读的性能每秒钟超过10w。

此处随机读是完全命中内存的速度,如果是不命中 速度大大下降。

LevelDB官方网站>>>

二、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官方网站>>>

三、HyperDex

贡献者:Facebook

技术分享

HyperDex是一个分布式、可搜索的键值存储系统,特性如下:

分布式KV存储,系统性能能够随节点数目线性扩展

吞吐和延时都能秒杀现在风头正劲的MonogDB,吞吐甚至强于Redis

使用了hyperspace hashing技术,使得对存储的K-V的任意属性进行查询成为可能

官网:http://hyperdex.org/

四、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官方网站>>>

五、Voldemort

技术分享

Voldemort是一个分布式键值存储系统,是Amazon’s Dynamo的一个开源克隆。特性如下:

支持自动复制数据到多个服务器上。

支持数据自动分割所以每个服务器只包含总数据的一个子集。

提供服务器故障透明处理功能。

支持可拨插的序化支持,以实现复杂的键-值存储,它能够很好的5.集成常用的序化框架如:Protocol Buffers、Thrift、Avro和Java Serialization。

数据项都被标识版本能够在发生故障时尽量保持数据的完整性而不会影响系统的可用性。

每个节点相互独立,互不影响。

支持可插拔的数据放置策略

官网:http://project-voldemort.com/

六、AmazonDynamo

贡献者:亚马逊

简 介:Amazon Dynamo是一个经典的分布式Key-Value存储系统,具备去中心化,高可用性,高扩展性的特点,但是为了达到这个目标在很多场景中牺牲了一致性。 Dynamo在Amazon中得到了成功的应用,能够跨数据中心部署于上万个结点上提供服务,它的设计思想也被后续的许多分布式系统借鉴。如近来火热的 Cassandra,实际上就是基本照搬了Dynamo的P2P架构,同时融合了BigTable的数据模型及存储算法。

Amazon Dynamo官方网站>>>

七、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地位都是等价的.

八、ApacheAccumulo

技术分享

Apache Accumulo是一个可靠的、可伸缩的、高性能的排序分布式的Key-Value存储解决方案,基于单元访问控制以及可定制的服务器端处理。 Accumulo使用Google BigTable设计思路,基于Apache Hadoop、Zookeeper和 Thrift构建。

官网:http://accumulo.apache.org/

九、Redis

技术分享

Redis 是一个高性能的key-value存储系统,和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链 表)、set(集合)和zset(有序集合)。与memcached一样,为了保证效率,数据都是缓存在内存中,区别的是Redis会周期性的把更新的数 据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了主从同步。

Redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Python、Ruby、Erlang、php客户端,使用很方便。

官网:http://redis.io/

表格存储

一、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/

二、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/

三、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/

四、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/

五、HyperTable

技术分享

简介:Hypertable是一个开源、高性能、可伸缩的数据库,它采用与Google的Bigtable相似的模型。在过去数年中,Google为在PC集群 上运行的可伸缩计算基础设施设计建造了三个关键部分。

技术分享

第 一个关键的基础设施是Google File System(GFS),这是一个高可用的文件系统,提供了一个全局的命名空间。它通过跨机器(和跨机架)的文件数据复制来达到高可用性,并因此免受传统 文件存储系统无法避免的许多失败的影响,比如电源、内存和网络端口等失败。第二个基础设施是名为Map-Reduce的计算框架,它与GFS紧密协作,帮 助处理收集到的海量数据。第三个基础设施是Bigtable,它是传统数据库的替代。Bigtable让你可以通过一些主键来组织海量数据,并实现高效的 查询。Hypertable是Bigtable的一个开源实现,并且根据我们的想法进行了一些改进。

HyperTable官网:http://hypertable.org/

六、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/

文件存储

一、CouchDB

简 介:CouchDB是用Erlang开发的面向文档的数据库系统,最近刚刚发布了1.0版本(2010年7月14日)。CouchDB不是一个传统的关系 数据库,而是面向文档的数据库,其数据存储方式有点类似lucene的index文件格式,CouchDB最大的意义在于它是一个面向web应用的新一代 存储系统,事实上,CouchDB的口号就是:下一代的Web应用存储系统。

技术分享

特点:

一、 CouchDB是分布式的数据库,他可以把存储系统分布到n台物理的节点上面,并且很好的协调和同步节点之间的数据读写一致性。这当然也得靠Erlang 无与伦比的并发特性才能做到。对于基于web的大规模应用文档应用,分布式可以让它不必像传统的关系数据库那样分库拆表,在应用代码层进行大量的改动。

二、CouchDB是面向文档的数据库,存储半结构化的数据,比较类似lucene的index结构,特别适合存储文档,因此很适合CMS,电话本,地址本等应用,在这些应用场合,文档数据库要比关系数据库更加方便,性能更好。

三、CouchDB支持REST API,可以让用户使用javascript来操作CouchDB数据库,也可以用JavaScript编写查询语句,我们可以想像一下,用AJAX技术结合CouchDB开发出来的CMS系统会是多么的简单和方便。

其实CouchDB只是Erlang应用的冰山一角,在最近几年,基于Erlang的应用也得到的蓬勃的发展,特别是在基于web的大规模,分布式应用领域,几乎都是Erlang的优势项目。

官网:http://couchdb.apache.org/

二、MongoDB

简介:MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson 格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数 据库单表查询的绝大部分功能,而且还支持对数据建立索引。

 

第二部分主要收集整理的内容主要有日志收集系统、消息系统、分布式服务、集群管理、RPC、基础设施、搜索引擎、Iaas和监控管理等大数据开源工具。

  日志收集系统

  一、Facebook Scribe

技术分享

  贡献者:Facebook

  简介:Scribe是Facebook开源的日志收集系统,在Facebook内部已经得到大量的应用。它 能够从各种日志源上收集日志,存储到一个中央存储系统(可以是NFS,分布式文件系统等)上,以便于进行集中统计分析处理。它为日志的“分布式收集,统一 处理”提供了一个可扩展的,高容错的方案。当中央存储系统的网络或者机器出现故障时,scribe会将日志转存到本地或者另一个位置,当中央存储系统恢复 后,scribe会将转存的日志重新传输给中央存储系统。其通常与Hadoop结合使用,scribe用于向HDFS中push日志,而Hadoop通过 MapReduce作业进行定期处理。

  Scribe的系统架构

技术分享

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

  二、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/

  三、logstash

  简介:logstash 是一个应用程序日志、事件的传输、处理、管理和搜索的平台。你可以用它来统一对应用程序日志进行收集管理,提供 Web 接口用于查询和统计。他可以对你的日志进行收集、分析,并将其存储供以后使用(如,搜索),您可以使用它。说到搜索,logstash带有一个web界 面,搜索和展示所有日志。

技术分享

  官网:http://www.logstash.net/

  四、kibana

  简介:Kibana 是一个为 Logstash 和 ElasticSearch 提供的日志分析的 Web 接口。可使用它对日志进行高效的搜索、可视化、分析等各种操作。kibana 也是一个开源和免费的工具,他可以帮助您汇总、分析和搜索重要数据日志并提供友好的web界面。他可以为 Logstash 和 ElasticSearch 提供的日志分析的 Web 界面。

  主页: http://kibana.org/

  代码托管: https://github.com/rashidkpc/Kibana/downloads

  消息系统

  一、StormMQ

  简介:MQMessageQueue消息队列产品 StormMQ,是一种服务程序。

  官网:http://stormmq.com/

  二、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/

  三、RabbitMQ

  简介:RabbitMQ是一个受欢迎的消息代理,通常用于应用程序之间或者程序的不同组件之间通过消息来进行集成。本文简单介绍了如何使用 RabbitMQ,假定你已经配置好了rabbitmq服务器。

技术分享

  RabbitMQ是用Erlang,对于主要的编程语言都有驱动或者客户端。我们这里要用的是Java,所以先要获得Java客户端。

  像RabbitMQ这样的消息代理可用来模拟不同的场景,例如点对点的消息分发或者订阅/推送。我们的程序足够简单,有两个基本的组件,一个生产者用于产生消息,还有一个消费者用来使用产生的消息。

  官网:https://www.rabbitmq.com/

  四、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/

  五、Jafka

  贡献者:LinkedIn

  简介:Jafka 是一个开源的、高性能的、跨语言分布式消息系统,使用GitHub托管。Jafka 最早是由Apache孵化的Kafka(由LinkedIn捐助给Apache)克隆而来。由于是一个开放式的数据传输协议,因此除了Java开发语言受 到支持,Python、Ruby、C、C++等其他语言也能够很好的得到支持。

  特性:

  1、消息持久化非常快,服务端存储消息的开销为O(1),并且基于文件系统,能够持久化TB级的消息而不损失性能。

  2、吞吐量取决于网络带宽。

  3、完全的分布式系统,broker、producer、consumer都原生自动支持分布式。自动实现复杂均衡。

  4、内核非常小,整个系统(包括服务端和客户端)只有一个272KB的jar包,内部机制也不复杂,适合进行内嵌或者二次开发 。整个服务端加上依赖组件共3.5MB。

  5、消息格式以及通信机制非常简单,适合进行跨语言开发。目前自带的Python3.x的客户端支持发送消息和接收消息。

  官网:http://kafka.apache.org/

  六、Apache Kafka

  贡献者:LinkedIn

  简介:Apache Kafka是由Apache软件基金会开发的一个开源消息系统项目,由Scala写成。Kafka最初是由LinkedIn开发,并于2011年初开源。 2012年10月从Apache Incubator毕业。该项目的目标是为处理实时数据提供一个统一、高通量、低等待的平台。

  Kafka是一个分布式的、分区的、多复本的日志提交服务。它通过一种独一无二的设计提供了一个消息系统的功能。

  Kafka集群可以在一个指定的时间内保持所有发布上来的消息,不管这些消息有没有被消费。打个比方,如果这个时间设置为两天,那么在消息发布 的两天以内,这条消息都是可以被消费的,但是在两天后,这条消息就会被系统丢弃以释放空间。Kafka的性能不会受数据量的大小影响,因此保持大量的数据 不是一个问题。

  官网:http://kafka.apache.org/

  分布式服务

  一、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)——远程过程调用协议

  一、Apache Avro

  简介:Apache Avro是Hadoop下的一个子项目。它本身既是一个序列化框架,同时也实现了RPC的功能。Avro官网描述Avro的特性和功能如下:

  丰富的数据结构类型;

  快速可压缩的二进制数据形式;

  存储持久数据的文件容器;

  提供远程过程调用RPC;

  简单的动态语言结合功能。

  相比于Apache Thrift 和Google的Protocol Buffers,Apache Avro具有以下特点:

  支持动态模式。Avro不需要生成代码,这有利于搭建通用的数据处理系统,同时避免了代码入侵。

  数据无须加标签。读取数据前,Avro能够获取模式定义,这使得Avro在数据编码时只需要保留更少的类型信息,有利于减少序列化后的数据大小。

  官网:http://avro.apache.org/

  二、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/

  集群管理

  一、Nagios

  简介:Nagios是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。

  Nagios可运行在Linux/Unix平台之上,同时提供一个可选的基于浏览器的WEB界面以方便系统管理人员查看网络状态,各种系统问题,以及日志等等。

  官网:http://www.nagios.org/

  二、Ganglia

  简介:Ganglia是UC Berkeley发起的一个开源集群监视项目,设计用于测量数以千计的节点。Ganglia的核心包含gmond、gmetad以及一个Web前端。主要 是用来监控系统性能,如:cpu 、mem、硬盘利用率, I/O负载、网络流量情况等,通过曲线很容易见到每个节点的工作状态,对合理调整、分配系统资源,提高系统整体性能起到重要作用。

技术分享

  官网:http://ganglia.sourceforge.net/

  三、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/

  基础设施

  一、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/

  二、SSTable

  简介:如果说Protocol Buffer是谷歌独立数据记录的通用语言 ,那么有序字符串表(SSTable,Sorted String Table)则是用于存储,处理和数据集交换的最流行??的数据输出格式。正如它的名字本身,SSTable是有效存储大量键-值对的简单抽象,对高吞吐 量顺序读/写进行了优化。

  SSTable是Bigtable中至关重要的一块,对于LevelDB来说也是如此。

  三、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(校验值)。

  四、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

  五、Protocol Buffers

  贡献者:Google

  简介:Protocol Buffers是Google公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化,可用于数据存储、通信协议等方面。它不依赖于语言和平台 并且可扩展性极强。现阶段官方支持C++、JAVA、Python等三种编程语言,但可以找到大量的几乎涵盖所有语言的第三方拓展包。

  通过它,你可以定义你的数据的

以上是关于(转)一共81个,开源大数据处理工具汇总的主要内容,如果未能解决你的问题,请参考以下文章

55种开源数据可视化工具简介

全球100款大数据工具汇总(前50款)

报表工具推荐(收费、开源)

55种开源数据可视化工具简介

帆软Bi报表工具和思迈特软件哪个更好用呢?

Vue 开源项目库汇总(转)