目录(各名词功能简述)

一、数据传输层

1、Sqoop

2、Flume

3、Kafka

二、数据存储

1、HDFS

2、HBase

三、资源管理层

1、YARN

四、数据计算

1、MapReduce

2、Hive(可存储

3、Spark Mlib

4、Spark SQL

5、Spark Streaming

6、Storm

五、任务调度层

1、Oozie

2、Azkaban

六、分布式协调服务

1、zookeeper



一、数据传输层

1、Sqoop

Sqoop是一款用来在Hadoop(Hive)和关系型数据库之间传输数据的工具。             

功能概述:Sqoop主要用于在HDFS/Hive与关系型数据库(Mysql、Oracle、SQLserver、...)之间进行数据的传输,可以将一个关系型数据库中的数据导入到HDFS(Hive)中,也可以将HDFS中的数据导入到关系型数据库中。

工作机制:将导入或导出命令翻译成 mapreduce 程序来实现,
在翻译出的 mapreduce 中主要是对 inputformat 和 outputformat 进行定制。

2、Flume

Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。

功能概述:Flume支持在日志系统中定制各类数据发送方,用于收集数据。同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力 。

工作机制:Flume-og采用了多Master的方式。Flume-ng取消了集中管理配置的 Master 和 Zookeeper,变为一个纯粹的传输工具。为了保证配置数据的一致性,Flume引入了ZooKeeper,用于保存配置数据。在配置数据发生变化时,ZooKeeper可以通知Flume Master节点。Flume Master间使用gossip协议同步数据。

3、Kafka

Kafka是一种高吞吐量的分布式发布订阅消息系统,可以处理消费者在网站中的所有动作流数据。 

功能概述:Kafka是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统,常见可以用于web/nginx日志、访问日志,消息服务等。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。主要应用场景是日志收集系统和消息系统。

工作机制:Kafka是显式分布式架构,producer、broker(Kafka)和consumer都可以有多个。Kafka的运行依赖于Zookeeper,Producer推送消息给Kafka,Consumer从Kafka拉消息。

二、数据存储

1、HDFS

Hadoop分布式文件系统(HDFS)是指被设计成适合运行在通用硬件上的分布式文件系统。

功能概述:HDFS有着高容错性的特点,并且设计用来部署在低廉的硬件上。而且它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集的应用程序。HDFS放宽了POSIX的要求这样可以实现流的形式访问文件系统中的数据。

体系结构:HDFS采用了主从(Master/Slave)结构模型,一个HDFS集群是由一个NameNode和若干个DataNode组成的。其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件的访问操作。集群中的DataNode管理存储的数据。SecondaryNameNode有两个作用,一是镜像备份,二是日志与镜像的定期合并。

工作机制:客户端要向HDFS写入数据,首先要跟NameNode通信以确认可以写文件并获得接收文件block的DataNode。然后,客户端按照顺序将文件block逐个传给相应DataNode,并由接收到block的DataNode负责向其他DataNode复制block副本。DataNode会定期向NameNode汇报自身所保存的文件block信息,而namenode则会负责保持文件副本数量。

2、HBase

HBase是一个非关系型分布式数据库,它参考了谷歌的BigTable建模,实现的编程语言为Java。

功能概述:HBase(Hadoop Database)是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。HBase利用Hadoop HDFS作为其文件存储系统。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。

工作机制:Hadoop HDFS为HBase提供了高可靠性的底层存储支持,Hadoop MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制。

Pig和Hive还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的非常简单。 Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移变的非常方便。 

三、资源管理层

1、YARN

Apache Hadoop YARN是一种新的Hadoop资源管理器,它是一个通用资源管理系统。

功能概述:YARN的基本思想是将JobTracker的两个主要功能(资源管理和作业调度/监控)分离,主要方法是创建一个全局的ResourceManager(RM)和若干个针对应用程序的ApplicationMaster(AM)。可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。

工作机制:ResourceManager(RM)是一个全局的资源管理器,负责整个系统的资源管理和分配。ApplicationMaster(AM)功能是与RM调度器协商以获取资源、资源的二次分配、与NM通信以启动/停止任务,用户提交的每个应用程序均包含一个AM。NodeManager(NM)是每个节点上的资源和任务管理器,Container是YARN中的资源抽象,YARN会为每个任务分配一个Container,且该任务只能使用该Container中描述的资源。

四、数据计算

1、MapReduce

MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。

功能概述:MapReduce是一个基于集群的高性能并行计算平台(Cluster Infrastructure)。它允许用市场上普通的商用服务器构成一个包含数十、数百至数千个节点的分布和并行计算集群。它提供了一个庞大但设计精良的并行计算软件框架,能自动完成计算任务的并行化处理,自动划分计算数据和计算任务。主要功能:数据划分和计算任务调度、数据/代码互定位、系统优化、出错检测和恢复等。

工作机制:"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。Map函数,接受一个键值对(key-value pair),产生一组中间键值对。MapReduce框架会将map函数产生的中间键值对里键相同的值传递给一个reduce函数。Reduce函数,接受一个键,以及相关的一组值,将这组值进行合并产生一组规模更小的值(通常只有一个或零个值)。

2、Hive(可存储

Hive是基于Hadoop的一个数据仓库工具,用来对大规模数据的提取、转化和加载。

功能概述:Hive是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。

工作机制:Hive 是一种底层封装了Hadoop 的数据仓库处理工具,使用类SQL 的HiveSQL 语言实现数据查询,所有Hive的数据都存储在Hadoop 兼容的文件系统(例如HDFS)中。Hive 在加载数据过程中不会对数据进行任何的修改,只是将数据移动到HDFS中Hive 设定的目录下,因此,Hive 不支持对数据的改写和添加,所有的数据都是在加载的时候确定的。

3、Spark Mlib

MLlib 是 Spark 的机器学习库,旨在简化机器学习的工程实践工作,并方便扩展到更大规模。

功能概述:MLlib 由一些通用的学习算法和工具组成,包括分类、回归、聚类、协同过滤、降维等,同时还包括底层的优化原语和高层的管道 API。相比于基于 Hadoop MapReduce 实现的机器学习算法(如 HadoopManhout),Spark MLlib 在机器学习方面具有一些得天独厚的优势。

工作机制:Spark 是基于内存计算的,天然适应于数据挖掘的迭代式计算,但是对于普通开发者来说,实现分布式的数据挖掘算法仍然具有极大的挑战性。因此,Spark 提供了一个基于海量数据的机器学习库 MLlib,它提供了常用数据挖掘算法的分布式实现功能。开发者只需要有 Spark 基础并且了解数据挖掘算法的原理,以及算法参数的含义,就可以通过调用相应的算法的 API 来实现基于海量数据的挖掘过程。MLlib 由 4 部分组成:数据类型,数学统计计算库,算法评测和机器学习算法。

4、Spark SQL

Spark SQL提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作用。

功能概述:Spark SQL是Spark用来处理结构化数据的一个模块,相对于RDD的API来说,提供更多结构化数据信息和计算方法,可以通过SQL或DataSet API方式同Spark SQL进行交互。不仅兼容Hive,还可以从RDD、parquet文件、Json文件获取数据、支持从RDBMS获取数据。

工作机制:DataFrame的前身是SchemaRDD,不继承RDD,自己实现了RDD的大部分功能,在DataFrame上调用RDD的方法转化成另外一个RDD。DataFrame可以看做分布式Row对象的集合,DataFrame不仅有比RDD更多的算子,还可以进行执行计划的优化。Row被DataFrame自动实现,一行就是一个Row对象。Schema包含了以ROW为单位的每行数据的列的信息。

5、Spark Streaming

Spark Streaming是基于Spark Core基础之上用于处理实时计算业务的框架。

功能概述:Spark Streaming 是 Spark 核心 API 的一个扩展,可以实现高吞吐量的、具备容错机制的实时流数据的处理。Spark Streaming 支持从多种数据源获取数据,包括 Kafka、Flume、Twitter、ZeroMQ、Kinesis 以及 TCP Sockets。从数据源获取数据之后,可以使用诸如 map、reduce、join 和 window 等高级函数进行复杂算法的处理,最后还可以将处理结果存储到文件系统、数据库和现场仪表盘中。

工作机制:输入的数据流经过Spark Streaming的receiver,数据切分为DStream(类似RDD,DStream是Spark Streaming中流数据的逻辑抽象),然后DStream被Spark Core的离线计算引擎执行并行处理。Spark计算平台有两个重要角色,Driver和executor,不论是Standlone模式还是Yarn模式,都是Driver充当Application的master角色,负责任务执行计划生成和任务分发及调度。executor充当worker角色,负责实际执行任务的task,计算的结果返回Driver。

6、Storm

Apache Storm是一个分布式实时大数据处理系统,它是一个流数据框架,具有最高的摄取率。

功能概述:Apache Storm是一个免费开源、分布式、高容错的实时计算系统。Storm令持续不断的流计算变得容易,弥补了Hadoop批处理所不能满足的实时要求。Storm经常用于在实时分析、在线机器学习、持续计算、分布式远程调用和ETL等领域。

工作机制: Storm主要分为两种组件Nimbus和Supervisor。任务状态和心跳信息等都保存在Zookeeper上的,提交的代码资源都在本地机器的硬盘上。Nimbus 负责在集群里面发送代码,分配工作给机器,并且监控状态,全局只有一个。Supervisor 会监听分配给它那台机器的工作,根据需要启动/关闭工作进程Worker。Zookeeper是Storm重点依赖的外部资源。

Apache Flink是由Apache软件基金会开发的开源流处理框架。

功能概述:Flink核心是用Java和Scala编写的分布式流数据流引擎。Flink以数据并行和流水线方式执行任意流数据程序,Flink的流水线运行时系统可以执行批处理和流处理程序。此外,Flink的运行时本身也支持迭代算法的执行。

工作机制:Flink程序在执行后被映射到流数据流,每个Flink数据流以一个或多个源(数据输入,例如消息队列或文件系统)开始,并以一个或多个接收器(数据输出,如消息队列、文件系统或数据库等)结束。Flink可以对流执行任意数量的变换,这些流可以被编排为有向无环数据流图,允许应用程序分支和合并数据流。

五、任务调度层

1、Oozie

Oozie是用于 Hadoop 平台的开源的工作流调度引擎。

功能概述:Oozie主要用于管理与组织Hadoop工作流。Oozie的工作流必须是一个有向无环图,实际上Oozie就相当于Hadoop的一个客户端,当用户需要执行多个关联的MR任务时,只需要将MR执行顺序写入workflow.xml,然后使用Oozie提交本次任务,Oozie会托管此任务流。

工作机制:现实业务中处理数据时不可能只包含一个MR操作,一般都是多个MR,并且中间还可能包含多个Java或HDFS,甚至是shell的操作,利用Oozie可以完成这些任务。实际上Oozie不是仅用来配置多个MR工作流的,它可以是各种程序夹杂在一起的工作流,比如执行一个MR1后,接着执行一个java脚本,再执行一个shell脚本,接着是Hive脚本,然后又是Pig脚本,最后又执行了一个MR2,使用Oozie可以轻松完成这种多样的工作流。使用Oozie时,若前一个任务执行失败,后一个任务将不会被调度。

2、Azkaban

Azkaban是个简单的批处理调度器,用来构建和运行Hadoop作业或其他脱机过程。

功能概述:Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。总体来说,ooize相比azkaban是一个重量级的任务调度系统,功能全面,但配置使用也更复杂。如果可以不在意某些功能的缺失,轻量级调度器azkaban是很不错的候选对象。

工作机制:Azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。

六、分布式协调服务

1、zookeeper

ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效、高可用的分布式协调服务。

功能概述:ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

工作机制:Zookeeper 中的角色:

领导者(leader):负责进行投票的发起和决议,更新系统状态。

跟随者(follower):用于接收客户端请求并给客户端返回结果,在选主过程中进行投票。

观察者(observer):可以接受客户端连接,将写请求转发给 leader,但是observer 不参加投票的过程,只是为了扩展系统,提高读取的速度。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