大数据-hadoop理论

前言 :

  下面可能用的很多计算的词语,理解是计算不是单单1+1是计算,对于计算机而言,任何的程序执行就是一个计算过程。

  1:计算过程区别(关键字:并行计算)
    传统的计算方式:

      一个文件数据->开始计算(整个文件有多少数据就计算多少,从头到尾)->计算结束

    并行计算:

      一个文件数据->拆分存储在一个集群中(每个计算机上存文件的一部分数据)->并行计算(每个计算机只要计算分给它的那部分数据,
      且整个集群一起运行)->将运行之后的结果汇总->计算结束

  2:计算方式(关键字:计算向数据移动)

    传统的一个计算过程:
      一个应用程序发布在了一个服务器上
      --->获取数据(比如获取数据库的数据,将数据从数据库服务器拿到应用服务器)
      --->开始计算
      --->输出计算结果

    计算向数据移动 :
      数据存储在集群之中
      --->计算程序直接在存储数据的集群服务器上运行
      --->开始计算
      --->输出计算结果

走进hadoop:(整体分三个板块内容介绍)

  1:文件存储系统(HDFS)2:计算框架(MR)3:资源调度框架(YARN)

一:文件存储系统(HDFS)

  1. 概念:用来存数据的

  2. 角色:NameNode(下面用NN表示),DataNode(下面用DN表示)

    2.1 NameNode

      (1)接收客户端的读写请求。

      (2)保存元数据信息。

          比如:block块的信息(block列表,偏移量,位置信息)

          block:block块是HDFS存储数据的单元,即之前说的,把一个大数据分割成N多块。

          偏移量:在这个文件中block块的偏移量。HDFS设定好block大小之后就不会变了,所以偏移量也不会变。

          位置信息:block都在哪些DataNode中存着。

    2.2 DataNode

      (1)以文件的形式存储block数据,记录block元数据信息,向NN汇报block信息,与NN保持心跳连接(3s一次),若10分钟未收到心跳信息,

        NN就会把该DN节点的信息copy到其他的DN上。

  3. 数据的读写

    3.1 写

      客户端访问NN,取到DN等信息;
      直接交互DN,切割成块并且以pipeline管道流的形式写入其中一个DN,DN之间相互流数据;(因为DN是有副本的,保证数据的HA)
      反馈给客户端;

    3.2 读

      客户端访问NN,取到block副本列表信息;

      按照就近原则获取block信息,最后组合成完整文件;

      以MD5验证数据的完整性;

  4. 集群

    4.1 hadoop的2.x版本(只有两个NN节点,一个是active的一个是standby的)下面是集群结构图,我们主要介绍3.x版本

      简述下图:

        NNactive(NN主节点),NNstandby(NN备用节点),两个节点的元数据是同步的,即DN会向两个NN都汇报block情况,两个节点的存活情况

        由zk管理,搭建之后会生成 ZKFC(在两个NN节点) 进程,如果主的挂了,会启动备节点。

        JournalNodes(下图中的JN),这个集群用于两个NN之间的数据同步。

    4.2 hadoop的3.x版本(NN的HA采用的是主从架构,可以设多个NN节点)

      待完善中。。。。。。

    4.3 hadoop3.x版本的集群安装

      放在最后写出。

二:计算框架(MR)

    下图为MR的过程:

  

  1. 简述MR图解的过程(map 过程+ reduce 过程 )

   map过程:块 ----> split(里面有具体的所在块的信息) ----> map ---- 分区排序,组内排序 ---- buffer --- 排序,压缩 --->磁盘

   reduce过程:----> 多个map的归并算法排序,生成几个大的map ---- shuffler数据拉取 ----> reduce ----> 输出

  2. 源码部分的过程分析(大致分4步完成)

1.Job(完成文件的切片)
  (1)配置及job的实例化:
    Configuration conf = new Configuration(ture);    //(ture)这种的会读取hadoop默认的一些配置信息(比如默认块大小之类的)
    Job job =Job.getInstance(conf);    //获取Job实例

  (2)配置:
    MRJobConfig(接口)            //标记了所有的属性
    Job(具体的配置的实现)        //通过什么方法将自定义的属性引入    

    FileInputFormat.addInputPath(job, input );
    FileOutputFormat.setOutputPath(job, output );        //job的输入输出路径

  (3)工作提交:
    Job.waitForCompletion(等待完成):
      --获取客户端的请求及要完成的工作:
      Submit -->
      submitter.submitJobInternal(job, client)
        --进行切片:
          writeSplits -- > writeNewSplits(需要切多少片,位置信息在哪,默认与块的数量大小一样SPLIT_MAXSIZE(可配置切片大小),
                              返回值是maps(有多少片就有多少maps),该返回值被设置成map的个数):
          --inputformat(实例化INPUT_FORMAT_CLASS_ATTR(输入文件类型), 默认的是TextInputFormat)
          --input.getSplits(获取job的切割对象):
            --splits(所存的切片),files(文件所有块)
            --getFileBlocklocations(获取块的位置信息)
            --bytesRemaining/splitSize > SPLIT_SLOP 1.1剩余的可切割文件大小多出1/10大小时算整体
            --splits.add(位置,大小等添加到片的数组)
          --sort(通过切片size大到小排序)
          --createSplitFiles(创建切片文件,将元数据信息写在namenode)
        --真正的提交job
          submitClient.submitJob(在YARNRunner的class中实现)

