Hadoop 之 RM初始化、远程调试

原创
2017/05/03 22:09
阅读数 352

JAVA进程、核心的Hadoop类
    1.HDFS:数据存储
        org.apache.hadoop.hdfs.server.namenode.NameNode
        org.apache.hadoop.hdfs.server.datanode.DataNode
        org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode
        
    2.YARN:MapReduce 作业的调度执行
        org.apache.hadoop.yarn.server.resourcemanager.ResourceManager
        org.apache.hadoop.yarn.server.nodemanager.NodeManager

初始化:
    1.RM 收到submitApp()后将请求转给调度器Yarn scheduler
    2.scheduler分配container
    3.RM在该container启动app master , 并交由节点管理器NM管理。
    4.app master创建多个记录对象跟踪job进度,它将接受task的进度或完成报告。
    5.检索输入切割 inputsplit
    6.为每个split创建map任务和一定数量的reduce任务(setNumRed..()),此时分配jobid
    7.app master判断如何运行task,如果是小job,app master会在同一节点jvm中运行
        uber task就是指这一点,因为开启新容器分配和运行程序更耗费资源。
        小job的衡量标准是map<10,只有reduce=1,而且input size < block size。这些值可以修改。
             mapreduce.job.ubertask.maxmaps
             mapreduce.job.ubertask.maxreduces
             mapreduce.job.ubertask.enable
    8.最后,App master调用OutputCommitter的setupJob()方法,默认是FileOutputCommimter,主要是创建output目录和临时工作目录。


远程调试:
    1.远程服务器启动jvm的远程调试:
        a.运行java程序时,直接指定参数 java -xxxx -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8000
        b.先设置环境变量,再启动jvm,直接变环境附加在jvm启动参数之后
            export xxx="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8000"
            java yyy $xxx
        c.${hadoop_home}\bin\yarn
            $YARN_RESOURCEMANAGER_OPTS
    2.编写脚本
        enable_yarn-remotedebug.sh

export YARN_RESOURCEMANAGER_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8000"

    
    3.执行脚本,source环境变量生效
    4.启动资源管理器RM:start-yar.sh
    5.启动多个NM,但是RM暂停在监听8000端口的过程中
    6.到客户端中设置断点,连接到远程的RM程序,
        a.在RM的main函数设置断点
        b.在类上选择run--> debug configuration...->new remote deug..->socket attach-> 指定远程服务器ip和端口 ip:xx | port:8000
        c.点击debug

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部