1. 为什么需要Job Scheduler
在构建segment的过程中,需要处理大量的task。为了协调这些任务的处理,并且高效合理地利用资源,所以就需要Job Scheduler
共有三种Job Scheduler:DefaultScheduler、DistributedScheduler、CuratorScheduler
2. DefaultScheduler
参数:kylin.job.scheduler.default=0
DefaultScheduler是kylin默认的作业调度器。DefaultScheduler不能实现高可用,当提交了一个cube构建任务,提交到Kylin服务器A,Kylin服务器A会从Zookeeper的临时节点获取服务器级别的锁(实现类是ZookeeperJobLock),进行cube的构建。在Kylin服务器A释放锁之前,其它Kylin服务器不能进行cube的构建
3. DistributedScheduler
参数:kylin.job.scheduler.default=2
DistributedScheduler是一个分布式调度器,当提交了一个cube构建任务,提交到Kylin服务器A,Kylin服务器A会从Zookeeper的临时节点获取segment级别的锁(实现类是ZookeeperDistributedLock),进行cube的构建
之后再提交另一个cube构建任务,提交到Kylin服务器B,Kylin服务器B会从Zookeeper的临时节点获取segment级别的锁,进行cube的构建
但是提交相同的cube构建任务到Kylin服务器,则不能进行cube的构建,因为获取不到Zookeeper的锁
4. CuratorScheduler
参数:kylin.job.scheduler.default=100
Curatorscheduler是一个主从式的分布调度器
Kylin启动时,会使用LeaderSelector从所有Kylin服务器节点选举一台服务器作为Leader,其它Kylin服务器节点为Follower
Leader负责cube构建任务的执行。如果Leader挂了,则从其它Kylin服务器以相同的方法,选出一个新的Leader