Hadoop大数据生态圈中的组件角色与关系

各种大数据框架近几年发展得如火如荼,比如Hadoop, MapReduce,Hive, Hbase, Storm, Spark, Flink, Kylin 等。

一、Hadoop核心组件

首先要介绍一下Hadoop,现在Hadoop分为3部分,分别是HDFS,Yarn和Mrv2

Hadoop Common

Hadoop Common是在Hadoop0.2版本之后分离出来的HDFS和MapReduce独立子项目的内容,是Hadoop的核心部分,能为其他模块提供一些常用工具集,如序列化机制、Hadoop抽象文件系统FileSystem、系统配置工具Configuration,并且在为其平台上的软件开发提供KPI等。其他Hadoop子项目都是以此为基础而建立来的。

近几年大数据潮流的推进,是需求和技术相互促进的结果,对大数据需求最强烈公司非Google这个互联网巨头莫属,所以Google率先攻克了大数据处理的技术难题,满足了它自己的业务需要。Google采用的方法是“分布式计算”,用大量的普通服务器组成集群,并发处理数据;
Google总结自己的经验,发了3篇论文,被称为大数据的三大论文。开源社区基于论文中的设计思路,实现了Hadoop开源软件,让更多的中小公司可以低成本地运用大数据,然后进一步引出更多的大数据需求。
多机并行处理的思想由来已久,但是实现一个多机协同的并行处理程序难度非常高,Hadoop开源软件拆除了这个障碍。目前Hadoop被称为一个“生态”,相关的软件项目繁多,通常情况下,大家说的Hadoop,指的是提供海量数据存储能力的HDFS,管理大量机器运算资源的Yarn以及一个编程框架MapReduce。有了这些工具,普通水平的程序员也可以轻松处理TB级别的数据。
上图的App指的是一个具体的任务,比如运行一个word count,在大数据集上对某个列进行排序等。

HDFS

HDFS(Hadoop分布式文件系统)源自于Google的GFS论文,发表于2003年10月,HDFS是GFS的实现版。HDFS是Hadoop体系中数据存储管理的基础,它是一个高度容错的系统,能检测和应对硬件故障,在低成本的通用硬件上运行。HDFS简化了文件的一次性模型,通过流式数据访问,提供高吞吐量应用程序数据访问功能,适用带有数据集的应用程序。HDFS提供一次写入多次读取的机制,数据以块的形式,同时分布存储在不同的物理机器上。 
HDFS默认的最基本的存储单位是64MB的数据块,和普通文件系统一样,HDFS中的文件被分成64MB一块的数据块存储。它的开发是基于流数据模式访问和处理超大文件的需求。
HDFS的设计思路主要有三点:一是普通服务器的硬性故障是常态,而不是“异常”,所以分布式文件系统要有自动化的容错性;二是和Linux或者Windows的文件系统相比,分布式文件系统存储的文件要大得多,所以存储粒度大;三是存储的大文件,很少需要修改其中的某一小部分,通常情况下只需要在尾部追加内容。有了HDFS,TB、PB基本的数据存取很容易了,不但如此,HDFS还要多并行处理提供支持,并行处理需要并发地读和写文件。

MapReduce

Mapduce(分布式计算框架)源自于Google的MapReduce论文,发表于2004年12月,Hadoop MapReduce是Google Reduce 克隆版。MapReduce是一种分布式计算模型,用以进行海量数据的计算。它屏蔽了分布式计算框架细节,将计算抽象成Map 和Reduce两部分,其中Map对数据集上的独立元素进行指定的操作,生成键-值对形式中间结果。Reduce则对中间结果中相同“键”的所有“值”进行规约,以得到最终结果。MapReduce非常适合在大量计算机组成的分布式并行环境里进行数据处理。

Yarn

Yarn由一个ResourceManager和每台机器上的一个NodeManager组成。ResourceManage拥有为系统中所有应用分配资源的绝对权力。NodeManager作为每个机器上的容器,管理系统资源(cpu,memory,disk,network)的使用情况,并向ResourceManager或者Scheduler报告。
在Yarn上运行分布式应用,是通过ApplicationsMaster进行的,这里的应用指一个MapR job或者构成DAG图的多个job,应用运行结束相应的ApplicationsMaster就关闭退出了。
有些持续运行的框架,比如Hbase比较特殊,可以部署在yarn上,也可以不部署在yarn上。还有flink在yarn上运行,有两种部署方式: 一是long-running Flink cluster on YARN;另一种是 run a Flink job on YARN。
YARN(分布式资源管理器)是下一代MapReduce,即MRv2,是在第一代MapReduce基础上演变而来的,主要是为了解决原始Hadoop扩展性差,不支持多计算框架而提出的。YARN是下一代Hadoop计算平台,是一个通用的运行时框架,用户可以编写自己的极端框架,在该运行环境中运行。

Zookeeper

