Hadoop高可用、Yarn的资源分配

hadoop概述:Hadoop实现了一个分布式文件系统(HadoopDistributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。

Hadoop框架最核心的设计就是:HDFS和MapReduce,HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。

命名空间

分布式存储:分布式文件系统管理的是一个服务器集群。在这个集群中,数据存储在集群的节点(即集群中的服务器)中,但是该文件系统把服务器的差异屏蔽了。那么,我们就可以像使用普通的文件系统一样使用,但是数据却分散在不同的服务器中。

Namespace:在分布式存储系统中,分散在不同节点中的数据可能属于同一个文件,为了组织众多的文件,把文件可以放到不同的文件夹中,文件夹可以一级一级的包含。我们把这种组织形式称为命名空间Namespace;命名空间管理着整个服务器集群中的所有文件,命名空间的职责与存储真实数据的职责是不一样的,负责命名空间职责的节点称为主节点master node,负责存储真实数据职责的节点称为从节点slave node。

主、从节点:主节点负责管理文件系统的文件结构,从节点负责存储真实的数据,合称为主从式结构master-slaves,用户操作时,也应该先和主节点打交道,查询数据在哪些从节点上存储,然后再从从节点读取。在主节点上,为了加快用户访问的速度,会把整个命名空间信息都放在内存中,当存储的文件越多时,那么主节点就需要越多的内存空间。

块(block):在从节点存储数据时,有的原始数据文件可能很大,有的可能很小,大小不一的文件不容易管理,那么可以抽象出一个独立的存储文件单位,称为块(block)。

容灾

容灾:数据存放在集群中,可能因为网络原因或者服务器硬件原因造成访问失败,最好采用副本(replication)机制,把数据同时备份到多台服务器中,这样数据就安全了,数据丢失或者访问失败的概率就小了。

分布式计算角色:

主节点称为作业节点(jobtracker)

从节点称为任务节点(tasktracker)

在任务节点中,运行第一阶段的代码称为 map 任务(map task),运行第二阶段的代码称为 reduce任务(reduce task)。

名词解释

Hadoop:Apache 开源的分布式框架。

HDFS:Hadoop 的分布式文件系统。 

NameNode:Hadoop HDFS 元数据主节点服务器,负责保存 DataNode 文件存储元数据信息,这个服务器是单点的。 

JobTracker:Hadoop 的 Map/Reduce 调度器,负责与TaskTracker 通信分配计算任务并跟踪任务迚度,这个服务器也是单点的。

DataNode:Hadoop 数据节点,负责存储数据。

TaskTracker:Hadoop 调度程序,负责 Map,Reduce 任务的启动和执行。

Zkfc:DFS故障转移控制器

RM:资源管理程序,负责集群中所有资源的统一管理和分配

注:Namenode 记录着每个文件中各个块(block)所在的数据节点的位置信息。

hadoop ha安装配置

(先把/app/hadoop2.7/etc/hadoop目录下的mapred-site.xml.template 进行重命名方便后续查找。命令# mv mapred-site.xml.template mapred-site.xml)

注意:bigdata241是主机,bigdata242是备份,bigdata243/244/245是计算节点配置zk

配置如下文件

core-site.xml Hadoop核心配置文件


 
        fs.defaultFS
        hdfs://cluster
 hadoop ha 部署方式下namenode访问地址,cluster是名字可自定义,后面hdfs-site.xml会用到
 
 
        hadoop.tmp.dir
        /home/hadoop/app/hadoop2.7/tmp
        指定hadoop临时目录
  

        ha.zookeeper.quorum
        bigdata243:2181,bigdata244:2181,bigdata245:2181
        指定zookeeper地址
 

        ha.zookeeper.session-timeout.ms
        300000
        zk的超时时间,单位为毫秒,默认为5000,这个值比较小。建议设置得大一些,zk过于敏感,避免因为网路抖动等原因引起NameNode进行无所谓的>主备切换
     

        fs.trash.interval
        1440
        开启垃圾回收站功能,防止误删除文件,HDFS文件删除后先放入回收站,单位为分,垃圾回收站最长保留数据时间为1天,超过一天后删除


        io.file.buffer.size
        131072
        设置SequenceFile中用到的读/写缓存大小,合理设置缓存大>小有利于提高数据传输效率,单位为byte,默认为4KB,这里设置为128KB

hdfs-site.xml 分布式文件系统HDFS的配置文件


  
        dfs.nameservices  
        cluster
        指定hdfs的nameservice为cluster,需要和core-site.xml文件中的保持一致
      
      
        dfs.ha.namenodes.cluster  
        bigdata241,bigdata242
        cluster下有两个NameNode,分别为bigdata241和bigdata242
    
      
        dfs.namenode.rpc-address.cluster.bigdata241  
        bigdata241:9000
        NameNode1的RPC通信地址,端口要和core-site.xml中fs.defaultFS的一致
      
      
        dfs.namenode.http-address.cluster.bigdata241  
        bigdata241:50070
        NameNode1的HTTP通信地址
      
      
        dfs.namenode.rpc-address.cluster.bigdata242  
        bigdata242:9000
        NameNode2的RPC通信地址,端口要和core-site.xml中fs.defaultFS的一致
      
      
        dfs.namenode.http-address.cluster.bigdata242  
        bigdata242:50070
        NameNode2的HTTP通信地址
      
      
        dfs.namenode.shared.edits.dir  
        qjournal://bigdata243:8485;bigdata244:8485;bigdata245:8485/cluster
        指定NameNode的元数据在JournalNode上的存放位置
      
      
        dfs.journalnode.edits.dir  
        /home/hadoop/app/hadoop2.7/journaldata
        指定NameNode的元数据在JournalNode上的存放位置
      
      
        dfs.ha.automatic-failover.enabled  
        true
        指定支持高可用自动切换机制
      
      
        dfs.client.failover.proxy.provider.cluster  
   org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
        配置失败自动切换实现方式
      
      
        dfs.ha.fencing.methods  
          
            sshfence  
            shell(/bin/true)  
        
        配置隔离机制,主要用于远程管理监听其他机器相关服务
      
      
        dfs.ha.fencing.ssh.private-key-files  
        /home/hadoop/.ssh/id_rsa
        使用隔离机制时需要ssh免密码登陆,/home/hadoop/为用户目录
      
      
        dfs.ha.fencing.ssh.connect-timeout  
        30000
        使用隔离机制时需要ssh免密码登陆时的超时时间,单位为毫秒
    
    
        dfs.namenode.name.dir
        file:/home/hadoop/app/hadoop2.7/tmp/name
        NameNode结点存储hadoop文件系统信息的本地系统路径
    
    
        dfs.datanode.data.dir
        file:/home/hadoop/app/hadoop2.7/tmp/data
        DataNode结点被指定要存储数据的本地文件系统路径,这个值只对NameNode有效,DataNode并不需要使用到它
    
       
        dfs.webhdfs.enabled   
        true
        指定可以通过web访问hdfs目录
    

		dfs.permissions.enabled
		false
		设置不启用 HDFS 文件系统的权限检查
	

 

mapred-site.xml 分布式计算框架MapReduce的配置文件


     
        mapreduce.framework.name
        yarn
 	 配置MapReduce运行于yarn中
     
 
mapreduce.jobhistory.address 
bigdata241:10020 

 
 
mapreduce.jobhistory.webapp.address 
bigdata241:19888 
 


mapreduce.jobhistory.address
bigdata242:10020                  



mapreduce.jobhistory.webapp.address
bigdata242:19888                  


 
  yarn.app.mapreduce.am.staging-dir
  /tmp/yarn/MR-History
配置ApplicationMaster的jobhistory在hdfs存储路径
 

    mapreduce.jobhistory.done-dir
    ${yarn.app.mapreduce.am.staging-dir}/history/done



    mapreduce.jobhistory.intermediate-done-dir
    ${yarn.app.mapreduce.am.staging-ir}/history/done_intermediate

 

yarn-site.xml 分布式资源管理系统YARN的配置文件

Hadoop 2.4之前的版本,Yarn的ResourceManager是单点的。在Hadoop 2.4版本中,引入了ResourceManager HA。

  • ResourceManager是主备模式。
  • 可以一个主用RM、一个备用RM。也可以是一个主用RM,多个备用RM。
  • 客户端可以看到多个RM。客户端连接时,需要轮循各个RM,直到找到主用RM。

主备模式切换有两种模式:

  1. 自动切换
  2. 手工切换

对于手工切换模式:

yarn rmadmin -transitionToActive rm1 yarn rmadmin -transitionToStandby rm1

对于自动切换模式,可以强制手工切换:

yarn rmadmin -transitionToActive rm1 --forcemanual

yarn rmadmin -transitionToStandby rm1 --forcemanual


  yarn.resourcemanager.ha.automatic-failover.enabled
  true


 
   yarn.resourcemanager.connect.retry-interval.ms 
   2000



  yarn.resourcemanager.recovery.enabled 
  true 


 
  yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms 
  5000 
 

 
  yarn.client.failover-proxy-provider 
  org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider 
 


    yarn.resourcemanager.ha.automatic-failover.zk-base-path
    /yarn-leader-election

 
 
  yarn.nodemanager.aux-services 
  mapreduce_shuffle,spark_shuffle 
 

 
  yarn.nodemanager.aux-services.mapreduce.shuffle.class 
  org.apache.hadoop.mapred.ShuffleHandler 
 

 
 
  yarn.nodemanager.aux-services.spark_shuffle.class 
  org.apache.spark.network.yarn.YarnShuffleService 
 
 
 
  spark.shuffle.service.port 
  7337 
 

 
  yarn.nodemanager.local-dirs 
  /home/hadoop/app/hadoop/tmp 
 

 
  yarn.nodemanager.log-dirs 
  /home/hadoop/app/hadoop/logs 
   


    yarn.scheduler.minimum-allocation-mb
    512


 

    yarn.scheduler.maximum-allocation-mb
    4096


 

    yarn.nodemanager.resource.memory-mb
    16384

 

    yarn.nodemanager.vmem-pmem-ratio
    4.2
    允许的虚拟内存倍数


 

    yarn.nodemanager.resource.cpu-vcores
    8

 

  mapreduce.map.output.compress  
  true



  mapreduce.map.output.compress.codec  
  org.apache.hadoop.io.compress.SnappyCodec



    mapreduce.output.fileoutputformat.compress
    true
 

  
    mapreduce.output.fileoutputformat.compress.codec
    org.apache.hadoop.io.compress.SnappyCodec
    数据的压缩类型,这里使用Snappy压缩
  

  
    mapreduce.output.fileoutputformat.compress.type
    BLOCK
    数据的压缩级别,这里设置按数据块压缩
  

    yarn.log.server.url
    http://bigdata241:19888/jobhistory/logs
    历史日志对应路径
  

  
  
    yarn.resourcemanager.scheduler.class
    org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
    
    配置yarn启用容量调度模式(默认即是容量调度),配置文件为capacity-scheduler.xml
    
  

     
       
        yarn.log-aggregation-enable   
        true   
        开启日志聚合功能,默认为false
             
       
        yarn.log-aggregation.retain-seconds   
        259200   
        在HDFS上聚合的日志最长保留多少秒,这里配置为3天
     
 
    一天yarn.log-aggregation.retain-check-interval-seconds
    86400
    清理过期聚合日志程序的执行间隔时间一天
  

    yarn.nodemanager.remote-app-log-dir
    /tmp/logs
    聚合日志在hdfs上的目录
   
 

    
      
       yarn.resourcemanager.ha.enabled  
       true  
       开启resourcemanager ha,默认为false
      
      
       yarn.resourcemanager.cluster-id  
       yrc  
       
      
      
       yarn.resourcemanager.ha.rm-ids  
       rm1,rm2  
       
      
      
       yarn.resourcemanager.hostname.rm1  
       bigdata241  
       node1
         
      
       yarn.resourcemanager.hostname.rm2  
       bigdata242  
       node2
      
      
       yarn.resourcemanager.zk-address  
       bigdata243:2181,bigdata244:2181,bigdata245:2181 
      
    

    
      
       yarn.nodemanager.aux-services  
       mapreduce_shuffle  
     
        
        yarn.nodemanager.aux-services.mapreduce.shuffle.class    
        org.apache.hadoop.mapred.ShuffleHandler    
    
    

    yarn.nodemanager.resource.memory-mb
    51200
    集群中机器都有100/200GB的RAM。部分RAM应保留用于操作系统。在每个节点上,我们将为YARN分配50GB RAM。以下属性设置YARN可在节点上使用的最大内存


    yarn.nodemanager.vmem-pmem-ratio
    2.1


    yarn.resourcemanager.webapp.address.rm1
    bigdata241:8088


    yarn.resourcemanager.webapp.address.rm2
    bigdata242:8088


 

slaves(子机名对应子机个数)

bigdata243
bigdata244
bigdata245

 

 

启动Hadoop集群准备 :root用户下,可以省略,阿里云服务器默认关闭防火墙

关闭防火墙(子机照做)

# systemctl disable firewalld

# systemctl stop firewalld

进程守护(子机照做)

# setenforce 0

# vi /etc/selinux/config 设置SELINUX=disabled

Yarn的资源分配

配置
配置FairScheduler一般需要配置两个文件。首先调度器相关的选项可以在yarn-site.xml文件中配置。其次,大多数情况下用户希望创建一个分配文件来列出哪些队列用来分配以及对应的权重和容量。这个分配文件会每10秒钟重新加载一次,从而支持运行时配置变更。
yarn-site.xml中的配置属性
yarn.scheduler.fair.allocation.file
分配文件的路径地址。分配文件是一个XML文件来描述队列和队列的属性以及特定的策略。这个文件必须是一个XML格式的文件。如果配置一个相对路径,那么该文件会在classpath中被搜索到。默认是fair-scheduler.xml。
yarn.scheduler.fair.user-as-default-queue
是否使用用户名关联分配的默认队列名称,如果是false或者未设置,所有的作业都有一个共享的默认队列,叫做default。默认是true。如果队列分配策略在分配文件中配置过,那么这个属性会被忽略。
yarn.scheduler.fair.preemption
是否抢占。默认false。
yarn.scheduler.fair.preemption.cluster-utilization-threshold
当抢占式配置后,配置使用阈值。该阈值计算是按照所有资源的容量使用量的最大比例来算的。默认是0.8f。
yarn.scheduler.fair.sizebasedweight
是否分配资源给独立的作业,基于作业的size而不是均等的分配所有的资源。设置为true时,应用的权重通过1+请求资源内存大小的自然对数来计算。默认是false。
yarn.scheduler.fair.assignmultiple
是否允许在一次心跳中进行多次容器分配。默认是false。
yarn.scheduler.fair.max.assign
如果上个属性设置为true,这个属性明确一次心跳中能分配的最大的容器数。默认是-1,表示没有限制。
yarn.scheduler.fair.locality.threshold.node
对于特定node上请求容器的应用作业,该属性代表了自从上次容器分配等待调度到其他节点node上的机会的次数。表示为0到1之间的一个浮点数,该数字表达了集群规模的比例,代表了向上传递的调度机会数。默认值是-1.0,代表不传递任何调度机会。
yarn.scheduler.fair.locality.threshold.rack
对于特定rack上请求容器的作业,该属性代表了自从上次容器分配等待调度到其他rack上的机会的次数。表示为0到1之间的一个浮点数,该数字表达了集群规模的比例,代表了向上传递的调度机会数。默认值是-1.0,代表不传递任何调度机会。
yarn.scheduler.fair.allow-undeclared-pools
如果为true,新的队列可以在作业提交时创建,无论是提交者指定的应用作业的队列还是default的队列。如果为false,应用作业在任何时间都会被分配到一个没有在分配文件张声明过的队列中,相反就只会分配到default队列。该属性默认是true。如果队列分配策略在分配文件中设置过,那么这个属性失效。
yarn.scheduler.fair.update-interval-ms
锁定调度器和重新计算资源分配和需求,检查是否有抢占的时间间隔属性。默认是500ms。

 

 

 

 

你可能感兴趣的:(Hadoop,Ha的xml资源配置,Yarn的资源配置,Mr的资源配置,Big,Data,Hadoop)