【niubi-job——一个分布式的任务调度框架】----安装教程
niubi-job是什么
niubi-job是LZ耗时三个星期,费尽心血打造的一个具备高可靠性以及水平扩展能力的分布式任务调度框架,采用quartz作为底层的任务调度管理器,zookeeper做集群的管理与协调。
niubi-job可以做什么
niubi-job与Hadoop的MR框架,包括storm等的目标不同,niubi-job主要针对的是需要定时执行,且同一时间只能有一个节点运行此任务的场景。例如,有一个定时任务是定时去请求某个API获取交易的状态,然后将状态更新到数据库里。类似于这样的job,就非常适合niubi-job去做。
特别强调,niubi-job强制保证同一个任务在同一时间只可能被一个节点运行,这是niubi-job最大的特征,也是用好niubi-job必须要知道的。
特性
1、动态发布任务,通过web控制台上传jar包即可发布任务,发布新任务时,正在运行的任务不受任何影响。
2、可靠性较高的灾备机制,采用成熟的分布式系统解决方案zookeeper处理节点间的协作。
3、智能负载均衡,拥有理论上无限的伸缩能力(仅master-slave模式支持)
4、有较为详细的任务执行日志。
5、支持spring的运行环境。
6、支持多种模式,例如单机模式、伪分布式以及真正的分布式。
7、简单易用,降低门槛。
8、未完待续...
安装使用
好了,对于框架本身的介绍就暂时到这里,本文主要的任务是教会大家如何使用niubi-job。后续,LZ还会出一系列文章去讲解niubi-job的框架设计,原理以及一些其它的内容,比如类加载机制等。
安装要求
使用niubi-job,你需要具备以下环境和软件。
1、JDK1.8+(正确配置JAVA_HOME,且保证java -version可以正确运行)
2、关系型数据库(MYSQL最佳,因为niubi-job默认的数据库配置是mysql,请手动建立一个叫做job的数据库)
3、zookeeper-3.4.7。
4、tomcat7+。
除了以上之外,你当然还需要下载niubi-job相关的软件。niubi-job主要分为两部分,一部分是web控制台,以war包方式提供,可以在tomcat等web容器当中运行。另外一部分就是节点的运行程序,以zip和tar.gz方式提供,请根据自己的操作系统自由选择。
下载的地址可以到LZ的个人博客里下载最新版本,地址分别如下。
http://www.zuoxiaolong.com/download/niubi-job-cluster.zip
http://www.zuoxiaolong.com/download/niubi-job-cluster.tar.gz
http://www.zuoxiaolong.com/download/niubi-job-console.war
当然了,也可以从LZ的github上面clone下来源码自己编译,不过这需要你的本机有maven和git,然后一一执行以下命令即可。
git clone git@github.com:xiaolongzuo/niubi-job.git
cd niubi-job
mvn clean package
执行完以上命令后,在你当前文件夹里,就会出现上面的三个文件。
安装步骤
好了,有了以上环境,基本上已经安装了一半了。不要害怕,接下来很简单,跟着LZ一起往下进行吧。
启动三个zookeeper
如果你已经下载好了zookeeper-3.4.7的安装包,那么请启动三个zookeeper。当然,一个也是完全可以的。具体的安装步骤这里就不赘述了,搜索“zookeeper伪分布式安装”,网络上有大量的教程。
LZ这里只给大家一个方便下载zookeeper的链接,大家可以点击下载zookeeper-3.4.7,地址为:http://www.zuoxiaolong.com/download/zookeeper-3.4.7.tar.gz。
启动数据库
以mysql为例,mysql安装的步骤不再赘述,请自行参考网络上的资料,一把一把的。只需要切记,建立一个叫job的database就行了。niubi-job的orm框架采用hibernate,可以逆向生成数据库的表,因此不需要数据库的初始化脚本,只需要建立好数据库即可。
如果你没有mysql数据库,也没有关系,在接下来自行配置一下即可。只要不是特别奇葩的关系型数据库,相信hibernate都是支持的。
启动niubi-job-console
niubi-job-console是niubi-job项目的web控制台,是给开发人员操作的Web UI界面,用它可以上传jar包,发布和停止任务,查看节点和任务运行情况等。
首先下载tomcat7或8,然后解压,将niubi-job-console.war包放到tomcat容器的webapps目录下,接下来启动tomcat。
接下来,见证奇迹的时刻就到了,进入http://localhost:8080/niubi-job-console,你会看到如下界面。
当然了,你也可能会启动报错,不过这没关系,99%的可能是你数据库或者zookeeper的配置不对,请进入到下面的文件夹
${tomcat_home}/webapps/niubi-job-console/WEB-INF/classes
你会看到一个叫config.properties的文件,或许你需要修改一下这个文件。它的内容如下。
这些参数的解释如下,你可以根据自己的需要修改。
connectString:zookeeper地址
driverClass:数据库驱动(具体的配置请根据自己的数据库自行选择,此外,请自行引入相应的数据库驱动包,放在lib文件夹下)
jdbcUrl:数据库连接地址(ps:LZ这里默认的数据库叫job,当然了,你如果不喜欢的话,那就改了它!)
user & password:这两项很明显是用户名和密码了。
hibernate.dialect:数据库方言(ps:如果你使用了其它数据库,记得把方言改成你的数据库方言。)
hibernate.*:接下来的参数就不一一介绍了,这属于hibernate的知识,有兴趣的可以自行研究下。(ps:还有很多参数在这里并没有出现,但也同样支持)
启动niubi-job-cluster
启动好console以后,重点就来了。niubi-job-cluster是整个niubi-job项目的核心,也是最耗费LZ心血的地方。它是niubi-job中节点的应用程序,每一个启动的节点都是集群中的一员,它们相互协作,来完成任务的调度。
niubi-job-cluster的启动方式比较简单,下载完以后,解压它,你可以看到如下目录。
如果你是linux或者mac操作系统,就进入bin目录执行以下命令
sh startup.sh
如果你是windows系列操作系统,则双击startup.bat。
如果启动成功,则如下。(LZ的操作系统是mac,仅供参考)
Tips[如未遇到,请忽略]: 由于操作系统编码的格式问题,可能会出现这个错误:bad interpreter: No such file or directory 这个时候只需要执行以下命令即可解决。 vi startup.sh :set ff=unix //这是在vi模式下输入的 :wq //保存退出。 不要忘了将以上操作对shutdown.sh和bootstrap.sh同样都做一遍。
好了,咱们看下日志文件里面是什么,如下。
到这里,你已经启动了一个节点,niubi-job-cluster默认的模式为master-slave模式。因此进入控制台的master-slave页面,并且进入node manager页面,就可以看到我们的节点了。
接下来,我们来尝试在一个机器上启动多个niubi-job-cluster(伪分布式),首先将niubi-job-cluster复制出三份。然后进入每个niubi-job-cluster的conf文件夹。可以看到有一个job.properties文件,如下。
这些参数的含义如下,可以按照自己的需要配置。
zookeeper.addresses:zookeeper集群地址
jar.repertory.url:console的地址
node.mode:枚举类型(standby和masterSlave二选一)
shutdown.port:关闭需要监听的端口(伪分布式主要就是把这个端口改成不一样的,比如三个节点分别是9101,9102,9103)
给每个niubi-job-cluster改完端口以后,就可以依次启动另外两个节点了。这个时候,你会看到node manager里面出现了三个节点。如下。
好了,到这里基本上一个伪分布式的niubi-job集群已经部署好了。
上传jar包和发布任务
所谓的jar包,其实就是你的任务,具体的开发模板请参考LZ的github,里面有两个示例,一个是普通的java项目,一个是基于spring的项目。地址如下。
https://github.com/xiaolongzuo/niubi-job/tree/master/niubi-job-samples
LZ已经给上面两个示例项目打好了jar包(切记,打包时要把自己的依赖也打进去,同时将niubi-job-scheduler排除在外,在LZ的这两个示例项目中,打包时只需要激活release的profile即可),可以从LZ的个人网站上下载,地址如下。
http://www.zuoxiaolong.com/download/niubi-job-sample-common.jar
http://www.zuoxiaolong.com/download/niubi-job-sample-spring.jar
下载完以后,进入控制台的upload jar界面,就可以上传jar包了。这里需要填写一下需要扫描的packages,这是必须要填的。如下。
如此将两个jar都上传后,在job runtime manager页面可以看到四个任务。如下。
如图,按照图中所示即可进入任务发布界面,输入cron表达式后,选择execute,任务将会被启动。咱们将四个任务都启动,可以看到如下图。
接下来,我们进入node manager界面,可以看到任务是平均分配的。如下图。
其中master上面运行了两个任务,而两个子节点分别被分配了一个任务。这个时候,你可以尝试关闭其中一个节点,你会发现任务将会被平均分配到剩下的节点当中。比如你这时候把master关掉,那么剩下的两个slave将有一个成为master,并且剩下的两个节点会每个有两个任务。
结束语
到现在为止,你的niubi-job已经搭建起来了。当然了,这只是单机版的体验方式,真正在生产中使用的时候,需要使用真正的分布式模式,而且还需要做一些其它方面的工作,以期让niubi-job更好的工作。比如,可以把console存储jar包的地方,和节点下载jar后存放的位置指向同一个硬盘,这样节点将不再需要下载jar包。
由于本次发布的是niubi-job的第一版,因此还有很多不足之处,包括web控制台的UI也非常粗糙。LZ欢迎大家去github上面给niubi-job提issue,或者提交PR。当然,你也可以和LZ在网上交流(联系方式在左侧),或者在下方留言。
未完待续......
【niubi-job——一个分布式的任务调度框架】----安装教程的更多相关文章
- 【niubi-job——一个分布式的任务调度框架】----niubi-job这下更牛逼了!
niubi-job迎来第一次重大优化 niubi-job是一款专门针对定时任务所设计的分布式任务调度框架,它可以进行动态发布任务,并且有超高的可用性保证. 有多少人半夜被叫起来查BUG,结果差到最后发 ...
- 【niubi-job——一个分布式的任务调度框架】----如何开发一个niubi-job的定时任务
引言 上篇文章LZ主要讲解了niubi-job如何安装,如果看过上一篇文章的话,大家应该知道,niubi-job执行的任务是需要用户自己上传jar包的. 那么问题来了,这个jar包如何产生?有没有要求 ...
- 【niubi-job——一个分布式的任务调度框架】----框架设计原理以及实现
引言 niubi-job的框架设计是非常简单实用的一套设计,去掉了很多其它调度框架中,锦上添花但并非必须的组件,例如MQ消息通讯组件(kafka等).它的框架设计核心思想是,让每一个jar包可以相对之 ...
- niubi-job:一个分布式的任务调度框架设计原理以及实现
niubi-job的框架设计是非常简单实用的一套设计,去掉了很多其它调度框架中,锦上添花但并非必须的组件,例如MQ消息通讯组件(kafka等).它的框架设计核心思想是,让每一个jar包可以相对之间独立 ...
- 【niubi-job——一个分布式的任务调度框架】----FAQ文档
引言 本文为niubi-job的FAQ文档,该文档会无限更新.如果您在这里没有找到您想要的答案,请把问题提交到这里. FAQ 1.为什么我的所有任务总是运行在同一个节点上,而没有平均分配到所有节点上? ...
- 分布式任务分发框架Gearman教程和PHP实现实例
1.Gearman介绍和使用场景 Gearman是一个分发任务的程序框架,可以用在各种场合,与Hadoop相 比,Gearman更偏向于任务分发功能.它的任务分布非常简单,简单得可以只需要用脚本即可完 ...
- MooseFS分布式文件系统介绍及安装教程详解
MFS系统由4个部分构成:master.metalogger.chunkserver.client. 1.Master —— mfs的大脑,记录着管理信息,比如:文件大小,存储的位置,份数等,和inn ...
- Java任务调度框架Quartz教程实例
介绍: Quartz框架是一个全功能.开源的任务调度服务,可以集成几乎任何的java应用程序—从小的单片机系统到大型的电子商务系统.Quartz可以执行上千上万的任务调度. 核心概念 Quar ...
- Java任务调度框架Quartz教程
一.什么是quartz作业调度? Quartz框架是一个全功能.开源的任务调度服务,可以集成几乎任何的java应用程序—从小的单片机系统到大型的电子商务系统.Quartz可以执行上千上万的任务调度. ...
随机推荐
- Swing应用开发实战系列之二:设计日期选择面板窗口
Swing本身没有提供什么华丽丽的日期时间选择控件,所以笔者就在网上搜了个第三方的jar包jdatepicker-1.3.2.jar,基于此设计了个很轻量的日期选择面板,很简单的.效果图如下所示: 代 ...
- 第一次配置Android环境
配置Android环境,相信很多人都做过,而且网上的资料也一大堆,我就来分享一下我配置Android的心得吧! 第一步:下载好需要的文件:Android SDK.JDK.Eclipse.ADT ps: ...
- JS高级程序设计2nd部分知识要点3
对象转换方法:1> toLocaleString(),2> toString(),ValueOf()方法会返回相同的值 栈方法是 LIFO (后进先出)的数据结构 -push ,pop 方 ...
- maven添加远程私服
文件放在maven下和..m2下面 <?xml version="1.0" encoding="UTF-8"?> <!-- License ...
- vim自定义配色方案,图文并茂
1.先上图 下面是tcpdump的源码.颜色根据自己的喜好配置,我比较喜欢亮的颜色,看的清楚! 2.下载辅助配置文件 ...
- 开创学习的四核时代-迅为iTOP4412学习开发板
产品特点: 处理器: Exynos 4412 处理器,Cortex-A9四核,功耗性能俱佳! 性能: 1GB(可选2GB) 双通道 64bit数据总线 DDR3: 4GB(可选16GB)固态硬盘EMM ...
- NopCommerce适应多数据库方案
有时候一个项目需要连接多个数据库,以实现不同数据库的数据在同个项目的共享. 如果已经安装了nop,则需要在第二个数据库新建一个表,nop现在无法自动通过迁移来实现第二个或者更多数据库,所以这点需要我们 ...
- 关于JavaScipt对象的基本知识
关于JavaScipt对象的基本知识 JavaScript是运用“对象化编程”的,又叫“面向对象编程”的.所谓“对象化编程”,意义是把JavaScript能涉及的领域划分成各种对象,对象后面还连续划分 ...
- 单调队列应用--BZOJ 3831 Little Bird
3831: [Poi2014]Little Bird Time Limit: 20 Sec Memory Limit: 128 MB Description In the Byteotian Lin ...
- Saltstack-进阶篇
查看minion端的文件内容 [root@linux-node2 ~]# cat /etc/resolv.conf # Generated by NetworkManager nameserver 1 ...