Hadoop day08 (Yarn)

  • Hadoop框架包括下述三个个模块
     
    • HDFS:Hadoop集群中最根本的文件系统(数据存储)

           一个HDFS集群是由一个NameNode和若干个DataNode组成的
      • NameNode作为主服务器,管理文件系统命名空间和客户端对文件的访问操作。
      • DataNode管理存储的数据,HDFS支持文件形式的数据。
        DataNode负责管理节点上它们拥有的存储,它将存储划分为多个block块,管理block块信息,同时周期性的将其所有的block块信息发送给NameNode。

         
    • MapReduce:为能够在集群上分布式处理海量数据而量身订做的框架

           MapReduce job可以分为三次连续过程。
      • Map 将输入数据划分为key-value集合
      • Shuffle 将Map产生的结果传输给Reduce
      • Reduce 则对接收到的key-value进一步处理
    • YARN:为应用执行分配计算资源的一个框架

          YARN主要包含下面三个核心组件
      • ResourceManager(一个集群只有一个)
      • ApplicationMaster(每个应用都有一个)
      • NodeManagers (每个节点都有一个
  • 1.Yarn

    • 1.Yarn架构

      • 1.resourcemanger : 负责资源的分配
      • 2.nodemanager : 负责资源的供给与隔离
    • Yarn
      • 1.资源调度 
                          resourcemanger将nodemanager上资源分配给task
      • 2.资源隔离
                          nodemanager按照要求给task提供资源,保证供给的资源有独占性
      • 资源
        • nodemanager指挥分配的资源
          •  container:(一定比例的cpu和mem)
            • cpu
            • mem
    • 2.yarn的架构设计

      • 1. mr作业运行·如何申请资源去运行作业?

        • 1.client =》 rmapps发送请求·去运行·jar·(appmaster)
        • 2.apps 分配一个container·去运行appmaster.
        • 3.app master向apps manager ·去注册,(yarn-web·可以看到iob·运行情况)
        • 4.app master 向 resouce scheduler-申请资源运行 我的代码
        • 5-6.nodemanager会开启资源container去运行map task reduce task
        • 7.task 会向 app-master 汇报代码的运行情况
        • 8.当运行完成之后appmaster 会给 apps manager 通知我的作业运行完成了 请求释放资源
        • 9.apps manager 收到请求之后 通知客户端 你的代码运行完成了
        • 补充
          • input :map task个数·=》·container.申请的个数
          • reduce :educe task·=》·container.由请的个数
      • 2.调度器

        • 1.FIFO scheduler
                      先进先出 单队列
        • 2.Capacity scheduler (容量调度器)
                      多队列、每个队列之间 互不影响  先进先出
        • 3.Fair scheduler (公平调度器)
                      多队列、·每个队列之间 job  有影响 不是先进先出
                      job的优先级
      • 3.默认调度器:
                 Capacity scheduler.容量调度器
                 yarn.resourcemanager.scheduler.class.=》 CapacityScheduler

  • 3.调优

    • yarn调优

      • 1.container
        • 一定比例的mem和cpu
      • 2.针对集群中每个节点对container进行配置
    • 刀片服务器配置 128G 16物理core

      • 1.刀片服务器装完系统 消耗1G
      • 2.系统预留20%内存

        • 1.给未来部署组件预留内存空间
        • 2.防止全部使用会导致系统夯住   oom机制【liniux系统】
      • 3.目前位置 大数据服务资源  102G
        • hadoop
          • Datanode              进程内存2G
          • nodemanager       进程内存4G

            102G - 2G - 4G = 96G   =>yarn资源 container一共96G
        • container资源分配

          • 内存
          • cpu【core】
             
        • 1. container内存

          •     yarn.nodemanager.resource.memory-mb  96G 【默认值是8G】
          • 最小
                yarn.scheduler.minimum-allocation-mb 1g  极限情况下 会有96个container
          • 最大 
                yarn.scheduler.maximum-allocation-mb 96G 极限情况下 会有1个container
          • 注意:container内存会自动增加 默认1G增加
        • 2. contaner cpu
          • 虚拟核 vcore :设计初衷 考虑不同节点的cpu的性能不一样
          • 例如: 某个物理cpu是另外一个物理cpu的2G
            • 第一机器:强悍   pcore: vcore=1: 2 (1core·当成2core使用)
            • 第二机器:不强悍  pcore: vcore=1: 1
               
            • 16个物理核: 16vcore
              • 虚拟核 和物理核的比例 : 

                yarn.nodemanager.resource.pcores-vcores-multiplier  2

                            yarn core =》 vcore 16*2 = 32 vcore 

              • 总: 
                            yarn.nodemanager.resource.cpu-vcores 32  【默认是8vcore】

              • 最小:
                            yarn.scheduler.minimum-allocation-vcores 1 极限情况下 只有32个container 

              • 最大:
                            yarn.scheduler.maximum-allocation-vcores 32 极限情况下 只有1个container 

            • 实际开发角度:

              • 1.mem 为主 
              •  2.cpu : 
                        cloudera 公司推荐 一个contaier 的vcore 最大值最好不要超过5   4 

                ​​​​
              • 理想情况下:标准 cloudera 公司

                • cpu角度: 
                          16个物理核 : 16vcore

                  • 虚拟核 和物理核的比例 : 
                                yarn.nodemanager.resource.pcores-vcores-multiplier  2

                                yarn core =》 vcore 16*2 = 32 vcore 

                  • 总: 
                                yarn.nodemanager.resource.cpu-vcores 32  【默认是8vcore】

                  • 最小:
                                yarn.scheduler.minimum-allocation-vcores 1 极限情况下 只有32个container 
                     

                  • 最大:
                                yarn.scheduler.maximum-allocation-vcores 4 极限情况下 只有8个container 

                • 反推内存:
                       
                      vcore 4  container 8个

                  • 总:
                                yarn.nodemanager.resource.memory-mb  96G 【默认值是8G】

                  • 最小:
                                yarn.scheduler.minimum-allocation-mb 1G  极限情况下 会有96个container

                  • 最大:
                                yarn.scheduler.maximum-allocation-mb 12G 极限情况下 会有8个container

                  • 注意: 
                                container内存会自动增加 默认1g递增 

            • container: 

              • 1. 8-32 个container =>  task  8-32个

              • 2.以内存为主 

              • 总:
                        yarn.nodemanager.resource.memory-mb  96G 【默认值是8G】

              • 最小:
                         yarn.scheduler.minimum-allocation-mb 2G 

              • 最大:
                         yarn.scheduler.maximum-allocation-mb 20G 

                    20G => container ? 5个container
                    2g => container ? 48个container

            • 4G 2core 

              • 1.内存

                • 总:
                              yarn.nodemanager.resource.memory-mb  4G 【默认值是8G】

                • 最小:
                              yarn.scheduler.minimum-allocation-mb 1g  极限情况下 会有96个container

                •  最大:
                              yarn.scheduler.maximum-allocation-mb 2G 极限情况下 会有8个container

              • 2.cpu 2

                • ​​​​​​​​​​​​​​虚拟核 和物理核的比例 : 
                              yarn.nodemanager.resource.pcores-vcores-multiplier  2

                • 总: 
                              yarn.nodemanager.resource.cpu-vcores 4  【默认是8vcore】

                • 最小:
                              yarn.scheduler.minimum-allocation-vcores 1 极限情况下 只有32个container 

                • 最大:
                              yarn.scheduler.maximum-allocation-vcores 2 极限情况下 只有8个container 

        • ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​修改配置内存

          修改 yarn-site.xml:
          路径:/home/hadoop/app/hadoop/etc/hadoop
        • [hadoop@bigdata13 hadoop]$ vim yarn-site.xml
          
          #内存:
          <property>
                  <name>yarn.nodemanager.resource.memory-mb</name>
                  <value>4096</value>
          </property>
          <property>
                  <name>yarn.scheduler.minimum-allocation-mb</name>
                  <value>1024</value>
          </property>
          <property>
                  <name>yarn.scheduler.maximum-allocation-mb</name>
                  <value>2048</value>
          </property>
          
          #cpu: 
          <property>
                  <name>yarn.nodemanager.resource.pcores-vcores-multiplier</name>
                  <value>2</value>
          </property>
          <property>
                  <name>yarn.nodemanager.resource.cpu-vcores</name>
                  <value>4</value>
          </property>
          <property>
                  <name>yarn.scheduler.minimum-allocation-vcores</name>
                  <value>1</value>
          </property>
          <property>
                  <name>yarn.scheduler.maximum-allocation-vcores</name>
                  <value>2</value>
          </property>
          
          同步到其他:[hadoop@bigdata13 hadoop]$ xsync yarn-site.xml
        • mapreduce:

          • 1.map task  reduce task  默认申请的container:cpu mem 分别是多少?

          • 2.map task: 

            • 1.mem 

              • mapreduce.map.memory.mb 默认是1024 

              •    一个map task 申请的内存资源是 1024M 

              • 如果map task 实际使用的资源量超过该值  task将会被强制杀死

            • 2.cpu 

                          mapreduce.map.cpu.vcores  默认是1
            • 3.reduce task : 

              • 1.mem 
                            mapreduce.reduce.memory.mb 默认是1024

              • 2.cpu 
                            mapreduce.reduce.memory.mb 默认是1

​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

了解:
mr: 进程级别 job =》 进程 maptasks、 redue tasks  =》 jvm 
    map task :
        mapreduce.map.java.opts jvm相关调优参数即可
    reduce task 
        mapreduce.reduce.java.opts jvm相关调优参数即可
    jvm参数调优=》 

1.提交mr作业时可以指定 ?当前job生效
    hadoop jar  xxx.jar  xxx参数 指定job运行时资源的参数 
2.集群环境里面可以配置:? 全局生效
    mapreude-site.xml 
3.最常见的 code  =》 当前job生效
    code 
    Configration       
 

​​​​​​​ 

  • 2.存储 hdfs (存储文件)

    • 压缩:
      • 1.为什么要使用压缩? 

        • 1.节省空间 (1file hdfs 3个副本)
        • 2.节省时间:网络io 和磁盘io 会减少
          • mapreduce 过程中 map端输出采用压缩 
            • 1.经过网络传输的数据量会变少 【减少了网络io】
            • 2.磁盘上数据压缩后,读取到内存的数据量也会变少 【减少磁盘io】
      • 2.使用场景? 

        • 1.采用压缩,对机器的cpu要求比较高
        •  2.存储数据的空间不够
      • 3.凡事都有两面性?

        • 1.采用压缩 
                     空间 和时间 减少 
        •  2.cpu 消耗 cpu利用率高  =》 会导致整个mr作业处理数据时间会稍微长一些
           
      • 4.如何使用压缩? 

        • 1.存储角度
                          压缩普通文件 
        • 2.计算角度 mr spark flink
          • 1.input mr 不用考虑 切片会对压缩格式进行校验 =》 源码里面
          •  2.map out  配置参数即可
          •  3.reduce out 配置参数即可
             
      • 5.常见的压缩格式 

        • gzip 
        • bzip2
        • LZO
        • Snappy 
        • LZ4 
           
        • 1.压缩比

                      Bzip2 30%  GZIP    snappy、lzo 50%

                      解压速度: 
                          snappy、lzo GZIP   Bzip2

        • 2.压缩文件是否可以被切分?
          • 1.假设一个 5G文件 不能被切分 split 意味着 只能使用一个map task去处理
                            map task  5G 
          • 2.假设一个 5G文件 能被切片  splits 10map task 去并行处理  
                            5*1024 /10 = 一个map task 处理的数据
          • 3. 能否被切分 决定了 你的 一个map task处理的数据量有多少
        • 3.压缩后的文件是否支持分割?
          • gzip  不可分割
          • bzip2  可分割
          • lzo   带索引的可以分割 (默认是不支持分割的)
          • snappy 不可分割的
        • 4.mapreduce 每个阶段该如何采用这些算法?

              input =》 maps =》 reduce =》 output 
          • ​​​​​​​input:
                        Bzip2 
                            支持分割 多个map task 进行出 
          • map out:
            • ​​​​​​​​​​​​​​1. shuffle 过程 要选择一个解压 速度快的压缩格式 
            • 2.snappy 、lzo 
          • reduce out : 
            • ​​​​​​​​​​​​​​1.高的压缩比 + 支持分片  =》 节省空间 
            • 2.bzip2  、lzo带索引的 
                              reduce out 数据 作为下一个
                              map 的输入咋办?
                              建议使用bzip2【如果采用压缩的话】
      • 压缩配置

        • ​​​​​​​​​​​​​​​​​​​​​​​​​​​​1.mapreduce 压缩配置:

          • 1.配置压缩的codec 
          • 2.map reduce 输出配置:
            • 1.先打开压缩的开关
            • 2.配置codec 即可
        • 2.hadoop集群hdfs 支持哪些压缩?

          • 1.命令  hadoop checknative
          • 2.core-site.xml:
               配置支持的压缩
            • mapred-site.xml: 
            • io.compression.codecs 

              1.先打开压缩的开关 
              2.map reduce 输出 压缩算法
        • 补充: 
              原生 hadoop 默认不支持 lzo的压缩
        • bzip2\gzip snappy 
        • <property>
                  <name>io.compression.codecs</name>
                  <value>org.apache.hadoop.io.compress.BZip2Codec,
          		org.apache.hadoop.io.compress.SnappyCodec,
          		org.apache.hadoop.io.compress.GzipCodec,
          		org.apache.hadoop.io.compress.DefaultCodec
          		</value>
          </property>
        •  mapred-site.xml: 
          • 1.先打开压缩的开关
          • 2.map reduce 输出 压缩算法
            reduce: 开关
            mapreduce.output.fileoutputformat.compress
            
            <property>
                    <name>mapreduce.output.fileoutputformat.compress</name>
                    <value>true</value>
            </property>
            
            mapreduce.output.fileoutputformat.compress.codec 
            
            <property>
                    <name>mapreduce.output.fileoutputformat.compress.codec</name>
                    <value>org.apache.hadoop.io.compress.BZip2Codec</value>
            </property>
        • 3.各个DN节点数据平衡 

          eg: 
                  DN1 存储空间 90% 
                  DN2 存储空间 60% 
                  DN3 存储空间 80% 

              如何做呢?
                  sbin/start-balancer.sh 
              
              parameters = Balancer.BalancerParameters 
              [BalancingPolicy.Node, threshold = 10.0, max idle iteration = 5,

              数据平衡的默认阈值:threshold = 10.0 
                  每个节点的磁盘使用率 - 平均的磁盘使用率 <10%

          DN1 存储空间 90%  -76% = 14% 说明这个节点数据多 往别的节点迁移数据 出
          DN2 存储空间 60%  -76% = -12% 说明这个节点数据少 别的节点迁移数据 进
          DN3 存储空间 80%  -76% = 4%     说明这个节点数据多 往别的节点迁移数据 

          avg=90 + 80 +60 /3 = 76% 

          生产上 从现在开始 start-balancer.sh -threshold 10  每天要定时做的 
              放到业务低谷期去做 数据平衡操作 

                  注意: 不要在业务高峰期做  

                      1.数据平衡 数据传输  带宽有关
                      调优参数 :平衡的网络带宽  w 
                  
                  dfs.datanode.balance.bandwidthPerSec 100m 【2.x 默认是10m】

                  每个节点数据几十T  需要数据平衡的数据 几十T  可以申请维护窗口时间 : 

                  dfs.datanode.balance.bandwidthPerSec 临时调大 200M 
                  2T 100m =》20s 
                  2T 200M =》 10s 

        • 4.单个DN节点 多块磁盘的数据平衡 

          • 投产前规划: 
                    DN 机器   10块 2T 【不做raid】  =》 20T   副本的

          • 1.dn 配置多个磁盘

            <property>
                    <name>dfs.datanode.data.dir</name>
                    <value>/data01,/data02,/data03</value>
            </property>
          • 2.为什么要使用多块物理磁盘?

            • 1.存储

            • 2.因为多个磁盘的io也是叠加的
                      每块磁盘 磁盘io 每秒 100m
                      三块磁盘 1s 能 300m文件内容
                      一块磁盘 1s 100m

          • 3./data01,/data02,/data03 

            • 做多个磁盘数据均衡
                  dfs.disk.balancer.enabled  true 【3.x有这个功能 cdh 2.x 也有】 apache 2.x 没有这个功能

            •  得通过命令去解决磁盘数据均衡?
                  hdfs diskbalancer

            • 步骤
              hdfs diskbalancer -plan  bigdata32  => 生成一个  bigdata32.plan.json 文件
              hdfs diskbalancer -execute bigdata32.plan.json =》 执行disk 数据均衡计划文件 
              dfs diskbalancer -query bigdata32

              生产上 当你发现 磁盘写入不均衡 可以做一下 【一般 一个月 半个月 做一次即可】


               

​​​​​​​

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Hadoop中的YARN是一个资源管理器,可以管理集群中的资源,包括内存、CPU和磁盘等。它可以管理作业的执行和资源分配,同时提供了故障转移和高可用性等功能。YARN采用了面向应用程序的资源管理器,使得不同类型的应用程序可以共享集群资源,从而提高了资源的利用率和集群的利用率。YARNHadoop生态系统中的一个核心组件,广泛应用于大数据处理、机器学习和人工智能等领域。 ### 回答2: YARN(Yet Another Resource Negotiator)是Hadoop中的集群资源管理器,旨在解决Hadoop 1.x版本中资源管理和作业调度的局限性。YARN的出现使得Hadoop能够支持更灵活的作业运行方式,提高了集群的资源利用率和作业执行效率。 YARN的核心组件包括资源管理器(ResourceManager)和节点管理器(NodeManager)。资源管理器负责管理整个集群的资源,并为所有应用程序分配适当数量的资源。节点管理器负责在各个节点上启动、监视和停止容器,容器是运行在节点上的应用程序的运行环境。 在YARN中,用户可以通过使用不同的应用程序框架(如MapReduce、Spark等)来运行任务。应用程序被分为多个任务,每个任务由一个或多个容器运行。当一个应用程序被提交时,资源管理器将为其分配合适的资源,并在节点管理器上启动容器。节点管理器负责监控容器的运行状态,并在需要时重启失败的容器。一旦一个任务完成,节点管理器将释放相关的资源。 YARN的出现使得Hadoop能够更好地与其他计算框架进行整合,例如支持在同一个集群中同时运行MapReduce和Spark作业。通过动态分配资源、弹性调度和容错机制,YARN能够更好地适应不同的作业需求和资源利用情况。此外,YARN还具有良好的可伸缩性,能够支持集群规模的快速扩展。 总之,YARNHadoop生态系统中起到了关键的作用,它提供了一个灵活高效的资源管理和作业调度平台,使得Hadoop能够更好地满足大数据处理的需求。 ### 回答3: Hadoop中的YARN是Yet Another Resource Negotiator(另一种资源协调器)的缩写,它是Hadoop的一个核心组件。YARN的主要目标是改善Hadoop的资源管理和任务调度。 在Hadoop早期版本中,MapReduce框架负责所有任务的管理、资源分配和任务调度。然而,随着Hadoop集群的规模和复杂度不断增加,原始的MapReduce实现已经不能满足大规模并行运算的需求。 YARN的引入解决了这些问题。YARNHadoop集群的资源管理和任务调度从MapReduce框架中分离出来。它引入了一个全新的资源管理器(ResourceManager)和应用程序管理器(ApplicationMaster)。 ResourceManager负责整个集群的资源管理,它通过分配和监控集群中的资源,在集群各节点之间合理分配计算、存储和网络资源。ResourceManager可以通过配置,为不同的应用程序分配不同的计算资源,确保集群的资源利用率达到最优。 ApplicationMaster则是每个应用程序(如MapReduce、Spark等)的管理者,它与ResourceManager通信,并协调任务的执行。每个应用程序实例在启动时都会与ResourceManager注册一个ApplicationMaster,并负责分配和管理任务。 通过引入YARNHadoop架构变得更加灵活和可扩展。除了MapReduce,现在可以使用其他计算框架,如Spark和Flink,利用YARN完成任务调度。这为开发人员提供了更多选择,并提高了Hadoop集群的利用率。 总的来说,YARNHadoop中起到了关键的作用,通过分离资源管理和任务调度,实现了更高效的资源利用和任务管理。它为Hadoop生态系统的发展提供了基础,并为用户提供了更多灵活和可扩展的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值