hadoop 查看yarn队列(hadoop查看namenode)

hadoop 查看yarn队列(hadoop查看namenode)Hadoop 框架包括下述三个个模块 nbsp HDFS Hadoop 集群中最根本的文件系统 数据存储 nbsp nbsp nbsp 一个 HDFS 集群是由一个 NameNode 和若干个 DataNode 组成的 NameNode 作为主服务器 管理文件系统命名空间和客户端对文件的访问操作 DataNode 管理存储的数据 HDFS 支持文件形式的数据 DataNode 负责管理节点上它们拥有的存储 它将存储划分为多个 block 块




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的压缩
bzip2gzip 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

3https://blog.csdn.net/u011250186/article/details/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

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

编程小号
上一篇 2025-02-16 10:06
下一篇 2025-02-13 21:27

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/34878.html