调度器脚本
❶ 用c语言或者Java设计出一个任务调度器。。。
公众:类PrivilegeProcess {
公共静态无效的主要(字串[] args){
MyQueue的MyQueue的新MyQueue的();/ /声明队列
印刷电路板[PCB = {新的PCB(001 ,8,1),新的PCB(002,7,9),新的PCB(003,3,8),新的PCB(004,1,7),新的PCB(005,7,4)};
> PCB段=新的PCB();
(INT I = 0; <pcb.length; + +){/ /初始化先进行排序,选择排序这里使用的是高优先级的一线队
(J =我; <pcb.length; J + +){
(PCB [I]。特权<PCB [J]。特权){
段= PCB [1];
PCB [I] = PCB [J];
PCB [J] =段;
}
}
}
体系。通过out.println(“入队后第一时间的进程的顺序:”);
(INT I = 0; <pcb.length; + +){
的System.out调用println(第一次入队#程序名称:“+ PCB [我]。名称+ totaltime:”+ PCB [I]。totaltime +“的”特权“+ PCB [我]。特权); }
();
myqueue.start(PCB);
}
}
类MyQueue的{
INT指数= 0;
PCB [] PC =新的PCB [5];
PCB [] PC1 =新的PCB [4];
PCB温度=新的PCB() BR />公共无效排队(PCB工艺){/ /排队算法
(指数== 5){
(“出界!”);
返回
}
PC [索引] =进程;
指数+ +;
}
公共:PCB DEQUEUE(){/ /出队算法(索引== 0)
返回空;
(INT I = 0; <pc1.length; + +){
PC1 [I] = PC [ +1];
}
指数 -
温度= PC [0];
(INT I = 0; <pc1.length; + +){ BR /> PC [I] = PC1 [I];
}
回报条件;
}
公共无效启动(PCB [] PC){/ /进程表算法
(PC [0]。isNotFinish ==真| | PC [1 isNotFinish ==真| | PC [2 isNotFinish ==真| | PC [3]。时isNotFinish ==真| | PC [4]。isNotFinish ==){
/ / *注:| |运算符都是假的,所有的表达式结果为假,否则真
(INT I = 0; <PC长度; + +){
PC [I]。运行(这一点); />} 的System.out.println();
(INT I = 0; <pc.length; + +){/ /处理每个运行一次运行的时间片的长度重新排序优先一旦
(J =我; <pc.length; J + +){
如果(PC [I]特权<PC [J]。特权){
温度= PC [I];
PC [I] = PC [J];
PC [J] =温度;
}
}
}
}
}
}
类PCB {/ /声明过程级
和int名,totaltime ,运行时特权;
布尔isNotFinish的;
公众PCB(){
}
公开PCB(名称,诠释totaltime特权){
this.name =的名称;/ /进程名
this.totaltime = totaltime ;/ /
this.privilege =特权;/ /总时间优先 this.runtime = 2 ;/ /时间片值是2
this.isNotFinish =真;/ /是否执行完成
(“初始值:程序名称:”+名+“totaltime:”+ totaltime +“特权”+特权);
System.out的。调用println();
}
MyQueue的MQ公共无效的run(){/ /处理的基础上实施的时间片算法
(totalTime> 1){ totaltime =运行;/ /总时间大于1,总时间=总时间 - 时间片
特权 -
(“程序名称:”+姓名+“ remaintime:“+ +”特权“+特权); totaltime
的} else if(totaltime == 1){
totaltime - ;/ /总时间为1时,执行时间为1
>特权 -
(“程序名称:”+姓名+“remaintime:”+ totaltime +“特权”+特权);
}其他{
isNotFinish =假;/ / 0,将isNotFinish标志设置为假
}
如果(isNotFinish ==真){br mq.deQueue(); mq.enQueue(本); }
}
}
❷ lvssyncdaemonswap脚本在哪儿
keepalived.conf内容说明如下
●全局定义块
1、email通知。作用:有故障,发邮件报警。
2、Lvs负载均衡器标识(lvs_id)。在一个网络内,它应该是唯一的。
3、花括号“{}”。用来分隔定义块,因此必须成对出现。如果写漏了,keepalived运行时,不会得到预期的结果。由于定义块内存在嵌套关系,因此很容易遗漏结尾处的花括号,这点要特别注意。
●VRRP定义块
1、同步vrrp组vrrp_sync_group。作用:确定失败切换(FailOver)包含的路由实例个数。即在有2个负载均衡器的场景,一旦某个负载均衡器失效,需要自动切换到另外一个负载均衡器的实例是哪些?
2、实例组group。至少包含一个vrrp实例。
3、Vrrp实例vrrp_instance。实例名出自实例组group所包含的那些名字。
(1) 实例状态state。只有MASTER和BACKUP两种状态,并且需要大写这些单词。其中MASTER为工作状态,BACKUP为备用状态。当 MASTER所在的服务器失效时,BACKUP所在的系统会自动把它的状态有BACKUP变换成MASTER;当失效的MASTER所在的系统恢复 时,BACKUP从MASTER恢复到BACKUP状态。
(2)通信接口interface。对外提供服务的网络接口,如eth0,eth1.当前主流的服务器都有2个或2个以上的接口,在选择服务接口时,一定要核实清楚。
(3)lvs_sync_daemon_inteface。 负载均衡器之间的监控接口,类似于HA HeartBeat的心跳线。但它的机制优于Heartbeat,因为它没有“裂脑”这个问题,它是以优先级这个 机制来规避这个麻烦的。在DR模式中,lvs_sync_daemon_inteface 与服务接口interface 使用同一个网络接口。
(4)虚拟路由标识virtual_router_id。这个标识是一个数字,并且同一个vrrp实例使用唯一的标识。即同一个vrrp_stance,MASTER和BACKUP的virtual_router_id是一致的,同时在整个vrrp内是唯一的。
(5)优先级priority。这是一个数字,数值愈大,优先级越高。在同一个vrrp_instance里,MASTER 的优先级高于BACKUP。若MASTER的priority值为150,那么BACKUP的priority只能是140或更小的数值。
(6)同步通知间隔advert_int。MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位为秒。
(7)验证authentication。包含验证类型和验证密码。类型主要有PASS、AH两种,通常使用的类型为PASS,据说AH使用时有问题。验证密码为明文,同一vrrp实例MASTER与BACKUP 使用相同的密码才能正常通信。
4、 虚拟ip地址virtual_ipaddress。可以有多个地址,每个地址占一行,不需要指定子网掩码。注意:这个ip必须与我们在lvs客户端设定的vip相一致!
●虚拟服务器virtual_server定义块
虚拟服务器定义是keepalived框架最重要的项目了,是keepalived.conf必不可少的部分。
1、虚拟服务器virtual_server。这个ip来自于vrrp定义块的第“4”步,后面一个空格,然后加上端口号。定义一个vip,可以实现多个tcp端口的负载均衡功能。
(1)delay_loop。健康检查时间间隔,单位是秒。
(2)lb_algo。负载均衡调度算法,互联网应用常使用wlc或rr。
(3)lb_kind。负载均衡转发规则。一般包括DR、NAT、TUN3种,在我的方案中,都使用DR的方式。
(4)persistence_timeout。 会话保持时间,单位是秒。这个选项对动态网站很有用处:当用户从远程用帐号进行登陆网站时,有了这个会话保持功能,就能把用户的请求转发给同一个应用服务 器。在这里,我们来做一个假设,假定现在有一个lvs 环境,使用DR转发模式,真实服务器有3个, 负载均衡器不启用会话保持功能。当用户第一次访问的时候,他的访问请求被负载均衡器转给某个真实服务器,这样他看到一个登陆页面,第一次访问完毕;接着他 在登陆框填写用户名和密码,然后提交;这时候,问题就可能出现了---登陆不能成功。因为没有会话保持,负载均衡器可能会把第2次的请求转发到其他的服务器。
(5)转发协议protocol。一般有tcp和udp两种。实话说,我还没尝试过udp协议类的转发。
2、真实服务器real_server,也即服务器池。Real_server的值包括ip地址和端口号,多个连续的真实ip。
(1)权重weight,权重值是一个数字,数值越大,权重越高。使用不同的权重值的目的在于为不同性能的机器分配不同的负载,性能较好的机器,负载分担大些;反之,性能差的机器,则分担较少的负载,这样就可以合理的利用不同性能的机器资源。
(2)Tcp检查tcp_check。
第③版更新内容如下:
每台服务器都有二块网卡,分别连接内外网;后端的mysql数据库与web连接采用内网方式,整个网络环境采用内网;
增加了keepalived.conf语法内容;
删除了lvs.sh脚本内容,直接让keepalived内容更直接明了;
lvs主从机上的keepalived.conf文件我直接从生产服务器上download下来了,可方便大家使用。
※值得注意的是:
1、你必须向你的服务器所在机房IDC多申请一个IP供VIP使用;多关注/var/log/messages和ipvsadm -ln,利用其有效信息排错。
2、服务器的iptables、Selinux均关闭;在生产环境中,我就遇到了iptables的NAT转发问题,导致了lvs失败。
3、 keepalived的启动过程并不会对配置文件进行语法检查,就算没有配置文件,keepalived的守护进程照样能够被运行起来。在默认状态下,即 不指定配置文件的位置--keepalived先查找文件/etc/keepalived/keepalived.conf。
4、session的过程默认是以文件的形式存在,在浏览器关闭或重启时删除;会话保持我建议写成120秒,如果这个值设置得不合理,用户将得到非常糟糕的访问效果。
5、 keepalived是lvs的扩展项目,因此它们之间具备良好的兼容性,这点应该是keepalived部署比其他类似工具能更简洁的原因 吧,lvs+keepalived目前是一个应用于生产环境的成熟架构,实现了真正意义上的负载均衡高可用,尤其适用于bbs和blog(它们均是访问频 繁,用户量大的对象),建议熟练掌握。
LVS 算法说明
LVS的常见八种调度算法:
一:轮叫调度(Round-Robin Scheling)
轮叫调度(Round Robin Scheling)算法就是以轮叫的方式依次将请求调度不同的服务器,即每次调度执行i = (i + 1) mod n,并选出第i台服务器。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。
二:加权轮叫调度(Weighted Round-Robin Scheling)
加权轮叫调度 (Weighted Round-Robin Scheling)算法可以解决服务器间性能不一的情况,它用相应的权值表示服务器的处理性能,服务器的缺省权值为1。假设服务器A的权值为1,B的权值为2,则表示服务器B的处理性能是A的两倍。加权轮叫调度算法是按权值的高低和轮叫方式分配请求到各服务器。权值高的服务器先收到的连接,权值高的服务器比权值低的服务器处理更多的连接,相同权值的服务器处理相同数目的连接数。
三:最小连接调度(Least-Connection Scheling)
最 小连接调度(Least- Connection Scheling)算法是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态调 度算法,它通过服务器当前所活跃的连接数来估计服务器的负载情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中止或超时,其连接数减一。
四:加权最小连接调度(Weighted Least-Connection Scheling)
加权最小连接调 度(Weighted Least-Connection Scheling)算法是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权值。加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。
五:基于局部性的最少链接(Locality-Based Least Connections Scheling)
基 于局部性的最少链接调度(Locality-Based Least Connections Scheling,以下简称为LBLC)算法是针对请 求报文的目标IP地址的负载均衡调度,目前主要用于Cache集群系统,因为在Cache集群中客户请求报文的目标IP地址是变化的。这里假设任何后端服 务器都可以处理任一请求,算法的设计目标是在服务器的负载基本平衡情况下,将相同目标IP地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和 主存Cache命中率,从而整个集群系统的处理能力。LBLC调度算法先根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的 且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于其一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将 请求发送到该服务器。
六: 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheling)
带 复制的基于局部性最少链接调度(Locality- Based Least Connections with Replication Scheling,以下简称为LBLCR)算法也是针对目标 IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护 从一个目标IP地址到一台服务器的映射。对于一个“热门”站点的服务请求,一台Cache 服务器可能会忙不过来处理这些请求。这时,LBLC调度算法会 从所有的Cache服务器中按“最小连接”原则选出一台Cache服务器,映射该“热门”站点到这台Cache服务器,很快这台Cache服务器也会超 载,就会重复上述过程选出新的Cache服务器。这样,可能会导致该“热门”站点的映像会出现在所有的Cache服务器上,降低了Cache服务器的使用 效率。LBLCR调度算法将“热门”站点映射到一组Cache服务器(服务器集合),当该“热门”站点的请求负载增加时,会增加集合里的Cache服务 器,来处理不断增长的负载;当该“热门”站点的请求负载降低时,会减少集合里的Cache服务器数目。这样,该“热门”站点的映像不太可能出现在所有的 Cache服务器上,从而提供Cache集群系统的使用效率。LBLCR算法先根据请求的目标IP 地址找出该目标IP地址对应的服务器组;按“最小连 接”原则从该服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载;则按 “最小连接”原则从整个集群中选出一台服务器,将 该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
七:目标地址散列调度(Destination Hashing Scheling)
目 标地址散列调度 (Destination Hashing Scheling)算法也是针对目标IP地址的负载均衡,但它是一种静态映射算法,通过 一个散列(Hash)函数将一个目标IP地址映射到一台服务器。目标地址散列调度算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分 配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
八:源地址散列调度(Source Hashing Scheling)
源 地址散列调度(Source Hashing Scheling)算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,作为散列键 (Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址 散列调度算法的相同。它的算法流程与目标地址散列调度算法的基本相似,除了将请求的目标IP地址换成请求的源IP地址,所以这里不一一叙述。在实际应用 中,源地址散列调度和目标地址散列调度可以结合使用在防火墙集群中,它们可以保证整个系统的唯一出入口。
❸ 求个好用的gromacs的pbs脚本
在那个节点运行,什么时候运行。因为每一个site对于什么是好的或者有效的策略都有它自己的想法,PBS允许每一个site来创建它自己的调度器。服务器的主要功能就是提供基本的批处理服务,例如接收/,命令组件用它来和服务器进行通信,pbs_mon。与服务器之间的接口是通过和命令组件一样的API。共有三种类型的命令。
1.1. 什么是PBS?
PBS是一个批处理作业和计算机系统资源管理软件包。它原本是按照POSIX 1003,这一策略控制着哪一个作业被运行,API。
作业执行器:
作业执行器是一个守护进程,它真正地把作业放入执行队列。这一进程,PBS也提供了一个应用编程接口。这类文档中没有更加完善的了,被非正式地命名为Mom,Mom也负责把作业的输出返回给用户。这样,它就可以接受批处理作业、shell脚本和控制属性1. 介绍
此文档用来为系统管理员提供构建、安装,调度器仅仅作为服务器的批处理管理器出现的。
除了上面主要的部分之外。实际上.login和.cshrc一样运行。当服务器指示需要那么做时,如果用户的登陆shell是csh,那么Mom就创建一个会话.2d相一致的命令行和图形接口两种命令方式。这些命令用于提交,作业运行前对其储存并保护,然后运行作业,到目前为止;和服务器进行通信来获知要执行的作业的有效性。当运行的时候,调度器就可以和不同的Moms进行通信来获知系统资源的状态。
作业服务器:
作业服务器是PBS的中心。在本文档中,它一般被称作服务器或被称为可执行文件的名字pbs_server。所有命令和其它守护进程都通过IP网络和服务器通信,这一进程包括site’ policy[1]. PBS的组件
PBS包括四个主要的组件:命令组件,修改作业,保护作业免受系统宕机的影响并运行作业。
作业调度器:
作业调度器是另一个守护进程,在此会话中、监视、修改和删除作业。命令可以被安装在任何PBS支持的系统类型上,并且不需要在本地安装任何其它的PBS组件。Mom创建一个和用户登陆会话尽可能一致的新的会话。例如,它已经被好几个不同的管理员在不同的站点进行了更新,当然仍是比较欠缺,正如它是所有正在执行的作业的母亲(mother)一样。当Mom从一个服务器那里接收一个作业拷贝时就将它放入执行队列;创建一个批处理作业。
PBS可以被安装并配置运行在单机系统或多个系统组来支持作业处理。由于PBS的灵活性,多个系统可以以多种方式组合。
1:任何已授权用户可以使用的命令;操作员命令;管理员命令;操作员和管理员命令需要不同的访问权限、作业执行组件和作业调度器。这里给出每一部分的简要描述来帮助你在安装过程中做出决定。
命令组件:
PBS支持与POSIX1003、作业服务器.2,并且把输出转发回提交者.2d批处理环境来开发的、配置并且管理PBS所需的一些信息。很可能有一些重要的信息项被漏掉了
❹ wincc flexible smart v3 能自己编写脚本吗
smart系列的屏是不支持脚本的所以不能实现j脚本,但是可以使用现有的函数实现记录的启停,比如使用StartLogging 开始记录与StopLogging 停止记录,但是这个函数如何触发是个问题,你可以试试通过变量的数据改变看能不能添加这个函数如果可以就应该可行如果不行就只能通过按钮来实现开始记录与停止记录。还有一个方式就是使用调度器
❺ 如何编写Hadoop调度器
1. 编写目的
在Hadoop中,调度器是一个可插拔的模块,用户可以根据自己的实际应用要求设计调度器,然后在配置文件中指定相应的调度器,这样,当Hadoop集群启动时,便会加载该调度器。当前Hadoop自带了几种调度器,分别是FIFO(默认调度器),Capacity Scheler和FairScheler,通常境况下,这些调度器很难满足公司复杂的应用需求,因而往往需要开发自己的调度器。本文介绍了Hadoop调度器的基本编写方法。
2. Hadoop调度框架
Hadoop的调度器是在JobTracker中加载和调用的,用户可以在配置文件mapred-site.xml中的mapred.jobtracker.taskScheler属性中指定调度器。本节分析了Hadoop调度器的调度框架,实际上分析了两个重要类:TaskScheler和JobTracker的关系。
(1) TaskScheler
如果用户要编写自己的调度器,需要继承抽象类TaskScheler,该类的接口如下:
abstract class TaskScheler implements Configurable {
protected Configuration conf; //配置文件
protected TaskTrackerManager taskTrackerManager; //一般会设为JobTracker
public Configuration getConf() {
return conf;
}
public void setConf(Configuration conf) {
this.conf = conf;
}
public synchronized void setTaskTrackerManager(
TaskTrackerManager taskTrackerManager) {
this.taskTrackerManager = taskTrackerManager;
}
public void start() throws IOException { //初始化函数,如加载配置文件等
// do nothing
}
public void terminate() throws IOException { //结束函数
// do nothing
}
//最重要的函数,为该taskTracker分配合适的task
public abstract List<Task> assignTasks(TaskTrackerStatus taskTracker)
throws IOException;
//根据队列名字获job列表
public abstract Collection<JobInProgress> getJobs(String queueName);
}
(2) JobTracker
JobTracker是Hadoop最核心的组件,它监控整个集群中的作业运行情况并对资源进行管理和调度。
每个TaskTracker每个3s(默认值,可配置)通过heartbeat向JobTracker汇报自己管理的机器的一些基本信息,包括内存使用量,内存剩余量,正在运行的task,空闲的slot数目等,一旦JobTracker发现该TaskTracker出现了空闲的slot,便会调用调度器中的AssignTasks方法为该TaskTracker分配task。
下面分析JobTracker调用TaskScheler的具体流程:
……
private final TaskScheler taskScheler; //声明调度器对象
……
public static JobTracker startTracker(JobConf conf, String identifier) {
…….
result = new JobTracker(conf, identifier);
result.taskScheler.setTaskTrackerManager(result); //设置调度器的manager
……
}
//创建调度器
JobTracker(JobConf conf, String identifier) {
……
// Create the scheler
Class<? extends TaskScheler> schelerClass
= conf.getClass("mapred.jobtracker.taskScheler",
JobQueueTaskScheler.class, TaskScheler.class);
taskScheler = (TaskScheler) ReflectionUtils.newInstance(schelerClass, conf);
…..
}
//run forever
public void offerService() {
……
taskScheler.start(); //启动调度器
……
}
。。。。。
HeartbeatResponse heartbeat(TaskTrackerStatus status,
boolean restarted,
boolean initialContact,
boolean acceptNewTasks,
short responseId) {
…….
// Check for new tasks to be executed on the tasktracker
if (recoveryManager.shouldSchele() && acceptNewTasks && !isBlacklisted) {
……
//使用调度器,为该taskTracker分配作业
tasks = taskScheler.assignTasks(taskTrackerStatus);
……
}
}
从上面的分析可以知道,Scheler和JobTracker之间会相互包含(实际上是组合模式),Scheler中要包含JobTracker(实际上就是TaskTrackerManager)对象,以便获取整个Hadoop集群的一些信息,如slot总数,QueueManager对象,添加JobInProgressListener以便增加或删除job时,通知Scheler;JobTracker中要包含Scheler对象,以便可以对每个TaskTracker分配task。
3. 编写Hadoop调度器
假设我们要编写一个新的调度器,为MyHadoopScheler,需要进行以下工作:
(1) 用户需要自己实现的类
@ MyHadoopSchelerConf:配置文件管理类,读取你自己的配置文件,并保存到合适的数据结构中,一般而言,这个类应该支持动态加载配置文件。
@ MyHadoopSchelerListener:编写自己的JobInProgressListener,并调用JobTracker的addJobInProgressListener(),将之加到系统的Listener队列中,以便系统中添加或删除job后,JobTracker可立刻告诉调度器。
@ MyHadoopScheler:调度器的核心实现算法
(2) 用户要用到的系统类
@ JobTracker:JobTracker在startTracker函数中,会将MyHadoopScheler的taskTrackerManager赋值为JobTracker对象,这样,在MyHadoopScheler中,可调用Jobracker中的所有public方法和成员变量,常用的有:
$ getClusterStatus():获取集群的状态,如tasktracker列表,map slot总数,rece slot总数,当前正在运行的map/rece task总数等
$ getQueueManager():如果MyHadoopScheler支持多队列,那么需要使用该方法获取QueueManager对象,通过该对象,会用可以获取系统的所有队列名称,每个队列的ACL(Access Control List),具体参考:http://hadoop.apache.org/common/docs/current/service_level_auth.html
$ killJob:可以调用该函数杀死某个job
$ killTask:如果调度器支持资源抢占,可调用该函数 杀死某个task以便进行资源抢占。
@ JobInprogress:用户向Hadoop中提交一个job后,Hadoop会为该job创建一个叫JobInProgress的对象,该对象中包含了job相关的基本信息,且它会伴随某个job的一生(与job共存亡)。该对象中包含的job信息有:该job包含的所有task的信息(如:正在运行的task列表,已经完成的task列表,尚未运行的task列表等),作业的优先级,作业的提交时间,开始运行时间,运行结束时间等信息。
在JobInprogress的task列表中,每个task以对象TaskInProgress的形式保存,该对象中包含了每个task的基本信息,包括:task要处理的数据split,task创建时间,task开始执行时间,task结束时间等信息。这些信息肯定会在调度器中使用。
@ JobConf
每个作业的运行参数和配置选项被保存到一个JobConf对象中,该对象包含了配置文件mapred-site.xml,core-site.xml和hdfs-site.xml设置的选项和该作业的特有属性(用户名,InputFormat,Mapper等),一般是以key/value的形式保存,比如:想获取当前用户名,可以这样:
JobConf conf;
…….
String username = conf.get("user.name");
用户也可以通过该对象传递一些自己定义的全局属性,如用户自己定义了一个属性叫mapred.job.deadline(作业的deadline时间),用户可以在提交作业时设定该值:
hadoop jar hadoop-examples.jar wordcount -files cachefile.txt \
-D mapred.job.deadline=100000 \
input output
然后在调度器中这样获取该属性的值:
JobConf conf;
…….
int deadline=conf.getInt("mapred.job.deadline", -1); //获取mapred.job.deadline属性,如果没有设置,则返回-1
4. 总结
调度器是Hadoop的中枢,其重要性可想而知。用户如果要设计Hadoop调度器,需要对Hadoop的整个框架有比较深入的理解,同时需阅读一些很重要的类(如JobTracker和JobInprogress等)的源码,以便利用这些类完成你的调度算法。
Hadoop目前自带了三个比较常用的调度器,分别为JobQueueTaskScheler (FIFO,但队列调度器),Capacity Scheler(多队列多用户调度器)和Fair Scheler(多队列多用户调度器),它们是你学习Hadoop调度器的最好资料。
5. 参考资料
(1) Hadoop-0.20.2源代码
❻ 如何使用crontab调度一个执行一个shell脚本时需要输入用户名和密码
linux下使用crontab命令被用来提交和管理用户的需要周期性执行的任务,示例如下:
crontab -e 编辑周期任务
30 21 * * * /etc/init.d/smb restart 每晚的21:30重启smb
crontab命令说明:
crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
语法
crontab(选项)(参数)
选项
-e:编辑该用户的计时器设置;
-l:列出该用户的计时器设置;
-r:删除该用户的计时器设置;
-u:指定要设定计时器的用户名称。
参数
crontab文件:指定包含待执行任务的crontab文件。
知识扩展
Linux下的任务调度分为两类:系统任务调度和用户任务调度。
系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。
crontab文件的含义:
用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
minute hour day month week command 顺序:分 时 日 月 周
其中:
minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
在以上各个字段中,还可以使用以下特殊字符:
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
❼ linux下编写一个shell脚本 每天0点 定时执行某一可执行程序test。 刚学习shell希望大侠们给个代码参考!
概述
linux用到定时任务需要crontab的帮助
首先终端键入:crontab -e
root@sys #:crontab -e
然后进行编辑,这里操作和vim操作一至
假设,我需要定时每秒访问一次指定网页,访问网页的脚本已经写好了,叫view.sh,放在了/user目录下,那么定时脚本将需要这么些。
*/1 * * * * /bin/sh /user/view.sh
解析
crontab [-u username] [-l|-e|-r]
参数:
-u: 只有root才能进行这个任务,也即帮其他用户新建/删除crontab工作调度;
-e: 编辑crontab 的工作内容;
-l: 查阅crontab的工作内容;
-r: 删除所有的crontab的工作内容,若仅要删除一项,请用-e去编辑。
crontab -e 进入编辑模式 #此时会进入vi的编辑界面让你编辑工作。注意到,每项工作都是一行。
*/1 * * * * /bin/sh /user/view.sh
#分 时 日 月 周 |=========命令行===|
代表意义 分钟 小时 日期 月份 周 命令
数字范围 0~59 0~23 1~31 1~12 0~7 就命令啊
特殊字符 - 代表意义
*(星号) --- 代表任何时刻都接受的意思。举例来说,范例一内那个日、月、周都是*,就代表着不论何月、何日的礼拜几的12:00都执行后续命令的意思。
,(逗号) --- 代表分隔时段的意思。举例来说,如果要执行的工作是3:00与6:00时,就会是:
0 3,6 * * * command
时间还是有五列,不过第二列是 3,6 ,代表3与6都适用
-(减号) --- 代表一段时间范围内,举例来说,8点到12点之间的每小时的20分都进行一项工作:
20 8-12 * * * command
仔细看到第二列变成8-12.代表 8,9,10,11,12 都适用的意思
/n(斜线) --- 那个n代表数字,即是每隔n单位间隔的意思,例如每五分钟进行一次,则:
*/5 * * * * command
用*与/5来搭配,也可以写成0-59/5,意思相同
拓展内容
linux
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
Linux操作系统诞生于1991 年10 月5 日(这是第一次正式向外公布时间)。Linux存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。
严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU工程各种工具和数据库的操作系统。
❽ 如何控制Linux下多个Shell脚本串行执行
当你在一个类似批处理的脚本里启动多个shell脚本的时候,可能没有意识到shell背后的调度器会将这些脚本在多个CPU上并行执行。当同时执行的脚本访问某些共享资源(通常是文件)时,可能造成执行的结果错误,而且经常让你意识不到。
不同于低级语言中提供同步等机制,shell提供的逻辑执行的机制可以用于串行化执行,例如:
1.sh
&&
2.sh
&&
[...]
不过这种方法的一个问题是如果其中有一个环节返回错误,整个流程就不能进行下去。不过一般这一点不是问题,甚至这样就是我们期望的。
剩下的问题:
❾ 如何利用事件调度器定时从mysql中删除数据
mysql定时任务
自 MySQL5.1.6起,增加了一个非常有特色的功能–事件调度器(Event Scheler),可以用做定时执行某些特定任务(例如:删除记录、对数据进行汇总等等),来取代原先只能由操作系统的计划任务来执行的工作。更值得 一提的是MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精 确到每分钟执行一次。对于一些对数据实时性要求比较高的应用(例如:股票、赔率、比分等)就非常适合。
如:每隔30秒将执行存储过程test,将当前时间更新到examinfo表中id=14的记录的endtime字段中去.
CREATE PROCEDURE test ()
BEGIN
update examinfo SET endtime = now() WHERE id = 14;
END;
create event if not exists e_test
on schele every 30 second
on completion preserve
do call test();
2. windows、linux 的定时任务 这个就不举例了,通过脚本定时去调用mysql执行
❿ loadrunner中压力调度器和压力控制器的区别
这个是设置问题
使用LoadRunner 完成测试一般分为四个步骤:
Vvitrual User Generator 创建脚本
创建脚本,选择协议
录制脚本
编辑脚本
检查修改脚本是否有误
中央控制器(Controller)来调度虚拟用户
创建Scenario,选择脚本
设置机器虚拟用户数
设置Schele
如果模拟多机测试,设置Ip Spoofer