JMS Debuger

一、需要debug的东西

(1) computing nodes

1.Loger 类的宏定义替换为模板。

2.作业提交成功后,即记录在数据库中。这样,可以启动shceduler节点,而保证提交成功,但还没开始计算的作业信息不丢失。

3. 子进程监控的递归实现

4.计算节点每间隔10s(可配置)用cnReport函数向scheduler汇报。防止scheduler重启后,拿不到计算节点信息。汇报时,若成功,检查本地的lostcompletedjobs文件,有内容就用completenotify方法向scheduler发作业完成通知,scheduler把信息记录到history数据库中,删除runningqueue中该作业的信息,然后通知computingnodes清空lostcompletedjobs文件;没有内容就do nothing;若汇报失败,do nothing;

5. 若本地计算节点完成作业通知scheduler失败,记录信息到lostcompletedjobs:jobid,completetime,cputime,state(  COMPLETED = 3, FAILED = 5, KILLED = 7)

6. 需要重写jobquery方法,thrift框架已经生好


(2)Scheduler
1. 日志信息分开放,目前测试阶段全在debug里面。Scheduler端分为:queue,ServiceForUser, ServiceForCN,DB。 Computing Node端: Report, ServiceForScheduler
2. SystemInfoOutput 单例模式,改名为Log
3. NodeManager类中的start方法用线程池,以免系统规模较大时,漏掉new nodes
4. SlaveNode的assignJob可以考虑用thrift连接池(暂时不做)。
5. 节点列表应该在数据中存放一份,内存中有任何增删改操作,即做同步操作。
6. 调研一下thrift的一个transport能否被多个相同/不同函数同时并用。
7. job scheduler重启的问题包括:1)作业队列内容全部丢失;2)如果有作业恰好计算完成,得不到记账信息。初步计划1)作业队列对象建立对应的数据表。2)每个计算节点建立一个本地文件“lostcompletedjob”,以此防止记账信息丢失。
8.SimplePopConstraint这个类能否写的再具体一些。比如根据job的信息,读取到他的一些requirements(condor的叫法)然后判断现有资源是否满足这些requirements。
9. 把JobQueueManager里面的内存对象都入库:jobstat、jobResults把两个Map也留下来。

10. DBHistoryJob类暂时没考虑,插入了一部分作业出现异常的情况。异常暂未做处理。

11. 为了防止计算节点down,running queue 和db还为分配在这些节点上的作业保留着信息,需要在scheduler端如下操作:
      1)建立:SuspectedComputingNodeList
      2)若有节点汇报,从SuspectedComputingNodeList 和 ComputingNodeList中查,
    若在CNList中,比较最近两次汇报时间间隔,是否大于设定的最大时间间隔,若不大于,do nothing;若大于,放到SuspectCNList中
            若在SuspectedCNList,就检查running-queue中有没有在此节点上运行的作业,若有,再去节点上查看此作业是否还在,若不在就从running-queue中删掉作业,并从数据库中删掉。若再,do nothing。
            如都无,加到CNList。

12. 分配作业时若无法连接到计算节点,把该节点从CNList移到SuspectedCNList


13. 试一下使用wait3,替换ptrace。以后可以试一下使用递归wait3

14 open too many files  
二、总体结构

computing nodes:

jobservicemain-》jobservice-》jobservicehandler-》procspawn




三、对作业分配失败的处理。


为了实现“程序跟着数据走”,需要根据文件系统的元数据分配作业,如果下层文件系统的元数据出现错误,作业可能被分配到一个并没有持有所需输入文件的节点。这是可以在作业运行的返回信息(比如标准错误输出)中分析出运行错误原因,如果是找不到所需数据(比如"file *** not exist"),记录下此次分配,作业回到队列,重新分配到其他节点(假设持有作业所需文件的节点不只有这一台)。

做法:

作业数据结构中添加一个list,记录作业曾分配到过的节点。


四、未来的问题


1. 计算产生的数据如何返回给用户

2. 可能出现的c10k问题

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值