• 一、认识Hadoop


    一、Hadoop简介

      Hadoop本质上起源于Google的集群系统,Google的数据中心使用廉价的Linux PC机组成集群,用其运行各种应用。即使是分布式的新手也可以迅速使用Google的基础设施。Google采集系统的核心的组件有两个:第一个就是GFS(Google FileSystem),一个是分布式文件系统,隐藏下层负载均衡,冗余复制等细节,对上层程序提供一个统一的文件系统API接口;第二个是MapReduce计算模型,Google发现大多数分布式运算可以抽象为MapReduce操作。Map是把输入Input分解成中间的Key/Value对,Reduce把Key/Value合成最终输出Output。这两个函数由程序员提供给系统,下层设施把Map和Reduce操作分布在集群上运行,并把结果存储在GFS上。

      而Hadoop就是Google集群系统的一个Java开源实现,是一个项目的总称,主要是由HDFS、MapReduce组成。其中Google FileSystem(GFS)的开源实现;MapReduce是Google MapReduce的开源实现。这个分布式框架很有创造性,而且有极大的扩展性,使Google在系统吞吐量上有很大的竞争力。

      Hadoop实现了HDFS文件系统和MapReduce,使Hadoop成为一个分布式的计算平台。用户只要分别实现Map和Reduce,并注册Job即可自动分布式运行。因此,Hadoop不仅仅是一个用于存储的分布式文件系统,而是用于由通用计算机设备组成的大型集群上执行分布式应用的框架。一般来讲,狭义的Hadoop就是指HDFS和MapReduce,是一种典型的Master-Slaver架构。

       从上图中可以看到,典型的Hadoop由一个Master逻辑节点和多个Slaver逻辑节点构成,Master逻辑节点由NameCode和JobTracker组成,NameCode是HDFS的Master,主要负责Hadoop分布式文件系统元数据的管理工作;JobTracker是MapReduce的Master,其主要职责就是启动、跟踪、调度各个TaskTracker的任务执行,每一个Slaver逻辑节点通常同时具有DataNode以及TaskTracker的功能。TaskTracker根据应用要求来结合本地数据执行Map任务及Reduce任务。

      如今广义的Hadoop其实已经包括Hadoop本身和基于Hadoop的开源项目,并且已经形成了完备的Hadoop生态链。如下图,系统之间的联系使用箭头来表示:

    • HDFS——Hadoop分布式文件系统,GFS的Java开源实现,运行于大型商用机器集群,可实现分布式存储。
    • MapReduce——一种并行计算框架,Google MapReduce模型的Java开源实现,基于其写出来的应用程序能够运行在由成千个商用机器组成的大型集群上,并以一种可靠容错的方式并行处理T级别及以上的数据集。
    • Zookeeper——分布式协调系统,Google Chubby的Java开源实现,是高可用的和可靠的分布式协同系统,提供分布式锁之类的基本服务,用于构建分布式应用。
    • Hbase——基于Hadoop的分布式数据库,Google BigTable的开源实现,是一个有序、稀疏、多维度的映射表,有良好的伸缩性和高可用性,用于将数据存储到各个计算节点上。
    • Hive——是为提供简单的数据操作而设计的分布式数据仓库,它提供了简单的类似SQL语法的HiveQL语言进行数据查询。
    • Cloudbase——基于Hadoop的数据仓库,支持标准的SQL语法进行数据查询。
    • Pig——大数据流处理系统,建立于Hadoop之上为并行计算环境提供了一套数据工作流语言和执行框架。
    • Mahout——基于Hadoop MapReduce的大规模数据挖掘和机器学习算法库。
    • Oozie——MapReduce工作流管理系统。
    • Sqoop——数据转移系统,是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库中的数据导入Hadoop的HDFS中,也可以将HDFS的数据导入关系型数据库中。
    • Flume——一个可用的、可靠的、分布式的海量日志采集、聚合和传输系统。
    • Scribe——Facebook开源的日志收集聚合框架系统。
    • RDBMS——传统的关系数据库系统,通过Sqoop就可以和Hadoop生态系统集成。

    二、大数据、Hadoop和云计算

      Hadoop最擅长的事情就是可以高效的处理海量规模的数据,这样Hadoop就和大数据及云计算结下了不解之缘。

    2.1 大数据

      大数据一般是指这样的数据:数据量巨大,需要运用新处理模式才能具有更强的决策力、洞察力和流程优化能力的海量、高增长率和多样化的信息资产。大数据可分成大数据技术、大数据工程、大数据科学和大数据应用等领域。大数据工程指大数据的规划建设及其运营管理的系统工程;大数据科学关注的是大数据网络发展和运营过程中发现和验证大数据的规律及其自然和社会活动之间的关系。

      大数据的特征有四个层面:第一,数据量巨大,从TB级别,跃升到PB级别;第二,数据类型繁多,包括网络日志、视频、图片、地理位置信息等;第三,价值密度低,商业价值高,以视频为例,在连续不间断的监控过程中,可能有用的数据仅仅只有一两秒;第四,处理速度快。最后这一点也和传统的数据挖掘技术有着本质的不同。业界将其归纳为4V——Volume、Variety、Value和Velocity。

    2.1.1 数据态的多样性问题

      大数据具有多态性,主要体现在数据源、结构及相关度上,在数据来源上包括图像、视频、音频、文本、网页、数据流等;在结构上不仅仅包括结构化的数据,还包括非机构化的数据;在相关度上不仅有数据记录彼此相关性问题,还有时间序列数据的相关性问题。

    2.1.2 维度复杂性问题

      首先,大数据中存在着多元空间的维度问题,例如典型的三元空间中大数据的产生、状态感应以及采集问题,这个问题在物联网中非常常见;其次,就是柔性粒度数据的传输、移动、存储及计算问题;最后,就是数据空间范围和数据密度的不均匀问题。

    2.1.3 大数据存储问题

      大数据最为显著的特征就是数据规模非常巨大,单机系统肯定无法解决存储问题,这就需要分布式存储系统作为大数据的存储支撑服务,而分布式存储系统需要考虑的核心问题包括:高可靠性、扩展性、伸缩率、容灾及恢复等问题。

    2.1.4 大数据计算分析问题

      由大数据的特征可知,大数据在数据规模上非常巨大,要在一定的时间内达到撷取、管理、处理并整理为能够帮助企业做出经营决策更有效的资讯,传统的顺序计算模式必然不能满足这样的需求,这就要求使用集群计算系统来完成计算分析任务。基于集群的计算模型主要包括:基于消息传递的MPI、MapReduce计算模型、流式计算框架Storm、S4、高性能集群计算HPCC,以及基于共享内存RDD的spark模型。

    2.1.5 大数据价值挖掘模型

      由于大数据的价值密度低而商业价值大,这使得大数据的价值挖掘显得格外重要,而价值挖掘主要包括两个阶段:第一个阶段就是过滤清洗,需要在尽量不损失其价值的条件下减小数据规模,同时在不改变数据基本属性的情况下采取数据清洗、抽样、去重、过滤、筛选、压缩、索引、提取元数据等方法,以直接将大数据变小;第二个阶段就是对商业价值的挖掘,主要是发挥大数据探索式考察与可视化作用,人机的交互分析可以将人的智慧融入数据,再者是通过群体智慧、社会计算、认知计算对数据价值进行提炼,从而挖掘出大数据中隐藏的商业价值。

    2.2 大数据、Hadoop和云计算的关系

      可以这样说,正是由于大数据对系统提出了很多极限的要求,不论是存储、传输还是计算,现有大数据技术难以满足大数据的需求,不论是存储、传输还是计算,现有计算技术难以满足大数据的需求,因此整个IT架构的革命性重构势在必行,存储能力的增长远远赶不上数据的增长,设计最合理的分层存储架构已成为信息系统的关键。分布式存储架构不仅需要scale up式的可扩展性,也需要scale out式的可扩展性,因此大数据处理离不开云计算技术,云计算可为大数据提供弹性可扩展的基础设施支撑环境以及数据服务的高效模式,大数据则为云计算提供了新的商业价值,大数据技术与云计算技术必将有更完美的结合。

      云计算因大数据问题而生,大数据驱动了云计算的发展,而Hadoop在大数据和云计算之间建起了一座坚实可靠的桥梁。

    三、设计思想与架构

      Hadoop最初的基本需求是为了处理海量的数据,这主要是因为单机系统无法完成海量数据的存储和计算,因为要设计一个超级计算机几乎是不可能的事情。“骐骥一跃,不能十步;驽马十驾,功在不舍”,从计算的角度来理解古人的这句话,就是再超级的计算机也很难一下处理海量的数据,因此需要分而为之,Hadoop就能将大数据分而处理,然后进行归约。在Hadoop中框架最核心的设计就是:HDFS和MapReduce。HDFS是Hadoop分布式文件系统Hadoop Distributed File System的缩写,是GFS的一个Java实现,为分布式计算存储提供了底层支持;MapReduce的思想最早由Google的一篇论文提出,简单解释MapReduce就是“任务的分解与结果的汇总”

    3.1 数据存储与切分

      在Hadoop中数据的存储是由HDFS负责的,HDFS是Hadoop分布式计算的存储基石,Hadoop的分布式文件系统和其他分布式文件系统有很多类似的性质。HDFS相比于其他文件系统,简单总结有如下基本特征:

    • 对于整个集群有单一的命名空间。
    • 数据一致性。适合一次写入多次读取的模型,客户端在文件没有被成功创建之前无法看到文件存在。
    • 文件会被分割成多个文件块,每个文件块被分配存储到数据节点上,而且根据配置会有复制文件块来保证数据的安全性。

      在Hadoop中数据存储涉及HDFS的三个重要角色,分别为:名称节点(NameCode)、数据节点(DataCode)、客户端。

      NameCode可以看成是分布式文件系统中的管理者,主要负责管理文件系统的命名空间、集群配置信息、存储块的复制。NameCode会存储文件系统的Metadata在内存中,这些信息主要包括文件信息,即每一个文件对应的文件块信息,以及每一个文件块在DataNode的信息。

      DataCode是文件存储的基本单元。它将Block存储在本地文件系统中,保存了Block的Metadata,同时周期性的发送所有存在的Block的报告给NameNode。Client就是需要获取分布式文件系统文件的应用程序

      数据存储过程中主要通过三个操作来说明NameCode、DataCode、Client之间的交互关系。

      文件写入HDFS的基本流程如下:

      (1)Client向NameCode发起文件写入请求。

      (2)NameCode根据文件大小和文件块配置情况,向Client返回它所管理的NodeCode的信息。

      (3)Client将文件划分为多个Block,根据DataNode的地址信息,按顺序写入每一个DataNode中。

      文件读取HDFS的基本流程如下:

      (1)Client向NodeCode发起文件读取请求。

      (2)NodeCode返回文件存储的DataNode的信息。

      (3)Client读取文件信息。

      在HDFS中复制文件块的基本流程如下:

      (1)NameCode发现部分文件的Block不符合最小复制数或部分DataCode失效。

      (2)通知DataCode相互复制Block。

      (3)DataCode开始相互复制。

      通过上面三个流程我们基本了解了Hadoop是如何使用HDFS存储数据的,那么在Hadoop中数据是如何切分的呢?我们知道HDFS在具体存储文件数据时先划分为逻辑Block块,后续的写入、读取、复制都是以Block块为单位进行的。那么Hadoop中数据处理时存储在HDFS上的数据是如何切分的呢?其实从HDFS的文件写入过程就可以看出,在Client和NameData交互的同时是需要加载Hadoop配置文件的,如果用户设置了块的大小配置属性dfs.block.size,就会按照用户自定义的大小进行逻辑切分,如果没有配置,则使用集群默认的配置大小,因此在写入数据时文件已经在逻辑上切分好了,在运行MapReduce时默认就会按照切分好的块大小和数量来启动Map,也就是默认Map的数量是在数据写入时就确定好的,当然用户也可以指定文件数据的切分大小,可通过mapred.min.split.size参数在将作业提交客户端时进行自定义设置。

    3.2 MapReduce模型

      MapReduce是建立在数学和计算机科学基础上的,具有简单、高效特点的计算模型,最为重要的两个概念就是Map和Reduce,最基本的处理思想就是“分而治之,然后归约”。Hadoop会将一个大任务分解为可以同时执行的多个小任务,从而达到并行计算的目的。在对处理的数据集的要求上,相比于传统关系数据库的结构化数据,MapReduce模型的Hadoop框架适合半结构化或非结构化的数据。

      Hadoop通过自动分割将要执行的问题(程序)、拆解成Map(映射)和Reduce(化简)的方式,其分解过程的实质是将问题分为几个部分,划分为可以应用于程序的数据,再将数据分解,然后对分解的数据进行并行操作,在自动分割后通过Map程序将数据映射成不相关的区块,分配(调度)给大量的计算机进行处理以达到分散运算的效果,再通过Reduce程序将结果汇总整合,输出开发者需要的结果。

      Hadoop向用户提供了一个规范化的MapReduce变成接口,用户只需要编写Map和Reduce函数,这两个函数都是运行在键-值对基础上的,数据的切分,节点之间的通信协调等全部由Hadoop框架本身负责。一般一个用户作业提交到Hadoop集群后会根据输入数据的大小并行启动多个Map和Reduce进程(也可以是0个或1个)来执行。MapReduce也具有弹性适应性,小数据和大数据仅仅通过调整节点就可以处理,而不需要用户修改程序。

      上图是MapReduce的数据处理流程图,在Map之前会对输入的数据有split的过程,默认split就是写入数据时的逻辑块,每一个块对应一个split,一个split就对应一个Map进程,正是split保证了任务的并行效率。在Map之后还会有shuffle和sort的过程,shuffle简单描述就是一个Map的输出应该映射到哪个Reduce作为输入,sort就是指在Map运行完输出后会根据输出的键进行排序。这两个处理步骤对于提高Reduce的效率及减小数据传输的压力有很大的帮助。

  • 相关阅读:
    20192423杨斯凌 202120222 《网络与系统攻防技术》实验六实验报告
    Eclipse 安装了中文插件如何在不删除插件下使用英文版启动
    软件工程人员必备如何做个人和项目的复盘
    刷视频进度代码
    keycloak 找出特定客户端权限的user 配置OTP
    spring boot的基本配置——定制Banner
    spring boot的基本配置——spring boot的全局配置文件——设置端口号
    spring boot的基本配置——spring boot的全局配置文件——读取应用配置——Environment类
    spring boot的基本配置——spring boot的全局配置文件——读取应用配置——@PropertySource注解+@Value注解——读取其它配置文件
    spring boot的基本配置——关闭某个特定的自动配置
  • 原文地址:https://www.cnblogs.com/xmcwm/p/16277584.html
Copyright © 2020-2023  润新知