Zookeeper(分布式协作服务)源自Google的Ghubby论文,发表于2006年11月,Zookeeper是CHubby实现版。Zookeeper的主要目标是解决分布式环境下的数据管理问题,如统一命名、状态同步、集群管理、配置同步等。Hadoop的许多组件依赖于Zookeeper,它运行在计算机集群上面,用于Hadoop管理操作。


Mrv2

Yarn支持不同的计算框架是通过ApplicationsMaster来实现的,不同的计算框架实现各自的类库,然后由ApplicationsMaster运行,比如Mrv2,Spark,Flink都可以通过这种方式在Yarn上运行。
Mrv2运行时,首先作为ApplicationsMaster向Yarn的ResourceManager请求所需的资源,然后通过和NodeManager配合启动这些资源,监控它们的执行情况,直到任务运行结束,然后这个ApplicationsMaster实例退出。

Mesos

Mesos也是一个分布式集群的资源管理框架,相比较yarn它更底层,使用mesos需要它上面计算框架实现更多东西。使用Hadoop组件有这样一种部署方式,是先启动mesos,然后再在上面部署hdfs,yarn,这样就可以运行mapreduce了。Spark,flink这种计算框架都支持直接部署到mesos上(需要用到hdfs的话,需要在mesos上部署hdfs)。

二、数仓相关

Hive

Hive(数据仓库)由Facebook开源,最初用于解决海量结构化的日志数据统计问题。Hive定义了一种类似SQL的查询语言(HQL),将HQL转化为MapReduce任务在Hadoop上执行,通常用于离线分析。HQL用于运行存储在Hadoop上的查询语句,Hive使不熟悉MapReduce开发人员也能编写数据查询语句,然后这些数据被翻译成Hadoop上面的MapReduce任务。
Hive的出现是为了自动化编写MapReduce程序。根据上面的介绍,基于Mrv2的计算框架,我们实现相应的Mapper,Reducer后就可以提交运行,然后通过Yarn的调度,执行完这个MapReduce程序。
但是一个Mapper、一个Reducer的能力有限,完成一个实际业务目的可能需要很多个步骤,比如对一个大的数据集,首先通过某个字段筛选出想要的行,然后根据另一个字段分组统计,最后再对结果进行排序。这些功能逐个通过Mapreduce实现就比较繁琐了,并且对不同的数据集,处理方式可能类似,都是筛选、分组统计、排序等相似的功能。我们可以通过熟悉的SQL语句来描述需要对数据进行的处理,然后通过hive里的引擎把sql转换成一个或多个mapreduce任务并调度执行,这就大大减少了相似的mapreduce编写工作,提高了效率。

Pig

Pig(ad-hoc脚本)由yahoo开源,其设计动机是提供一种基于MapReduce的ad-hoc(计算query时发生)数据分析工具。Pig定义了一种数据流语言——Pig Latin,它是MapReduce编程的复杂性抽象,Pig平台包括运行环境和用于分析Hadoop数据集的脚本语言(Pig Lain)。其编译器将Pig Lain翻译成MapReduce程序序列,将脚本转换为MapReduce任务在Hadoop任务在Hadoop上执行,通常用于进行离线分析。

Tez

Tez是一个针对Hadoop数据处理应用程序的新分布式执行框架。Tez是Apache最新的支持DAG作业的开源计算框架,它可以将多个有依赖的作业转换为一个作业从而大幅提升DAG作业的性能。Tez并不直接面向最终用户——事实上它允许开发者为最终用户构建性能更快、扩展性更好的应用程序。Hadoop传统上是一个大量数据批处理平台。但是,有很多用例需要近乎实时的查询处理性能。还有一些工作则不太适合MapReduce,例如机器学习。Tez的目的就是帮助Hadoop处理这些用例场景。
Tez项目的目标是支持高度定制化,这样它就能够满足各种用例的需要,让人们不必借助其他的外部方式就能完成自己的工作,如果 Hive和 Pig 这样的项目使用Tez而不是MapReduce作为其数据处理的骨干,那么将会显著提升它们的响应时间。Tez构建在YARN之上,后者是Hadoop所使用的新资源管理框架。

Sqoop

Sqoop(数据ETL/同步工具)是SQL-to-Hadoop的缩写,主要用于传统数据和Hadoop之前传输数据。数据的导入和导出本质上是MapReduce程序,充分利用了MR的并行化和容错性,Sqoop利用数据库技术描述数据架构,用于关系数据库、数据仓库和Hadoop之间转移数据。

三、实时相关

HBase

HBase是一个分布式noSql数据库,是google的bigtable论文的开源实现。
HBase可以被理解成一个打的Map数据结构,类似Map>这种。但是它自动地处理海量数据存储的扩展,通过增加或减少机器来改变数据库的容量限制。HBase底层依赖HDFS来实现数据的高可用性,hbase集群由HMaster和HregionServer组成,这两个组件可以独立部署到集群上,也可以部署到Yarn上。
HBase也是Hadoop家族的成员,所以它对Mrv2,Hive的支持很好,可以作为它们的数据源或者结果存储位置;作为Mrv2数据源的时候,Hbase可以提供在HDFS上的位置信息,实现高效的并行计算。

