zoukankan      html  css  js  c++  java
  • Hadoop

    1. HDFS架构是怎样的?

    hadoop1.x中采用master/slave架构,hdfs集群有一个namenode和多个datanode组成。

    namenode

    namenode负责原数据的管理,包括文件目录和文件的元数据管理。

    namenode文件到block块位置的映射,namenode并不持久化的datanode的块位置信息,是在datanode启动时汇报给namenode的。

    监控datanode的状态,datanode会向namenode发送心跳,定时汇报块位置信息,如果出现了故障,namenode会做故障迁移。

    DataNode

    负责实际的存储和读写操作,每一个Block块的位置是64m(2.x是128mb),会把上传的文件根据大小会进行切块,并做备份存储。默认是三个备份

    secondnamenode

    secondnamenode并不是namenode的备份机,它是协助namenode进行元数的管理的,在达到checkpoint时,会把namenode中的edit和fsimage文件拉取过来进行合并,合并在发送给namenode。

    hadoop2.x中

    namenode由active namenode和standby namenode组成但是只有active namenode提供服务。namenode可以横向进行拓展。

    ZKFailoverController,监控房namenode的状态,在namenode出现故障,依靠zookeeper主备选举和切换,是一个独立的进程。

    journal node:在active namenode进行操作后,元数据会同步到journal node中,备份节点会进行读取,这样就可以保证了主备namenode的元数据一直性,在发生故障后进行切换。

    2. yarn的架构是怎么样的?

      yarn的架构主要分为resource manager,application master,nodemanager,然后resourcemanager又包含Scheduler和application manager。Scheduler是负责资源的分配,applicaton mannager是负责全局任务的管理提交,am的监控与调度器协商资源,。nodemanager是每个节点上的资源和任务管理器,接收来自am的请求,并汇报任务执行与资源的情况。application master负责与rm协商资源,nm的通信,进一步分配任务资源。

    3.mapreduce 的过程

      首先根据输入的文件切片,默认有多少个切片就是多少个mapreduce task。进行文件的读取,默认是一行一行的读取。之后进入编写好的map方法,有多少键值就调用多少次的map方法。content.write()会进行数据收集。之后会进行分区,决定map的结果分配到哪一个reduce上,默认是hashpartition。在进行数据的写到内存,内存大小默认是100mb,当达到一个阈值的时候会进行溢写,每一次溢写都会产生一个临时文件存储到磁盘,在溢写之前会进行排序,有规约也会进行规约。最后再将溢写的文件进行合并。到此map结束。reduce阶段先将数据拉取到本地,之后再对文件进行合并,merge操作一般先是内存到磁盘,之后再是磁盘到磁盘,之后对merge文件排序,执行reduce的方法,至此整个mapreduce结束。

    4. yarn调度mapreduce流程是怎么样的?

    clent向ResourceManager申请执行job。

    ResourceManager会个客户端返回一个hdfs目录以及application id

    client会将切片信息,job的配置信息以及jar包上传到hdfs目录下。

    client请求rm启动mrappmaster

    rm将请求初始化一个任务,放到执行队列里面。

    rm找到空闲的nodemanage创建container,启动mrappmaster。

    将client提交的hdfs资源下载到本地

    mrappmaster根据资源信息请求rm启动maptask。

    rm会找空闲的nodemanger创建maptask的container任务

    appmaster将资源发送给各个nodemanager,启动对应的maptask,监控每一个nn的情况。

    maptask执行之后,会向rm申请执行reducetask的资源。

    rm再去寻找空闲的nodemanager开启reducetask container。

    mrapmaster启动reducetask任务,并监控任务执行情况。

    5.hdfs写入流程

      client申请上传文件,namenode会检查是否存在同名文件,校验权限。运行上传,文件进行切片,申请上传第一个block块,namenode返回datanode的地址列表。客户端与datanode简历pipeline管道,开始上传packget 默认是64k,首先上传到第一个datanode,之后datanode继续转发给其他datanode一直到所以datanode备份完成,通知客户端上传完成,继续上传第二个block块。

    6. hdfs读流程

      申请下载文件,namenode返回文件block的地址,根据地址列表卸载

    7.hdfs创建文件的过程

    客户端通过clientprotocol协议向Rpcserver发起RPC请求

    FSNameSystem封装了各种hdfs操作的实现细节,RPCServer调用FSNameSystem中的相关方法创建目录。

    FSDirectory封装了各种目录树操作的实现细节,FSNameSystem调用其中的方法创建目标文件,并通过日志系统备份文件修改。

    最后RpcServer将RPC响应返回给客户端

    8.Hadoop1.x和hadoop2.x的区别

      资源调度方式的改变,在1.x中jobtrake负责任务调度和资源管理,单点任务负担重,在2.x中yarn作为集群的调度工具,在yarn中使用ResourceManager进行资源管理,单独开启一个container作为ApplicationMaster进行任务管理。

      HA模式,在1.x中只有一个namenode存在单点故障,2.x中存在一个active namenode和standby namenode。

      HDFS Federation,在hdfs2.x中出现,使namenode可以横向拓展成多个。每个namenode分管一部分目录。

    9. hadoop的常用配置文件有哪些?

    hadoop-env.xml:用于定义运行环境相关的配置信息,java_home环境变量,hadoop特定的jvm选项,指定日志所在目录,以及mster和slave的位置。

    core-site.xml:用于定义系统级别的参数,如HDFS URL,hadoop的临时目录等。

    hdfs-site.xml:hdfs相关的设定,如文件的副本的个数,块大小等。

    mapred.xml:mapreduce的相关设定,如reduce任务的默认个数,任务能够使用内存的上下限。

    10. 小文件过多会有什么危害,如何避免?

      hadoop上大量的hdfs的元数据存在namenode的内存中,因此过多的小文件必然会压垮namenode的内存。每个元数据大小是150byte。

    解决这个问题就是进行小文件合并,在客户端执行上传时执行一定的策略先合并,或者是使用hadoop的CombineFileInputFormat<K,V>进行小文件合并。

    11.hadoop集群启动会启动哪些进程,各自的作用是什么?

    NameNode:负责文件系统目录树以及文件的元数据,这些信息保存在磁盘上的两个文件上,fimage,edit文件上。记录每个datanode块的位置信息,这些信息保存在内存中。

    响应客户端的数据块的请求。监控DataNode的状态故障迁移等。

    secondnamenode:定期合并fsimage和edit。

    datanode:负责具体数据的存储,向namenode发送其存储数据的block列表。

    resourcemanager:负责job的调度,资源的分配将任务分配给nodemanager

    nodemanager:运行ResourceManager分配的任务,将任务进度向application master报告。

    journalNode(高可用):高可用情况下存放namenode的editlog文件。

     

  • 相关阅读:
    python 二分法查找
    python 线性查找
    Ubuntu14.04 获取文件或者文件夹大小
    Python异常处理
    python 正则
    Python网络编程(Sockets)
    Python多线程编程
    Python XML解析和处理
    python 迭代器
    python 装饰器
  • 原文地址:https://www.cnblogs.com/qidi/p/11748305.html
Copyright © 2011-2022 走看看