yarn sls源码的理解与schedule.xml配置实验

part1.

slsl测试时的语句

echo "!!!!!!!into autoSubmitJobs.sh"
dir=/usr/local/hadoop/share/hadoop/tools/sls
rm -rf $dir/my-logs
mkdir  $dir/my-logs
rm -rf /usr/local/hadoop/share/hadoop/tools/sls/yumh-err.txt

bin/slsrun.sh --input-sls=$dir/my-input/sls-jobs.json --nodes=$dir/my-input/sls-nodes.json --output-dir=$dir/my-logs/ --track-jobs=job1_Siyi,job2_Siyi,job3_Siyi   --print-simulation

 

--input-rumen: 输入是rumen trace文件,示例为/share/hadoop/tools/sls/sample-data/2jobs2min-rumen-jh.json.

--input-sls: 输入是sls自己的格式文件,sls file。sls提供了一个工具来将rumen traces文件转换为sls trace:rumen2sls.sh(/share/hadoop/tools/sls/bin/)。关于SLS输入JSON文件的示例,见最后。

--output-dir: 输出监控数据和日志的目录

--nodes: 集群的拓扑结构,默认情况下,sls采用input json file中的拓扑,用户也可以指定一个新的拓扑结构。

--track-jobs: 在模拟器运行过程中跟踪的特定任务,由逗号分隔。

--print-simulation: 该参数决定了是否在模拟器运行前打印仿真信息,包括每个应用程序的节点、应用程序、任务和信息的数量。如果需要,只需要添加上该参数即可。

参考原文:https://blog.csdn.net/hahachenchen789/article/details/80748920 
 

part2

slsrunner,Java源码流程:(如果想看完整的:https://blog.csdn.net/hahachenchen789/article/details/81050621

首先添加option(string opt,string longOpt,boolean hasArg,string description)

                                   选项名,选项全称,是否有参数,描述

添加好后,传入参数,start。

start方法中,依次开启rm,nm,am,所有node正常运行之后,开启runner。

startRM:

通过YarnConfiguration获得yarn-site.xml中参数,从中得到schedule方案(fifo,capacity或者fair,默认fair)

然后通过RM自身的init和start开启RM。

startNM:

nodeResourceMap = SLSUtils.parseNodesFromNodeFile从--nodes参数获得的nodes机架配置文件nodeFile和nodeManagerResource作为参数,获得Node的所有参数。在此之前,SLSrunner中的init从sls-runner.xml中获得每个Node的mem和cpu信息。

startAM:

选择输入的格式会有对应的函数,这里看下sls:startAMFromSLSTrace

通过while循环,每一个job会调用createAMForJob函数。

从sls-jobs.json中获得jobStartTime,jobFinishTime。user,queue,amType等信息。

然后调用runNewAM函数开启AM,将上面的参数信息传递过去。

将sls-jobs.json中某个具体jobs下的task任务以container的形式分配出来,有多少个task,list就有多大。

然后将tasks一一取出,通过for循环来为每一个分配container。

在循环中,先是获得task的信息,比如start,end 时间,优先级,task类型(map)。然后将这些信息收集起来,传递给getResourceForContainer函数,来申请container。

循环最后,将申请的资源res加入到待分配container list中。

 

by: https://blog.csdn.net/hahachenchen789/article/details/81050621

 

在yarn-site.xml中修改默认的schedule

<property>
    <name>yarn.resourcemanager.scheduler.class</name>
   <!-- <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>-->
    <!-- <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler</value> -->
     <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value> 
  </property>

对于容量调度器,可以通过设置yarn.scheduler.capacity.node-locality-delay来配置延迟调度。设置为正整数,表示调度器在放松节点限制、改为匹配同一机架上的其他节点前,准备错过的调度机会的数量。

fair-schedule内的权重那些参数好像是可以随时改变随时生效的:(偶然发现在改变xml时一保存allocated memory就马上发生了变化)

capacity-schedule不能随时改。。。这个继续实验下看看

<property>
    <name>yarn.scheduler.capacity.node-locality-delay</name>
    <value>40</value>
    <description>
      Number of missed scheduling opportunities after which the CapacityScheduler 
      attempts to schedule rack-local containers. 
      Typically this should be set to number of nodes in the cluster, By default is setting 
      approximately number of nodes in one rack which is 40.
    </description>
  </property>
 

fair-schedule中的配置:

经过测试发现weight的数值*最小资源的值就是最大的分配的值???

(如果有问题请务必留言,多谢)

<queue name="queueA">
            <weight>5</weight>
            <minResources>1024 mb,1 vcores</minResources>
            <schedulingPolicy>fifo</schedulingPolicy>
</queue>

<queue name="queueB">
            <weight>5</weight>
            <schedulingPolicy>fifo</schedulingPolicy>
</queue>

capacity-schedule:

经测试发现后面的max为100的时候才会把资源全部分配出去,如果都是50的话则会一半。

  <property>
    <name>yarn.scheduler.capacity.root.queueA.capacity</name>
    <value>50</value>
    <description>Default queue target capacity.</description>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.queueB.capacity</name>
    <value>50</value>c
    <description>Default queue target capacity.</description>
  </property>

  <property>
    <name>yarn.scheduler.capacity.root.queueA.maximum-capacity</name>
      <value>100</value>
  </property>
  <property>
      <name>yarn.scheduler.capacity.root.queueB.maximum-capacity</name>
    <value>100</value>
  </property>

这是都是50的时候。。。好像又不是分配了50%。。。不太清楚,以后知道了回来改ovo

yarn三种调度器解析:

 https://blog.csdn.net/bingduanlbd/article/details/52000151

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值