Flume

Flume(日志收集工具)是Cloudera开源的日志系统收集系统,具有分布式、高可靠、高容错、易于定制和扩展的特点。它将数据从产生、传输、处理并最终写入目标的路径的过程抽象为数据流,在具体的数据流中,数据源支持在Flume中定制数据发送方,从而支持收集各种不同协议数据。同时,Flume数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。此外,Flume还具有能够将日志写往各种数据目标(可定制)的能力。总的来说,Flume是一个可扩展、适合复杂环境的海量日志收集系统,当然也可以用于收集其他类型数据。

Spark

Spark(内存DAG计算模型)是一个Apche项目,被标榜为“快如闪电的集群计算”,它拥有一个繁荣的开源社区,并且是目前最活跃的Apache项目。最早Spark是UC Berkeley AMP Lab所开源的类Hadoop MapReduce的通用计算框架,Spark提供了一个更快、更通用的数据处理平台。和Hadoop相比,Spark平台可以让你的程序在内存中运行时速度提升100倍,或者在磁盘上运行时速度提升10倍。
Spark被认为是第二代大数据处理框架。第一代框架是基于简单的Map Reduce模型的,第一代计算框架和运算的基础,也就是分布式文件系统和分布式资源管理系统一起被创建出来。Spark沿用现有的分布式文件系统和分布式资源管理系统,在计算模型方面有很大的创新。
上面提到Hive可以把sql语句转成多个Mapreduce任务并执行,这和逐个实现Mapper Reducer相比有很大的效率提升;Spark是改进了Mrv2运算模型,首先向上层用户提供更多的算子来表达业务逻辑,底层则把每次任务转换成DAG图,对DAG图进行物理运算的时候,更多地利用内存来缓存,减少JVM的启停次数等,通过这些方法大大提高了数据处理速度。
Spark的生态也很完善,比如Spark Sql,Spark Streaming,Spark MLlib等。

Flink

Flink很长一段时间被Spark的光环掩盖,Flink的特点是实时流计算(Spark Streaming可以轻松做到秒级别的实时计算),把实时计算提到了更高的优先级。
Flink充分考虑事件的时间属性,通过WaterMark等机制,可以实时准确地完成完成流式计算,轻松实现CEP等功能,把批计算当成流计算的一种特例。
Flink像Spark一样,也可以部署到Yarn上,可以用HDFS作为分布式存储。

Kafka

Kafka是Linkedin于2010年12月开源的消息系统,主要用于处理活跃的流式数据。活跃的流失数据在Web网站应用中非常常见,这些数据包括网站的PV(Page View),用户访问了什么内容,搜索了什么内容等,这些数据通常以日志的形式保存下来,然后每隔一段时间进行一次统计处理。

Kylin

大部分的大数据处理结果,是生成了报表供业务人员分析查阅,快速高效地生成报表就比较重要了。无论是hive还是Spark sql,通过计算生成报表的时间都在分钟级以上,Kylin对输入的hive表(组织成维度/度量的星形模型),预先通过MR进行计算,把计算结果以cube元数据的形式存到HBase里,然后用户可以通过JDBC Driver以sql的方式对数据进行快速查询。
Storm,Zookeeper,Pig,TiDB

四、其他相关

Mahout(数据挖掘算法库)

Mahout起源于2008年,最初是Apache Lucent的子项目,它在极短的时间内取得了长足的发展,现在是Apache的顶级项目。相对于传统的MapReduce编程方式来实现机器学习的算法时,往往需要话费大量的开发时间,并且周期较长,而Mahout的主要目标是创建一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。 
Mahout现在已经包含了聚类、分类、推荐引擎(协同过滤)和频繁集挖掘等广泛使用的数据挖掘方法。除了算法,Mahout还包含数据的输入/输出工具、与其他存储系统(如数据库、MongoDB 或Cassandra)集成等数据挖掘支持架构。 
mahout的各个组件下面都会生成相应的jar包。此时我们需要明白一个问题:到底如何使用mahout呢? 
实际上,mahout只是一个机器学习的算法库,在这个库当中是想了相应的机器学习的算法,如:推荐系统(包括基于用户和基于物品的推荐),聚类和分类算法。并且这些算法有些实现了MapReduce,spark从而可以在hadoop平台上运行,在实际的开发过程中,只需要将相应的jar包即可。 

Storm\Zookeeper等综述:

Storm是第一代流处理框架,目前逐渐被spark streaming和Flink取代.
Zookeeper提供分布式协同服务,可以被用来做分布式服务的leader选取,主从自动切换等,大部分分布式集群框架都依赖ZooKeeper。
Pig类似Hive,使用Pig Latin语言写逻辑,翻译成MapReduce任务执行.
TiDB对标google的f1和spanner,支持acid,支持CAP理论中的C、P支持,但是也有高可用性。TIDB的使用场景是OLTP,也就是要替换传统的rdbms,比如Mysql。

你可能感兴趣的:(BigData,Hadoop)