2.Input-map(map从片上读取数据)yarn资源管理器->appli manager->启动MR任务
  (1)Maptask 的启动
    Maptask.class:
      --run(获取以前的一些信息,通过行读取器进行数据读取)
        -->NUM_REDUCES: 设置多少个reduce就是多少个分区,如果是0就没有R任务,将会全部分配给M,否则整个任务过程按照M/R = 2/1的比例分配;
                  如果有reduce(默认1个),则2/3时间给map,1/3给sort排序。
        --> runNewMapper:
          --taskContext() :该任务上下文(所有任务相关的信息)
          --mapper(MAP_CLASS_ATTR自定义的mapper类,重写map方法写入自己的逻辑)
          --inputFormat(INPUT_FORMAT_CLASS_ATTR默认的是TextInputFormat(这个类里面有行的文本读取器))
          --split(获取切片信息)    获取该任务的切片的信息
          --input(读取器信息) --> newTrackingRecordReader(实例化的是这个类) -- creatRecordReader --> lineRecordReader
          --output(写入缓冲区)    详见3
          --mapContext-->mapperContext    参数 input,output,split    将以上信息的一个封装
          --input.initialize(split,mapperContext) 读取器的初始操作,            --如何读取片的信息(多读一行)
          --mapper.run(mapperContext) 读取一行数据调用一下自定义map,直到没有下一行
            --context.nextKeyValue(是否有下一行)
              --自己的map方法

3.Map-output(map写入数据到缓冲区),这里看的是有reduce的情况
  Collector 采集器(排序的采集器){
    缓冲区
    MAP_OUTPUT_COLLECTOR_CLASS_ATTR 自己设定缓冲区,否则默认MapOutputBuffer.class(3.0)换成.native,速度快了

    缓冲区初始化
    Init
      IO_SORT_MB    自定义缓冲区大小,默认100MB
      MAP_SORT_SPILL_PERCENT 自定义什么时候溢写,默认(float)0.8,到了80%开始写(具体多大需要反复调试)
      sorter可以自定义排序器,否则默认快排;
      comparator可以自定义比较器,
      combiner合并压缩器
      MAP_COMBINE_MIN_SPILLS    自定义归并之后的文件数量,默认3个
      spillThread    溢写线程(排序,溢写)
  }

  分区处理
  Partitions    NUM_REDUCES否则默认一个 分区数量
  Partitioner 分区器()
    实例化分区器{
      1个:返回0(分区器编号)
      多个:{
        PARTITIONER_CLASS_ATTR 自定义分区器,一般用默认;
      }
    }

4.Reduce(reduce拉取数据,并输出)
  Shuffle:
    将map中的数据全部排序并拉取到迭代器中;
  Sort(组排):用来界定组的边界
    GROUP_COMPARATOR_CLASS 可以设定组排,否则 KEY_COMPARATOR(map端的排序),否则默认比较器WritableComparator
  Reduce:
    Make reduce: REDUCE_CLASS_ATTR自己写的reduce

  reducerContext(封装好上面的东西)
  Reduce.run(reducerContext);
    context.nextKey() ---- 执行ruduce的条件(相同组值,进行一次reduce执行)
      Reduce(自己定义的reduce)

三:资源调度框架(YARN)

  1. 概念:管理MR的在hadoop集群上的运算。所以YARN是与DN在一个集群节点上。

  2. 架构图

    

  3. 图解概述

    3.1 角色

      ResourceManager(下面简称RM),NodeManager(下面简称NM),Container(执行具体计算任务的),ApplicationMaster(监控Container的,下面简称AM)

      RM:集群节点资源管理

      NM:与RM汇报资源,管理Container生命周期

    3.2 概述流程:

      client发送请求给RM;

      RM查看NM状态,选择出可执行这个任务的节点;

      在其中一个节点创建AM,其余节点创建Container;

      所有的Container中任务执行完成之后,把结果给AM;

      AM把汇总的结果统一给RM;

    3.3 搭建使用:

      待完善。。。。。。。。。。。

总结:

  现在hadoop的使用多数是用的hadoop的HDFS系统。

原文地址:https://www.cnblogs.com/dblog/p/12164883.html

时间: 2024-10-12 12:06:32

大数据-hadoop理论的相关文章

大数据Hadoop最佳实践(V3)

一:课程简介: Hadoop是当下云计算大数据的王者. Hadoop不仅是一个大数据的计算框架,同时也是大数据的存储平台. 使用Hadoop,用户可以在不了解分布式底层细节的情况下开发出分布式程序,从而可以使用众多廉价的计算设备的集群的威力来高速的运算和存储,而且Hadoop的运算和存储是可靠的.高效的.可伸缩的,能够使用普通的社区服务器出来PB级别的数据,是分布式大数据处理的存储的理想选择 使用Hadoop可以主要完成: 1,构建离线处理平台,完成海量离线数据的存储分析,相对于传统的关系型数据

