Skip to content

管理员配置手册

徐恒飞 edited this page Aug 25, 2017 · 1 revision
  • 宙斯问题排查利器介绍
  • 多渠道报警配置(短信,邮件,即时通讯)
  • 宙斯与其他系统的协作(zookeeper)
  • Hive UDF函数配置

  • 宙斯问题排查利器介绍
    宙斯调度系统内部使用了 scheduler 与 worker的方式进行通信和任务分派,由于网络等原因,可能会出现一些异常情况
    宙斯调度系统中的很多依赖任务,层次很深,出现问题时也需要一些方法进行排查
    对于这些问题,我们提供了一个问题排查的接口,展示内核运行的一些看不见的数据,方便问题排查
    在浏览器中打开 dump.do (相对路径),即可进入问题排查页面 (如果有乱码,请将浏览器编码设置成utf8)
    此地址只有访问到scheduler服务器上时,才能看到内容,因为如果你的服务器多于一台(分布式环境),不能保证每次刷新都能进入此页
    打开页面后,有三个链接,分别为:Job调度状态 master-worker状态 等待队列任务

    • Job调度状态
      任务的开启和关闭操作,会更新到mysql数据库中,同时也会更新到调度内核(内存)中
      正常情况下数据库的状态和调度内核的状态应该是一致的。
      此页面用于展示调度内核中当前所有任务的开启关闭状态,以及依赖任务状态
      如果发现此处状态与数据库状态不一致,则可判断调度内核数据有错误,需要进行校正
    • master-worker状态
      宙斯系统在启动时会进行抢占式争夺,最先获取到锁的一台服务器,内部会启动一个scheduler,即调度内核
      当调度内核启动后,其他服务器将会以worker的身份去连接scheduler(master)
      后续scheduler就会将任务分配给worker进行执行了。
      当宙斯服务器只有一台时,仍然会按照上面的步骤执行。这台服务器即当scheduler,又当worker
      进入此页面后可以看到一个列表,每一大行代表一台worker,以ip+port开头,如下图所示:(只有一台服务器)
    runnings: scheduler端记录的正在自动运行的任务列表 manual runnings: scheduler端记录的正在运行的手动任务列表 debug runnings: scheduler端记录的正在运行的开发中心任务列表 heart beat: worker向scheduler报告的心跳信息,包括以下内容 last heartbeat: 最后一次心跳发送时间 mem use rate: worker服务器的内存使用率 runnings: worker端记录的正在运行的自动任务列表 manual runnings: worker端记录的正在运行的手动任务列表 debug runnings:worker端记录的正在运行的开发中心任务列表 * 等待队列任务 宙斯系统在触发任务时,会先判断服务器是否在超载运行。如果当前的运行状态超过阈值,宙斯不会立即执行该任务,而是会将该任何放入队列。等待服务器空闲时再真正开始执行 当宙斯系统运行繁忙,有任务进入等待队列时。通过此页面可以判断任务是否处于正常状态 宙斯系统有三种类型的队列,分别是:自动任务队列 手动任务队列 调试任务队列 自动任务队列是指又宙斯系统自动调度触发的任务,或者用户点击手动恢复的任务队列 手动任务队列是指用户在调度中心手动执行的任务队列 调试任务队列是指用户在开发中心手动执行的任务队列
  • 多渠道报警配置(短信,邮件,即时通讯)
    宙斯系统支持多种类型的报警方式
    由于这些报警方式都需要与外部系统进行配合使用,因此开源的宙斯去除了报警的实现代码。但是留有接口,只需要用自己的方式实现相应的接口即可。

    • 短信报警
      实现SMSAlarm类中的方法即可
      短信报警的逻辑是:在非上班时间(周一至周五早9点至晚6点之外的时间)宙斯的自动调度任务失败时,会触发报警
    • 邮件报警
      实现MailAlarm类中的方法即可
      邮件报警的逻辑是:任何手动执行或者自动调度任务失败,都会触发邮件报警
    • 即时通讯报警
      开源代码中已经删除,如果自己有相应的即时通讯接口,可以自行创建。使用邮件报警一致的逻辑即可
      注意:
      自动调度的依赖任务有遍历报警的机制
      比如任务B和C依赖任务A,当任务A自动调度失败时,任务A会发出报警,同事任务B和C也会发出报警(因为任务A失败意味着任务B和C必然失败)
      因此如果一个非常底层的任务失败,将会导致大量报警信息
      从这个侧面,也可以说明收到的报警信息越多,影响的任务就越多,这个报警也就越紧急
      对于短信报警,由一个任务触发的连锁报警,每人最多只能收到20条
  • 宙斯与其他系统的协作
    宙斯是一个非常灵活的系统,他可以与其他系统进行非常方便的协作
    实际业务中可能会有这种需求,宙斯中运行的任务成功后,表明新的数据已经产生,需要通知其他系统切换到新的数据
    这里可以通过配置宙斯的zookeeper通知系统来进行协作
    在antx.properties配置项中对 zeus.zookeeper.host 进行配置,格式为 ip:port 与zk自身的配置方式一致
    当配置成功后每当自动调度任务有成功或者失败时,都会将这个消息发送至zk的相应节点上(/zeus/jobs/123) 通过对该节点的监听,即可知道宙斯任务的运行情况
    具体代码可以参见: ZKResultNotify 类

  • Hive UDF函数的配置
    在开发中心创建一个文档,写入udf函数信息
    在类:HiveJob 中,找到TODO,将fileID设置为开发中心的文档id
    重新打包部署即可
    未来如需修改udf函数库,动态修改该文档即可。即时生效,无需重启

Clone this wiki locally