Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop的生态系统很大,上面这些组件图标,你熟悉其中哪些呢?
十一、分布式实时计算框架 Flink
Flink是一个基于流计算的分布式引擎,以前的名字叫stratosphere,从2010年开始在德国一所大学里发起,也是有好几年的历史了,2014年来借鉴了社区其它一些项目的理念,快速发展并且进入了Apache顶级孵化器,后来更名为Flink。
Flink在德语中是快速和灵敏的意思,用来体现流式数据处理速度快和灵活性强等特点。
Flink提供了同时支持高吞吐、低延迟和exactly-once 语义的实时计算能力,另外Flink 还提供了基于流式计算引擎处理批量数据的计算能力,真正意义上实现了流批统一。
Flink 与 Hadoop 软件栈是什么关系?
Flink 独立于Apache Hadoop,且能在没有任何 Hadoop 依赖的情况下运行。
但是,Flink 可以很好的集成很多 Hadoop 组件,例如 HDFS、YARN 或 HBase。 当与这些组件一起运行时,Flink 可以从 HDFS 读取数据,或写入结果和检查点(checkpoint)/快照(snapshot)数据到 HDFS。Flink 还可以通过 YARN 轻松部署,并与 YARN 和 HDFS Kerberos 安全模块集成。
十二、分布式实时计算框架Storm
Apache Storm 是Twitter免费、开源的分布式实时计算系统,擅长处理海量数据,适用于数据实时处理而非批处理。
MapReduce框架主要解决的是静态数据的批量处理,即MapReduce 框架处理的是已存储到位的数据;但是流计算系统在启动时,一般数据并没有完全到位,而是源源不断地流入。
- 批处理系统一般重视数据处理的吞吐量;
- 流处理系统则更加关注数据处理的延时,希望流入的数据越快处理越好;
Storm 集群架构设计如下图所示:
Storm 采用Zookeeper来作为分布式协调组件,负责Nimbus和多个Supervisor之间的所有协调工作。
Nimbus后台进程和Supervisor后台进程都是快速失败(Fail-fast)和无状态(Stateless)的,Master节点并没有直接和Worker节点通信,而是借助Zookeeper将状态信息存放在Zookeeper中或本地磁盘中,以便节点故障时进行快速恢复。
MapReduce、Spark 这类计算引擎主要用于处理离线数据,被称为 “批处理”。而与之相对的又有专门处理实时数据的计算引擎,这类计算引擎被称为 “流处理”。目前的代表计算引擎有 Spark Streaming、Storm、Flink。就目前而言,Storm 已经逐渐被淘汰了,Flink 正变的越来越重要。
十三、数据迁移工具 Sqoop
Sqoop是Apache旗下的一款开源的工具,主要用于在Hadoop或Hive与传统的数据库(MySQL、Postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL 、Oracle、Postgresql等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导出到关系型数据库中。
Sqoop的本质是一个命令行工具,与HDFS、Hive、MySQL等经常一起使用。
Sqoop 工作机制利用 MapReduce 分布式批处理,加快了数据传输速度,保证了容错性。
十四、基于HBase的高效SQL引擎 Phoenix
Phoenix 最早是 saleforce 的一个开源项目,后来成为 Apache 的顶级项目。
Phoenix 构建在 HBase 之上的开源 SQL 层,能够让我们使用标准的 JDBC API 去建表,插入数据和查询 HBase 中的数据,从而可以避免使用 HBase 的客户端 API。
在我们的应用和 HBase 之间添加了 Phoenix,并不会降低性能,而且我们也少写了很多代码。
当Phoenix接收到SQL查询后,它会在本地编译成HBase的API,然后推到集群进行分布式的查询或计算。它自动创建了一个元数据库用来存储HBase的表的元数据信息。因为Phoenix是直接调用HBase的API,coprocessors和自定义的filters,所以对于大量小查询可以实现毫秒级返回,千万级别的数据实现秒级返回。
Phoenix的目标是在HBase之上提供一个高效的类关系型数据库的工具,定位为低延时的查询应用,适合需要在HBase之上使用SQL实现CRUD操作。
十五、数据挖掘算法库Mahout
Mahout起源于2008年,最初是Apache Lucent的子项目,它在极短的时间内取得了长足的发展,现在是Apache的顶级项目。
Mahout的主要目标是创建一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout现在已经包含了聚类、分类、推荐引擎(协同过滤)和频繁集挖掘等广泛使用的数据挖掘方法。除了算法,Mahout还包含数据的输入/输出工具、与其他存储系统(如数据库、MongoDB 或Cassandra)集成等数据挖掘支持架构。
Mahout最大的优点就是基于hadoop实现,把很多以前运行于单机上的算法,转化为了MapReduce模式,这样大大提升了算法可处理的数据量和处理性能。