Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各种数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各类数据接受方(可定制)的能力。java
Flume提供对数据进行简单处理,并写到各类数据接受方(可定制)的能力 Flume提供了从console(控制台)、RPC(Thrift-RPC)、text(文件)、tail(UNIX tail)、syslog(syslog日志系统,支持TCP和UDP等2种模式),exec(命令执行)等数据源上收集数据的能力。web
Flume-og采用了多Master的方式。为了保证配置数据的一致性,Flume引入了ZooKeeper,用于保存配置数据,ZooKeeper自己可保证配置数据的一致性和高可用,另外,在配置数据发生变化时,ZooKeeper能够通知Flume Master节点。Flume Master间使用gossip协议同步数据。算法
Flume-ng最明显的改动就是取消了集中管理配置的 Master 和 Zookeeper,变为一个纯粹的传输工具。Flume-ng另外一个主要的不一样点是读入数据和写出数据如今由不一样的工做线程处理(称为 Runner)。 在 Flume-og 中,读入线程一样作写出工做(除了故障重试)。若是写出慢的话(不是彻底失败),它将阻塞 Flume 接收数据的能力。这种异步的设计使读入线程能够顺畅的工做而无需关注下游的任何问题。sql
Kafka是一种高吞吐量的分布式发布订阅消息系统,有以下特性:数据库
经过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即便数以TB的消息存储也可以保持长时间的稳定性能。编程
高吞吐量:即便是很是普通的硬件Kafka也能够支持每秒数百万的消息。服务器
支持经过Kafka服务器和消费机集群来分区消息。网络
支持Hadoop并行数据加载。数据结构
Twitter将Storm正式开源了,这是一个分布式的、容错的实时计算系统,它被托管在GitHub上,遵循 Eclipse Public License 1.0。Storm是实时处理系统。Storm基本是用Clojure(还有一部分是用java)写的。app
Storm为分布式实时计算提供了一组通用原语,可被用于“流处理”之中,实时处理消息并更新数据库。这是管理队列及工做者集群的另外一种方式。 Storm也可被用于“连续计算”(continuous computation),对数据流作连续查询,在计算时就将结果以流的形式输出给用户。它还可被用于“分布式RPC”,以并行的方式运行昂贵的运算。 Storm的主工程师Nathan Marz表示:
Storm能够方便地在一个计算机集群中编写与扩展复杂的实时计算,Storm用于实时处理,就比如 Hadoop 用于批处理。Storm保证每一个消息都会获得处理,并且它很快——在一个小集群中,每秒能够处理数以百万计的消息。更棒的是你可使用任意编程语言来作开发。
Storm的主要特色以下:
简单的编程模型。相似于MapReduce下降了并行批处理复杂性,Storm下降了进行实时处理的复杂性。
可使用各类编程语言。你能够在Storm之上使用各类编程语言。默认支持Clojure、Java、Ruby和Python。要增长对其余语言的支持,只需实现一个简单的Storm通讯协议便可。
容错性。Storm会管理工做进程和节点的故障。
水平扩展。计算是在多个线程、进程和服务器之间并行进行的。
可靠的消息处理。Storm保证每一个消息至少能获得一次完整处理。任务失败时,它会负责从消息源重试消息。
快速。系统的设计保证了消息能获得快速的处理,使用ØMQ做为其底层消息队列。
本地模式。Storm有一个“本地模式”,能够在处理过程当中彻底模拟Storm集群。这让你能够快速进行开发和单元测试。
Storm集群由一个主节点和多个工做节点组成。主节点运行了一个名为“Nimbus”的守护进程,用于分配代码、布置任务及故障检测。每一个工做节 点都运行了一个名为“Supervisor”的守护进程,用于监听工做,开始并终止工做进程。Nimbus和Supervisor都能快速失败,并且是无状态的,这样一来它们就变得十分健壮,二者的协调工做是由Apache ZooKeeper来完成的。
Storm的术语包括Stream、Spout、Bolt、Task、Worker、Stream Grouping和Topology。Stream是被处理的数据。Spout是数据源。Bolt处理数据。Task是运行于Spout或Bolt中的 线程。Worker是运行这些线程的进程。Stream Grouping规定了Bolt接收什么东西做为输入数据。数据能够随机分配(术语为Shuffle),或者根据字段值分配(术语为Fields),或者 广播(术语为All),或者老是发给一个Task(术语为Global),也能够不关心该数据(术语为None),或者由自定义逻辑来决定(术语为 Direct)。Topology是由Stream Grouping链接起来的Spout和Bolt节点网络。在Storm Concepts页面里对这些术语有更详细的描述。
Scala是一门多范式的编程语言,一种相似java的编程语言,设计初衷是实现可伸缩的语言、并集成面向对象编程和函数式编程的各类特性。
Scala有几项关键特性代表了它的面向对象的本质。例如,Scala中的每一个值都是一个对象,包括基本数据类型(即布尔值、数字等)在内,连函数也是对象。另外,类能够被子类化,并且Scala还提供了基于mixin的组合(mixin-based composition)。
与只支持单继承的语言相比,Scala具备更普遍意义上的类重用。Scala容许定义新类的时候重用“一个类中新增的成员定义(即相较于其父类的差别之处)”。Scala称之为mixin类组合。
Scala还包含了若干函数式语言的关键概念,包括高阶函数(Higher-Order Function)、局部套用(Currying)、嵌套函数(Nested Function)、序列解读(Sequence Comprehensions)等等。
Scala是静态类型的,这就容许它提供泛型类、内部类、甚至多态方法(Polymorphic Method)。另外值得一提的是,Scala被特地设计成可以与Java和.NET互操做。Scala当前版本还不能在.NET上运行(虽然上一版能够-_-b),但按照计划未来能够在.NET上运行。
Scala能够与Java互操做。它用scalac这个编译器把源文件编译成Java的class文件(即在JVM上运行的字节码)。你能够从Scala中调用全部的Java类库,也一样能够从Java应用程序中调用Scala的代码。用David Rupp的话来讲,
它也能够访问现存的数之不尽的Java类库,这让(潜在地)迁移到Scala更加容易。
这是一个大规模并行处理(MPP)式 SQL 大数据分析引擎(注:
Impala像Dremel同样,其借鉴了MPP(Massively Parallel Processing,大规模并行处理)并行数据库的思想,抛弃了MapReduce这个不太适合作SQL查询的范式,从而让Hadoop支持处理交互式的工做负载
Impala 号称在性能上比Hive高出3~30倍,甚至预言说在未来的某一天可能会超过Hive的使用率而成为Hadoop上最流行的实时计算平台
Impala的目的不在于替换现有的MapReduce工具,如Hive,而是提供一个统一的平台用于实时查询。事实上Impala的运行也是依赖Hive的元数据。
与Hive相似,Impala也能够直接与HDFS和HBase库直接交互。只不过Hive和其它创建在MapReduce上的框架适合须要长时间运行的批处理任务。例如那些批量提取,转化,加载(ETL)类型的Job。而Impala主要用于实时查询。
hive是基于Hadoop的一个数据仓库工具,能够将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,能够将sql语句转换为MapReduce任务进行运行。 其优势是学习成本低,能够经过类SQL语句快速实现简单的MapReduce统计,没必要开发专门的MapReduce应用,十分适合数据仓库的统计分析。
Hive是创建在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,能够用来进行数据提取转化加载(ETL),这是一种能够存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它容许熟悉 SQL 的用户查询数据。同时,这个语言也容许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 没法完成的复杂的分析工做。
Hive 没有专门的数据格式。 Hive 能够很好的工做在 Thrift 之上,控制分隔符,也容许用户指定数据格式。
Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具备的优势;但不一样于MapReduce的是Job中间输出结果能够保存在内存中,从而再也不须要读写HDFS,所以Spark能更好地适用于数据挖掘与机器学习等须要迭代的MapReduce的算法。
Spark 是一种与 Hadoop 类似的开源集群计算环境,可是二者之间还存在一些不一样之处,这些有用的不一样之处使 Spark 在某些工做负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了可以提供交互式查询外,它还能够优化迭代工做负载。
Spark 是在 Scala 语言中实现的,它将 Scala 用做其应用程序框架。与 Hadoop 不一样,Spark 和 Scala 可以紧密集成,其中的 Scala 能够像操做本地集合对象同样轻松地操做分布式数据集。
尽管建立 Spark 是为了支持分布式数据集上的迭代做业,可是实际上它是对 Hadoop 的补充,能够在 Hadoop 文件系统中并行运行。经过名为 Mesos 的第三方集群框架能够支持此行为。Spark 由加州大学伯克利分校 AMP 实验室 (Algorithms, Machines, and People Lab) 开发,可用来构建大型的、低延迟的数据分析应用程序。