調度器腳本
❶ 用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