hadoop体系框架的简单总结

一、hadoop成员简单介绍说明

  • Apache Hadoop: 是Apache开源组织的一个分布式计算开源框架,提供了一个分布式文件系统 (HDFS)和支持MapReduce分布式计算的软件架构。
  • Apache Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
  • Apache Pig: 是一个基于Hadoop的大规模数据分析工具,它提供的SQL-LIKE语言叫Pig Latin,该语言的编译器会把类SQL的数据分析请求转换为一系列经过优化处理的MapReduce运算。
  • Apache HBase: 是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。
  • Apache Sqoop: 是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
  • Apache Zookeeper: 是一个为分布式应用所设计的分布的、开源的协调服务,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,简化分布式应用协调及其管理的难度,提供高性能的分布式服务
  • Apache Mahout:是基于Hadoop的机器学习和数据挖掘的一个分布式框架。Mahout用MapReduce实现了部分数据挖掘算法,解决了并行挖掘的问题。
  • Apache Cassandra:是一套开源分布式NoSQL数据库系统。
  • Apache Avro: 是一个数据序列化系统,设计用于支持数据密集型,大批量数据交换的应用。
  • Apache Ambari: 是一种基于Web的工具,支持Hadoop集群的供应、管理和监控。
  • Apache Chukwa: 是一个开源的用于监控大型分布式系统的数据收集系统,它可以将各种各样类型的数据收集成适合 Hadoop 处理的文件保存在 HDFS 中,供 Hadoop 进行各种 MapReduce 操作。
  • Apache Hama: 是一个基于HDFS的BSP(Bulk Synchronous Parallel)并行计算框架, Hama可用于包括图、矩阵和网络算法在内的大规模、大数据计算。
  • Apache Flume: 是一个分布的、可靠的、高可用的海量日志聚合的系统,可用于日志数据收集,日志数据处理,日志数据传输。
  • Apache Giraph: 是一个可伸缩的分布式迭代图处理系统。
  • Apache Oozie: 是一个工作流引擎服务器, 用于管理和协调运行在Hadoop平台上(HDFS、Pig和MapReduce)的任务。
  • Apache Crunch: 基于Google的FlumeJava库编写的Java库,用于创建MapReduce程序。与Hive,Pig类似,Crunch提供了用于实现如连接数据、执行聚合和排序记录等常见任务的模式库
  • Apache Whirr: 是一套运行于云服务的类库(包括Hadoop),可提供高度的互补性。Whirr学支持Amazon EC2和Rackspace的服务。
  • Apache Bigtop: 是一个对Hadoop及其周边生态进行打包,分发和测试的工具。
  • Apache HCatalog: 是基于Hadoop的数据表和存储管理,实现中央的元数据和模式管理,跨越Hadoop和RDBMS,利用Pig和Hive提供关系视图。
  • Cloudera Hue: 是一个基于WEB的监控和管理系统,实现对HDFS,MapReduce/YARN, HBase, Hive, Pig的web化操作和管理。

二、hadoop整体框架

Hadoop主要由HDFS、MapReduce、HBase、Hive及ZooKeeper等成员组成。

Hadoop2.0架构

Haddop两大核心设计为:底层用于存储集群中所有存储节点文件的文件系统HDFS来执行MapReduce的MapReduce引擎。

  • HDFS:client——文件获取;NameNode——文件管理;DataNode——文件存储。

Hdfa是一个高度容错性的分布式文件系统,以流式访问模式访问应用程序的数据,大大提高了整个系统的吞吐量,非常适用与具有超大数据集的应用程序中。

1、HDFS架构采用主从架构(master/slave)。一个典型的HDFS集群包含一个NameNode节点和多个DataNode节点。NameNode节点负责整个HDFS文件系统中的文件的元数据的保管和管理,集群中通常只有一台机器运行NameNode实例,DataNode节点保存文件中的数据,集群中的机器分别运行一个DataNode实例。DataNode节点通过心跳机制与NamaNode节点进行定时的通信。

Hdfs架构如下所示:

2、HDFS读写操作:

文件写入:1)Client向NameNode发起文件写入的请求;2)NameNode根据文件大小及文件块配置情况,返回给Client所管理部分DataNode的信息;3)Client将文件划分为多个文件块,根据DataNode的地址信息,按顺序写入到每一个DataNode块中。

文件读取:1)Client向NameNode发起文件读取的请求;2)NameNode返回文件存储的DataNode的信息;3)Client读取文件信息。

  • MapReduce:是一种编程模型,用于大规模数据集的并行计算。采用分而治之思想,先把任务分发到集群多个节点上,并行计算,然后把计算结果合并,从而得到最终计算结果,所涉及的任务调度,负载均衡,容错处理等,都有MapReduce框架完成。

1)MapReduce作业运行流程:

在Hadoop中。每一个mapreduce任务都会被初始化一个Job,同时每一个Job又能够分为两个阶段:map阶段和reduce阶段。这两个阶段分别用两个函数来表示,即map函数和reduce函数。Map函数接受一个<key,value>形式的输入,然后产生相同形式的<key,value>的中间输出,hadoop会负责将全部具有相同中间key值的value集合到一起传递给reduce函数,reduce函数接收一个<key,(list of values)>形式的输入,然后对这个value集合进行处理并输出结果。如图所示:

2)MapReduce流程中Map端和Reduce端分析:

Map端:

1)每一个输入分片会让一个map任务来处理,默认情况下,以HDFS的一个块大小(hadoop2.X默认为128M)为一个分片。Map的输出结果会暂时放在一个环形内存缓冲区中,当该缓冲区快要溢出时(默认为缓冲区大小的80%),会在本地文件系统中创建一个溢出文件,将该缓冲区的数据写入这个文件中;

2)在写入磁盘之前,线程会根据reduce任务的数目将任务划分为相同数目的分区,即一个reduce任务对应一个分区的数据。然后对每个分区中的数据进行排序,若此时设置Combiner,将排序后的结果进行Combia操作,目的是让尽可能少的数据写入到磁盘中;

3)当map任务输出最后一个记录时,可能会有很多的溢出文件,这是需要将这些文件合并,合并的过程中会不断地进行排序和combia操作,最后合并成一个已分区且已排序的文件;

4)将分区中的数据拷贝给相对应的reduce任务。

Reduce端:

1)Reduce会接收到不同mao任务传来的数据,同时每个map传来的数据都是有序的,若reduce端接收的数据量相当小,则直接存储在内存中,若数据量超过了该缓冲区大小的一定比例,则对数据合并后溢写到磁盘中;

2)随着溢写文件的增多,后台线程会将他们合并成一个更大的有序文件。其实不管在map端还是在reduce端,mapreduce都是反复地执行排序,合并操作;

3)合并过程中会产生许多的中间文件,但mapreduce会让写入磁盘的数据尽可能的少,同时最后一次合并的结果并没有写入磁盘,而是直接输入到reduce函数。

三、Hadoop重点成员组件及其作用

Hadoop除了核心HDFS及Mapreduce外,还有其他的重点成员:

1)Hbase(分布式列存数据库)

Hbase是一个针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。Hbase采用BigTable的数据模型:增强的稀疏排序映射表(key/value),其中,键由行关键字、列关键字和时间戳构成。Hbase提供了对大规模数据的随机、实时读写访问,同时,Hbase中保存的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。

数据模型:Schema-->Table-->Column Family-->Column-->RowKey-->TimeStamp-->Value

Hbase体系结构三大重要组成部分:HRegion  HBaseMaster   HBase client

2)Hive(基于Hadoop的数据仓库)

Hive定义了一种类似SQL的查询语言(HQL),将SQL转化为MapReduce任务在Hadoop上执行。通常用于离线分析。

Hive可从元数据存储、数据存储和数据交换三方面说明:

元数据存储:元数据(数据仓库中表名称、表的列,表的分区、表分区的属性等),Hive将元数据存储在RDM中;

数据存储:Hive有专门的数据存储格式,用户在创建表的时候只需要告诉Hive数据中列分隔符和行分隔符,既可以解析数据;

数据交换:通常使用Hive客户端链接HiveServer,也可通过web界面去写sql,Hive大部分查询实际上都是利用MapReduce进行计算的

3)Zookeeper(分布式协作服务)

  是一个分布式、开放源码的分布式应用程序协调服务,为分布式应用提供一致性服务的软件。解决分布式环境下的数据管理问题:统一命名,状态同步,集群管理,配置同步等。

4)Sqoop(数据同步工具)

主要用于传统数据库和Hadoop之间传输数据。数据的导入和导出本质上是Mapreduce程序,充分利用了MR的并行化和容错性。

5) Pig(基于Hadoop的数据流系统)

定义了一种数据流语言-Pig Latin,将脚本转换为MapReduce任务在Hadoop上执行,通常用于进行离线分析。

6)Mahout(数据挖掘算法库)

主要目标是创建一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout现在已经包含了聚类、分类、推荐引擎(协同过滤)和频繁集挖掘等数据挖掘方法,还包含数据的输入/输出工具、与其他存储系统(如数据库、MongoDB或Cassandra)集成等数据挖掘支持架构。

7)Flume(日志收集工具)

  Cloudera开源的日志收集系统,具有分布式、高可靠、高容错、易于定制和扩展的特点。将数据从产生、传输、处理并最终写入目标的路径的过程抽象为数据流,在具体的数据流中,数据源支持在Flume中定制数据发送方,从而支持收集各种不同协议数据。同时Flume数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。

 以上关于hadoop相关的内容,是我在初步学习hadoop相关概念,把网上相关资料整合在一起,方便自己理解。如果有什么问题,欢迎大家可以讨论指正!

猜你喜欢

转载自blog.csdn.net/xuexi_39/article/details/83008999
今日推荐