王家林的云计算分布式大数据Hadoop征服之旅:HDFS&MapReduce&HBase&Hive&集群管理

一:课程简介: 作为云计算实现规范和实施标准的Hadoop恰逢其时的应运而生,使用Hadoop用户可以在不了解分布式底层细节的情况下开发出分布式程序,从而可以使用众多廉价的计算设备的集群的威力来高速的运算和存储,而且Hadoop的运算和存储是可靠的.高效,的.可伸缩的,能够使用普通的社区服务器出来PB级别的数据,是分布式大数据处理的存储的理想选择. 本课程会助你深入浅出的掌握Hadoop开发(包括HDFS.MapReduce.HBase.Hive等),并且在此基础上掌握Hadoop集群的配置.维

王家林的云计算分布式大数据Hadoop企业级开发动手实践

一:课程简介: Hadoop是云计算分布式大数据的事实标准软件框架,Hadoop中的架构实现是整个云计算产业技术的基础,作为与Google三大核心技术DFS.MapReduce.BigTable相对的HDFS.MapReduce.和HBase也是整个Hadoop生态系统的核心的技术,本课程致力于帮您掌握这三大技术的同时掌握云计算的数据仓库挖掘技术Hive,助您在云计算技术时代自由翱翔. 二:课程特色 1,      深入浅出中动手实作: 2,      掌握Hadoop三大核心:HDFS.Map

成都大数据Hadoop与Spark技术培训班

成都大数据Hadoop与Spark技术培训班 中国信息化培训中心特推出了大数据技术架构及应用实战课程培训班,通过专业的大数据Hadoop与Spark技术架构体系与业界真实案例来全面提升大数据工程师.开发设计人员的工作水平,旨在培养专业的大数据Hadoop与Spark技术架构专家,更好地服务于各个行业的大数据项目开发和落地实施. 2015年近期公开课安排:(全国巡回开班) 08月21日——08月23日大连 09月23日——09月25日北京 10月16日——10月18日成都 11月27日——11月2

14周事情总结-机器人-大数据hadoop

14周随着考试的进行,其他该准备的事情也在并行的处理着,考试内容这里不赘述了 首先说下,关于机器人大赛的事情,受益颇多,机器人的制作需要机械和电控两方面 昨天参与舵机的测试,遇到的问题:舵机不动 排查顺序:1.程序(不过程序比较简单)不是这上面的问题 2.检查电路问题(电路设计,线比较脆弱,焊接的也不是很好,最主要不知道板子的完整性) 3.加了块电源可以动舵机了,但之后实验出现莫名的问题 4.最终解决办法:改变线,将舵机的线又连接杜邦线(12) -------------------------

搭建大数据hadoop完全分布式环境遇到的坑

搭建大数据hadoop完全分布式环境,遇到很多问题,这里记录一部分,以备以后查看. 1.在安装配置完hadoop以后,需要格式化namenode,输入指令:hadoop namenode -format,报错误信息:hadoop: command not found 本文网址:https://www.cnblogs.com/SH170706/p/10312667.html 2. 原文地址:https://www.cnblogs.com/SH170706/p/10312678.html

我搭建大数据Hadoop完全分布式环境遇到的坑---hadoop: command not found

搭建大数据hadoop环境,遇到很多问题,这里记录一部分,以备以后查看. [遇到问题].在安装配置完hadoop以后,需要格式化namenode,输入指令:hadoop namenode -format,报错误信息:hadoop: command not found 网上查阅资料,建议检查hadoop的环境变量是否配置,经检查,已经配置.建议到实际路径下执行此命令,切换到/opt/hadoop/bin这个目录下,仍然 报这个错误信息. 再查资料,看到别人设置主节点免密登陆到主节点.我已在这三台机

大数据Hadoop核心知识入门学习注意事项

今天来介绍新手学习hadoop的入门注意事项.这篇文章一来谈谈hadoop核心知识学习. 首先hadoop分为hadoop1.X和hadoop2.X,并且还有hadoop生态系统,那么下面我们以hadoop2.x为例进行详细介绍: Hadoop的核心是mapreduce和hdfs. Mapreduce:mapreduce是很多人都需要迈过去的槛,它比较难以理解,我们有时候即使写出了mapreduce程序,但是还是摸不着头脑.我们都知道mapreduce是一种编程模型,那么它能干什么,对我有什么用

c#WEB转入大数据HADOOP平台的2014总结

浮浮沉沉的那是流水,起起落落的才是人生嘛. 抽根烟先--(各位同学都知道我不抽烟哈,这个,哈哈,思考人生的时候还是会抽根)刚刚和同学吃完饭从滨江路回来,我和他在一起一般都是谈谈自己的近况.我和他住得不远,上班离得很近,但是也不经常见面,但是需要对方的时候打个电话,总会在一个电话后及时出现在你的面前(搞得像基友一样,罪过,罪过).这个是必须的,我和他也算一种前世修来的缘份吧,认识马上快10年了,大学同学中,我是他在这里的唯一,他也是我在这里的唯一,也许这辈子剩下的时间还得走下去,生活中的坎坷我们互