±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚCSDN£¬±¾ÎĽéÉÜÁËAzkabanÊÇʲô£¬AzkabanµÄÊÊÓó¡¾°£¬ÒÔ¼°AzkabanµÄÈýÖÖÔËÐÐģʽºÍ×÷ÒµÁ÷Ö´Ðйý³ÌµÈÏà¹ØÄÚÈÝ¡£ |
|
1. AzkabanÊÇʲô£¿
AzkabanÊÇÓÉLinkedin¹«Ë¾ÍƳöµÄÒ»¸öÅúÁ¿¹¤×÷Á÷ÈÎÎñµ÷¶ÈÆ÷£¬Ö÷ÒªÓÃÓÚÔÚÒ»¸ö¹¤×÷Á÷ÄÚÒÔÒ»¸öÌØ¶¨µÄ˳ÐòÔËÐÐÒ»×鹤×÷ºÍÁ÷³Ì£¬ËüµÄÅäÖÃÊÇͨ¹ý¼òµ¥µÄkey:value¶ÔµÄ·½Ê½£¬Í¨¹ýÅäÖÃÖеÄdependencies
À´ÉèÖÃÒÀÀµ¹ØÏµ£¬Õâ¸öÒÀÀµ¹ØÏµ±ØÐëÊÇÎÞ»·µÄ£¬·ñÔò»á±»ÊÓΪÎÞЧµÄ¹¤×÷Á÷¡£AzkabanʹÓÃjobÅäÖÃÎļþ½¨Á¢ÈÎÎñÖ®¼äµÄÒÀÀµ¹ØÏµ£¬²¢Ìṩһ¸öÒ×ÓÚʹÓõÄwebÓû§½çÃæÎ¬»¤ºÍ¸ú×ÙÄãµÄ¹¤×÷Á÷¡£
ÔÚ½éÉÜAzkaban֮ǰ£¬ÎÒÃÇÏÈÀ´¿´Ò»ÏÂÏÖÓеÄÁ½¸ö¹¤×÷Á÷ÈÎÎñµ÷¶Èϵͳ¡£ÖªÃû¶È±È½Ï¸ßµÄÓ¦¸ÃÊÇApache
Oozie£¬µ«ÊÇÆäÅäÖù¤×÷Á÷µÄ¹ý³ÌÊDZàд´óÁ¿µÄXMLÅäÖ㬶øÇÒ´úÂ븴ÔӶȱȽϸߣ¬²»Ò×ÓÚ¶þ´Î¿ª·¢¡£ÁíÍâÒ»¸öÓ¦ÓÃÒ²±È½Ï¹ã·ºµÄµ÷¶ÈϵͳÊÇAirflow£¬µ«ÊÇÆä¿ª·¢ÓïÑÔÊÇPython¡£ÓÉÓÚÎÒÃÇÍŶÓÄÚ²¿Ê¹ÓÃJava×÷ΪÖ÷Á÷¿ª·¢ÓïÑÔ£¬ËùÒÔÑ¡Ð͵Äʱºò¾Í±»ÌÔ̵ôÁË¡£ÎÒÃÇÑ¡ÔñAzkabanµÄÔÒò»ùÓÚÒÔϼ¸µã£º
Ìṩ¹¦ÄÜÇåÎú£¬¼òµ¥Ò×ÓõÄWeb UI½çÃæ
ÌṩjobÅäÖÃÎļþ¿ìËÙ½¨Á¢ÈÎÎñºÍÈÎÎñÖ®¼äµÄÒÀÀµ¹ØÏµ
Ìṩģ¿é»¯ºÍ¿É²å°ÎµÄ²å¼þ»úÖÆ£¬ÔÉúÖ§³Öcommand¡¢Java¡¢Hive¡¢Pig¡¢Hadoop
»ùÓÚJava¿ª·¢£¬´úÂë½á¹¹ÇåÎú£¬Ò×ÓÚ¶þ´Î¿ª·¢
2. AzkabanµÄÊÊÓó¡¾°
ʵ¼ÊÏîÄ¿Öо³£ÓÐÕâЩ³¡¾°£ºÃ¿ÌìÓÐÒ»¸ö´óÈÎÎñ£¬Õâ¸ö´óÈÎÎñ¿ÉÒÔ·Ö³ÉA£¬B£¬C£¬DËĸöСÈÎÎñ£¬A£¬BÈÎÎñÖ®¼äûÓÐÒÀÀµ¹ØÏµ£¬CÈÎÎñÒÀÀµA£¬BÈÎÎñµÄ½á¹û£¬DÈÎÎñÒÀÀµCÈÎÎñµÄ½á¹û¡£Ò»°ãµÄ×ö·¨ÊÇ£¬¿ªÁ½¸öÖÕ¶ËͬʱִÐÐA,B£¬Á½¸ö¶¼Ö´ÐÐÍêÁËÔÙÖ´ÐÐC£¬×îºóÔÙÖ´ÐÐD¡£ÕâÑùµÄ»°£¬Õû¸öµÄÖ´Ðйý³Ì¶¼ÐèÒªÈ˹¤²Î¼Ó£¬²¢Çҵö¢×Ÿ÷ÈÎÎñµÄ½ø¶È¡£µ«ÊÇÎÒÃǵĺܶàÈÎÎñ¶¼ÊÇÔÚÉî¸ü°ëÒ¹Ö´Ðеģ¬Í¨¹ýд½Å±¾ÉèÖÃcrontabÖ´ÐС£Æäʵ£¬Õû¸ö¹ý³ÌÀàËÆÓÚÒ»¸öÓÐÏòÎÞ»·Í¼£¨DAG£©¡£Ã¿¸ö×ÓÈÎÎñÏ൱ÓÚ´óÈÎÎñÖеÄÒ»¸öÁ÷£¬ÈÎÎñµÄÆðµã¿ÉÒÔ´ÓûÓжȵĽڵ㿪ʼִÐУ¬ÈκÎûÓÐͨ·µÄ½ÚµãÖ®¼ä¿ÉÒÔͬʱִÐУ¬±ÈÈçÉÏÊöµÄA£¬B¡£×ܽáÆðÀ´µÄ»°£¬ÎÒÃÇÐèÒªµÄ¾ÍÊÇÒ»¸ö¹¤×÷Á÷µÄµ÷¶ÈÆ÷£¬¶øAzkaban¾ÍÊÇÄܽâ¾öÉÏÊöÎÊÌâµÄÒ»¸öµ÷¶ÈÆ÷¡£
3. Azkaban¼Ü¹¹
AzkabanÔÚLinkedInÉÏʵʩ£¬ÒÔ½â¾öHadoop×÷ÒµÒÀÀµÎÊÌâ¡£ÎÒÃÇÓй¤×÷ÐèÒª°´Ë³ÐòÔËÐУ¬´ÓETL¹¤×÷µ½Êý¾Ý·ÖÎö²úÆ·¡£×î³õÊǵ¥Ò»·þÎñÆ÷½â¾ö·½°¸£¬Ëæ×ŶàÄêÀ´HadoopÓû§ÊýÁ¿µÄÔö¼Ó£¬Azkaban
ÒѾ·¢Õ¹³ÉΪһ¸ö¸üÇ¿´óµÄ½â¾ö·½°¸¡£
AzkabanÓÉÈý¸ö¹Ø¼ü×é¼þ¹¹³É£º
¹ØÏµÐÍÊý¾Ý¿â£¨MySQL£©
AzkabanWebServer
AzkabanExecutorServer

3.1 ¹ØÏµÐÍÊý¾Ý¿â£¨MySQL£©
AzkabanʹÓÃÊý¾Ý¿â´æ´¢´ó²¿·Ö״̬£¬AzkabanWebServerºÍAzkabanExecutorServer¶¼ÐèÒª·ÃÎÊÊý¾Ý¿â¡£
AzkabanWebServerʹÓÃÊý¾Ý¿âµÄÔÒòÈçÏ£º
ÏîÄ¿¹ÜÀí£ºÏîÄ¿¡¢ÏîĿȨÏÞÒÔ¼°ÉÏ´«µÄÎļþ¡£
Ö´ÐÐÁ÷״̬£º¸ú×ÙÖ´ÐÐÁ÷³ÌÒÔ¼°Ö´ÐгÌÐòÕýÔÚÔËÐеÄÁ÷³Ì¡£
ÒÔǰµÄÁ÷³Ì/×÷Òµ£ºÍ¨¹ýÒÔǰµÄ×÷ÒµºÍÁ÷³ÌÖ´ÐÐÒÔ¼°·ÃÎÊÆäÈÕÖ¾Îļþ½øÐÐËÑË÷¡£
¼Æ»®³ÌÐò£º±£Áô¼Æ»®×÷ÒµµÄ״̬¡£
SLA£º±£³ÖËùÓеÄSLA¹æÔò
AzkabanExecutorServerʹÓÃÊý¾Ý¿âµÄÔÒòÈçÏ£º
·ÃÎÊÏîÄ¿£º´ÓÊý¾Ý¿â¼ìË÷ÏîÄ¿Îļþ¡£
Ö´ÐÐÁ÷³Ì/×÷Òµ£º¼ìË÷ºÍ¸üÐÂÕýÔÚÖ´ÐеÄ×÷ÒµÁ÷µÄÊý¾Ý
ÈÕÖ¾£º½«×÷ÒµºÍ¹¤×÷Á÷µÄÊä³öÈÕÖ¾´æ´¢µ½Êý¾Ý¿âÖС£
½»»¥ÒÀÀµ¹ØÏµ£ºÈç¹ûÒ»¸ö¹¤×÷Á÷ÔÚ²»Í¬µÄÖ´ÐÐÆ÷ÉÏÔËÐУ¬Ëü½«´ÓÊý¾Ý¿âÖлñȡ״̬¡£
3.2 AzkabanWebServer
AzkabanWebServerÊÇÕû¸öAzkaban¹¤×÷Á÷ϵͳµÄÖ÷Òª¹ÜÀíÕߣ¬Ëü¸ºÔðproject¹ÜÀí¡¢Óû§µÇ¼ÈÏÖ¤¡¢¶¨Ê±Ö´Ðй¤×÷Á÷¡¢¸ú×Ù¹¤×÷Á÷Ö´Ðнø¶ÈµÈһϵÁÐÈÎÎñ¡£Í¬Ê±£¬Ëü»¹ÌṩWeb·þÎñ²Ù×÷µÄ½Ó¿Ú£¬ÀûÓøýӿڣ¬Óû§¿ÉÒÔʹÓÃcurl»òÆäËûajaxµÄ·½Ê½£¬À´Ö´ÐÐazkabanµÄÏà¹Ø²Ù×÷¡£²Ù×÷°üÀ¨£ºÓû§µÇ¼¡¢´´½¨project¡¢ÉÏ´«workflow¡¢Ö´ÐÐworkflow¡¢²éѯworkflowµÄÖ´Ðнø¶È¡¢É±µôworkflowµÈһϵÁвÙ×÷£¬ÇÒÕâЩ²Ù×÷µÄ·µ»Ø½á¹û¾ùÊÇjsonµÄ¸ñʽ¡£²¢ÇÒAzkabanʹÓ÷½±ã£¬AzkabanʹÓÃÒÔ.jobΪºó׺ÃûµÄ¼üÖµÊôÐÔÎļþÀ´¶¨Ò幤×÷Á÷Öеĸ÷¸öÈÎÎñ£¬ÒÔ¼°Ê¹ÓÃdependenciesÊôÐÔÀ´¶¨Òå×÷Òµ¼äµÄÒÀÀµ¹ØÏµÁ´¡£ÕâЩ×÷ÒµÎļþºÍ¹ØÁªµÄ´úÂë×îÖÕÒÔ*.zipµÄ·½Ê½Í¨¹ýAzkaban
UIÉÏ´«µ½Web·þÎñÆ÷ÉÏ¡£
3.3 AzkabanExecutorServer
ÒÔǰ°æ±¾µÄAzkabanÔÚµ¥¸ö·þÎñÖоßÓÐAzkabanWebServerºÍAzkabanExecutorServer¹¦ÄÜ£¬Ä¿Ç°AzkabanÒѽ«AzkabanExecutorServer·ÖÀë³É¶ÀÁ¢µÄ·þÎñÆ÷£¬²ð·ÖAzkabanExecutorServerµÄÔÒòÓÐÈçϼ¸µã£º
ij¸öÈÎÎñÁ÷ʧ°Üºó£¬¿ÉÒÔ¸ü·½±ãµÄ½«ÆäÖØÐÂÖ´ÐÐ
±ãÓÚAzkabanÉý¼¶
AzkabanExecutorServerÖ÷Òª¸ºÔð¾ßÌåµÄ¹¤×÷Á÷µÄÌá½»¡¢Ö´ÐУ¬¿ÉÒÔÆô¶¯¶à¸öÖ´ÐзþÎñÆ÷£¬ËüÃÇͨ¹ýmysqlÊý¾Ý¿âÀ´Ðµ÷ÈÎÎñµÄÖ´ÐС£
4. Azkaban×÷ÒµÁ÷Ö´Ðйý³Ì
Webserver¸ù¾ÝÄÚ´æÖлº´æµÄ¸÷ExecutorµÄ×ÊԴ״̬£¨WebserverÓÐÒ»¸öÏ̻߳á±éÀú¸÷¸öactive
executor£¬È¥·¢ËÍhttpÇëÇó»ñÈ¡Æä×ÊԴ״̬ÐÅÏ¢»º´æµ½ÄÚ´æÖУ©£¬°´ÕÕÑ¡Ôñ²ßÂÔ£¨°üÀ¨executor×ÊԴ״̬¡¢×î½üÖ´ÐÐÁ÷¸öÊýµÈ£©Ñ¡ÔñÒ»¸öexecutorÏ·¢×÷ÒµÁ÷£»
executorÅжÏÊÇ·ñÉèÖÃ×÷ÒµÁ£¶È·ÖÅ䣬Èç¹ûδÉèÖÃ×÷ÒµÁ£¶È·ÖÅ䣬ÔòÔÚµ±Ç°executorÖ´ÐÐËùÓÐ×÷Òµ£»Èç¹ûÉèÖÃÁË×÷ÒµÁ£¶È·ÖÅ䣬Ôòµ±Ç°½Úµã»á³ÉΪ×÷Òµ·ÖÅäµÄ¾ö²ßÕߣ¬¼´·ÖÅä½Úµã£»
·ÖÅä½Úµã´Ózookeeper»ñÈ¡¸÷¸öexecutorµÄ×ÊԴ״̬ÐÅÏ¢£¬È»ºó¸ù¾Ý²ßÂÔÑ¡ÔñÒ»¸öexecutor·ÖÅä×÷Òµ£»
±»·ÖÅäµ½×÷ÒµµÄexecutor¼´³ÉΪִÐнڵ㣬ִÐÐ×÷Òµ£¬È»ºó¸üÐÂÊý¾Ý¿â¡£
5. Azkaban¼Ü¹¹µÄÈýÖÖÔËÐÐģʽ
ÔÚ°æ±¾3.0ÖУ¬AzkabanÌṩÁËÒÔÏÂÈýÖÖģʽ£º
solo server mode£º×î¼òµ¥µÄģʽ£¬Êý¾Ý¿âÄÚÖõÄH2Êý¾Ý¿â£¬AzkabanWebServerºÍAzkabanExecutorServer¶¼ÔÚÒ»¸ö½ø³ÌÖÐÔËÐУ¬ÈÎÎñÁ¿²»´óÏîÄ¿¿ÉÒÔ²ÉÓôËģʽ¡£
two server mode£ºÊý¾Ý¿âΪMySQL£¬¹ÜÀí·þÎñÆ÷ºÍÖ´ÐзþÎñÆ÷ÔÚ²»Í¬½ø³Ì£¬ÕâÖÖģʽÏ£¬AzkabanWebServerºÍAzkabanExecutorServer»¥²»Ó°Ïì¡£
multiple executor mode£º¸ÃģʽÏ£¬AzkabanWebServerºÍAzkabanExecutorServerÔËÐÐÔÚ²»Í¬Ö÷»úÉÏ£¬ÇÒAzkabanExecutorServer¿ÉÒÔÓжà¸ö¡£
ĿǰÎÒÃDzÉÓõÄÊÇmultiple executor mode·½Ê½£¬·Ö±ðÔÚ²»Í¬µÄÖ÷»úÉϲ¿Êð¶à¸öAzkabanExecutorServerÒÔÓ¦¶Ô¸ß²¢·¢¶¨Ê±ÈÎÎñÖ´ÐеÄÇé¿ö£¬´Ó¶ø¼õÇáµ¥¸ö·þÎñÆ÷µÄѹÁ¦¡£
WebServerºÍExecutorServerͬ²½soloÅäÖÃ
·Ö±ð±à¼build.gradle Ìí¼ÓÈç¹û´úÂë¿é
from('../azkaban-solo-server/build/resources/main/conf')
{
into 'conf'
}
from('../azkaban-solo-server/src/main/resources/commonprivate.properties')
{
into 'plugins/jobtypes'
}
from('../azkaban-solo-server/src/main/resources/log4j.properties')
{
into ''
}
from('../azkaban-solo-server/src/main/resources/commonprivate.properties')
{
into ''
} |
# Build and install distributions
./gradlew installDist |
6. AzkabanʹÓÃ
6.1 ´´½¨ÏîÄ¿
½øÈëAzkabanºó£¬Äú½«¿´µ½¡°ÏîÄ¿¡±Ò³Ãæ¡£´ËÒ³Ãæ½«ÏÔʾÄú¾ßÓжÁȡȨÏÞµÄËùÓÐÏîÄ¿µÄÁÐ±í¡£Ö»ÓÐ×éȨÏÞ»ò¾ßÓÐREAD»òADMIN½ÇÉ«µÄÏîÄ¿²»»á³öÏÖ¡£

Èç¹û¸Õ¸Õ¿ªÊ¼£¬ÏîÄ¿Ò³Ãæ¿ÉÄÜΪ¿Õ¡£µ«ÊÇ£¬Äú¿ÉÒÔͨ¹ýµ¥»÷ËùÓÐÏîÄ¿À´²é¿´ËùÓÐÏÖÓÐÏîÄ¿¡£
µ¥»÷´´½¨ÏîÄ¿½«µ¯³öÒ»¸ö¶Ô»°¿ò¡£ÊäÈëÏîÄ¿µÄΨһÏîÄ¿Ãû³ÆºÍ˵Ã÷£¬ÏîÄ¿Ãû³Æ±ØÐëÒÔÓ¢ÎÄ×Öĸ¿ªÍ·£¬Ö»Äܰüº¬Êý×Ö¡¢Ó¢ÎÄ×Öĸ¡¢Ï»®Ïß¡¢ºáÏß
¡£ÒÔºó¿ÉÒÔ¸ü¸Ä˵Ã÷£¬µ«ÏîÄ¿Ãû³Æ²»ÄÜ¡£Èç¹ûÄúûÓп´µ½´Ë°´Å¥£¬³ýÁ˾ßÓÐÊʵ±È¨ÏÞµÄÓû§Ö®Í⣬´´½¨ÐÂÏîÄ¿µÄ¿ÉÄÜÐÔÒѱ»Ëø¶¨¡£

´´½¨ÏîÄ¿ºó£¬½«ÏÔʾһ¸ö¿ÕµÄÏîÄ¿Ò³Ãæ¡£Äú½«×Ô¶¯»ñµÃ¸ÃÏîÄ¿µÄADMIN״̬¡£Í¨¹ýµ¥»÷ȨÏÞ°´Å¥Ìí¼ÓºÍɾ³ýȨÏÞ¡£

Èç¹ûÄú¾ßÓÐÊʵ±µÄȨÏÞ£¨Èç¹ûÄú´´½¨ÏîÄ¿£¬ÔòÓ¦¸Ã¸ÃȨÏÞ£©£¬Äú¿ÉÒÔ´Ó¸ÃÒ³ÃæÉ¾³ýÏîÄ¿£¬¸üÐÂÃèÊö£¬ÉÏ´«ÎļþºÍ²é¿´ÏîÄ¿ÈÕÖ¾
6.2 ÉÏ´«ÏîÄ¿
µã»÷ÉÏ´«°´Å¥¡£Äú½«¿´µ½ÒÔ϶Ի°¿ò¡£

Ñ¡ÔñÒªÉÏ´«µÄ¹¤×÷Á÷ÎļþµÄ´æµµÎļþ¡£Ä¿Ç°£¬AzkabanÖ»Ö§³Öxxx.zipÎļþ¡£zipÓ¦°üº¬xxx.jobÔËÐÐ×÷ÒµËùÐèµÄÎļþºÍÈκÎÎļþ¡£×÷ÒµÃû³ÆÔÚÏîÄ¿ÖбØÐëÊÇΨһµÄ¡£
Azkaban½«ÑéÖ¤zipµÄÄÚÈÝ£¬ÒÔÈ·±£Âú×ãÒÀÀµ¹ØÏµ£¬²¢ÇÒûÓмì²âµ½Ñ»·ÒÀÀµ¡£Èç¹û·¢ÏÖÈκÎÎÞЧµÄ¹¤×÷Á÷£¬ÉÏ´«½«Ê§°Ü¡£
ÉÏ´«¸²¸ÇÏîÄ¿ÖеÄËùÓÐÎļþ¡£ÔÚÉÏ´«ÐµÄzipÎļþºó£¬¶Ô×÷ÒµËù×öµÄÈκθü¸Ä¶¼½«±»Çå³ý¡£
6.3 ¹¤×÷Á÷ÊÓͼ
ͨ¹ýµã»÷Á÷³ÌÁ´½Ó£¬Äú¿ÉÒÔתµ½Á÷³ÌÊÓÍ¼Ò³Ãæ¡£´ÓÕâÀÄú½«¿´µ½Á÷³ÌµÄͼÐαíʾ¡£×ó²àÃæ°å°üº¬Á÷³ÌÖеÄ×÷ÒµÁÐ±í¡£
ÓÒ¼üµ¥»÷ÓÒ²àÃæ°åÖеÄ×÷Òµ»òͼÐÎÖеĽڵ㽫ÔÊÐíÄú´ò¿ªµ¥¸ö×÷Òµ¡£Äú»¹¿ÉÒÔ´Ó´ËÒ³Ãæ¼Æ»®ºÍÖ´ÐÐÁ÷³Ì¡£

µ¥»÷¡°Ö´ÐС±Ñ¡Ï½«ÏÔʾ´ËÁ÷³ÌµÄËùÓÐÖ´ÐмǼ¡£

6.4 ÏîĿȨÏÞ
´´½¨ÏîĿʱ£¬´´½¨Õß½«×Ô¶¯ÔÚÏîÄ¿ÉϸøÓèADMIN״̬¡£ÕâÔÊÐí´´½¨Õ߲鿴£¬ÉÏ´«£¬¸ü¸Ä×÷Òµ£¬ÔËÐÐÁ÷³Ì£¬É¾³ý²¢ÏòÏîÄ¿Ìí¼ÓÓû§È¨ÏÞ¡£¹ÜÀíÔ±¿ÉÒÔɾ³ýÆäËû¹ÜÀíÔ±£¬µ«²»ÄÜɾ³ý×Ô¼º¡£³ý·Ç¹ÜÀíÔ±±»¹ÜÀí½ÇÉ«µÄÓû§É¾³ý£¬·ñÔòÕâ»á×èÖ¹ÏîÄ¿³ÉΪ¹ÜÀíÔ±¡£
ȨÏÞÒ³Ãæ¿É´ÓÏîÄ¿Ò³Ãæ·ÃÎÊ¡£ÔÚȨÏÞÒ³ÃæÉÏ£¬¹ÜÀíÔ±¿ÉÒÔ½«ÆäËûÓû§£¬×é»ò´úÀíÓû§Ìí¼Óµ½ÏîÄ¿ÖС£

Ìí¼ÓÓû§È¨ÏÞΪÕâЩÓû§¸³ÓèÏîÄ¿ËùÖ¸¶¨µÄȨÏÞ¡£Í¨¹ýÈ¡ÏûÑ¡ÖÐËùÓÐȨÏÞÀ´É¾³ýÓû§È¨ÏÞ¡£
×éȨÏÞÔÊÐíÌØ¶¨×éÖеÄÿ¸öÈËÖ¸¶¨µÄȨÏÞ¡£Í¨¹ýÈ¡ÏûÑ¡ÖÐËùÓÐ×éȨÏÞÀ´É¾³ý×éȨÏÞ¡£
Èç¹û´úÀíÓû§ÒÑ´ò¿ª£¬Ôò´úÀíÓû§ÔÊÐíÏîÄ¿¹¤×÷Á÷×÷ΪÕâЩÓû§ÔËÐС£ÕâÓÐÖúÓÚËø¶¨ÄÄЩÎÞÍ·ÕÊ»§×÷Òµ¿ÉÒÔ´úÀí¡£Ìí¼Óºó£¬µã»÷¡°É¾³ý¡±°´Å¥¼´¿É½«Æäɾ³ý¡£
ÿ¸öÓû§¶¼Í¨¹ýUserManager½øÐÐÑéÖ¤£¬ÒÔ·ÀÖ¹Ìí¼ÓÎÞЧÓû§¡£×éºÍ´úÀíÓû§Ò²½«¼ì²éÒÔÈ·±£ËüÃÇÊÇÓÐЧµÄ£¬²¢²é¿´ÊÇ·ñÔÊÐí¹ÜÀíÔ±½«ÆäÌí¼Óµ½ÏîÄ¿ÖС£
¿ÉÒÔΪÓû§ºÍ×éÉèÖÃÒÔÏÂȨÏÞ£º

6.5 Ö´ÐÐÁ÷³ÌÊÓͼ
´ÓÁ÷³ÌÊÓÍ¼Ãæ°åÖУ¬Äú¿ÉÒÔÓÒ¼üµ¥»÷ͼÐβ¢½ûÓûòÆôÓÃ×÷Òµ¡£ÔÚÖ´ÐÐÆÚ¼ä½«½ûÓòÐÁô×÷Òµ£¬¾ÍÏñËüÃǵÄÒÀÀµ¹ØÏµÒ»Ñù¡£²ÐÕÏ×÷Òµ½«ÏÔʾ°ë͸Ã÷¡£

֪ͨѡÏî ֪ͨѡÏîÔÊÐíÓû§¸ü¸ÄÁ÷³ÌµÄ³É¹¦»òʧ°Ü֪ͨÐÐΪ¡£
֪ͨʧ°Ü
µÚÒ»¸ö¹ÊÕÏ - ¼ì²âµ½µÚÒ»¸ö¹ÊÕϺó·¢Ë͹ÊÕϵç×ÓÓʼþ¡£
Á÷³ÌÍê³É - Èç¹ûÁ÷³ÌµÄ×÷ҵʧ°Ü£¬Ëü½«ÔÚÁ÷³ÌÖеÄËùÓÐ×÷ÒµÍê³Éºó·¢Ë͹ÊÕϵç×ÓÓʼþ¡£
µç×ÓÓʼþ¸²¸Ç
Azkaban½«Ê¹ÓÃÁ÷ÖÐ×îÖÕ×÷ÒµÖÐÉèÖõÄĬÈÏ֪ͨµç×ÓÓʼþ¡£Èç¹û±»¸²¸Ç£¬Óû§¿ÉÒÔ¸ü¸Ä·¢ËÍʧ°Ü»ò³É¹¦·¢Ë͵ç×ÓÓʼþµÄµç×ÓÓʼþµØÖ·¡£Áбí¿ÉÒÔÓöººÅ£¬¿Õ¸ñ»ò·ÖºÅ·Ö¸ô¡£

¹ÊÕÏÑ¡Ïî
µ±Á÷³ÌÖеÄ×÷ҵʧ°Üʱ£¬Äú¿ÉÒÔ¿ØÖÆÆäÓàµÄÁ÷³ÌÈçºÎ³É¹¦¡£
Íê³Éµ±Ç°ÔËÐн«Íê³Éµ±Ç°ÔËÐеÄ×÷Òµ£¬µ«²»»áÆô¶¯ÐÂ×÷Òµ¡£FAILED FINISHINGÒ»µ©Íê³É£¬Á÷³Ì½«±»ÖÃÓÚ״̬²¢ÉèÖÃΪʧ°Ü¡£
È¡ÏûÈ«²¿½«Á¢¼´ÖÕÖ¹ËùÓÐÕýÔÚÔËÐеÄ×÷Òµ£¬²¢½«Ö´ÐÐÁ÷³ÌµÄ״̬ÉèÖÃΪFAILED¡£
Íê³ÉËùÓпÉÄÜ»áÔÚÁ÷³ÌÖмÌÐøÖ´ÐÐ×÷Òµ£¬Ö»ÒªÆäÒÀÀµÐԵõ½Âú×ã¼´¿É¡£FAILED
FINISHINGÒ»µ©Íê³É£¬Á÷³Ì½«±»ÖÃÓÚ״̬²¢ÉèÖÃΪʧ°Ü¡£

²¢·¢Ñ¡Ïî
Èç¹ûÁ÷ͬʱִÐÐʱµ÷ÓÃÁ÷Ö´ÐУ¬Ôò¿ÉÒÔÉèÖöà¸öÑ¡Ïî¡£
Èç¹û¡° Ö´ÐС±Ñ¡ÏîÒѾÔËÐУ¬Ôò²»»áÔËÐиÃÁ÷¡£
ÔËÐв¢·¢Ñ¡ÏÔËÐÐÁ÷³Ì£¬ÎÞÂÛËüÊÇ·ñÔËÐС£Ö´Ðв»Í¬µÄ¹¤×÷Ŀ¼¡£
¹ÜµÀÒÔÐÂÖ´Ðз½Ê½²»»á³¬¹ý²¢·¢Ö´Ðеķ½Ê½ÔËÐÐÁ÷³Ì¡£
¼¶±ð1£ºÖ´ÐÐ×÷ÒµAµÄ¿é£¬Ö±µ½ÉÏÒ»¸öÁ÷³ÌµÄ×÷ÒµAÍê³É¡£
¼¶±ð2£ºÖ´ÐÐ×÷ÒµAµÄ¿é£¬Ö±µ½ÉÏÒ»¸öÁ÷³ÌµÄ×÷ÒµAµÄº¢×ÓÒѾÍê³É¡£Èç¹ûÄúÐèÒªÔÚÒÑÖ´ÐÐÁ÷³ÌºóÃæÔËÐÐÁ÷³Ì£¬Õ⽫·Ç³£ÓÐÓá£

¹¤×÷Á÷Ñ¡Ïî
ÔÊÐíÓû§¸²¸Ç¹¤×÷Á÷²ÎÊý¡£¹¤×÷Á÷²ÎÊý¸²¸Ç×÷ÒµµÄÈ«¾ÖÊôÐÔ£¬¶ø²»ÊÇ×÷Òµ±¾ÉíµÄÊôÐÔ

6.6 Ö´ÐÐ
ºóÖ´ÐÐÁ÷³Ì£¬Ä㽫Ìá½»Ö´ÐÐÁ÷³ÌÒ³Ãæ¡£»òÕߣ¬Äú¿ÉÒÔ´Ó¡° Á÷³ÌÊÓͼ¡±Ò³ÃæµÄ¡°Ö´ÐС±Ñ¡Ï£¬¡°ÀúÊ·¼Ç¼¡±Ò³Ãæ»ò¡°Ö´ÐС±Ò³Ãæ·ÃÎÊÕâЩÁ÷³Ì¡£
´ËÒ³ÃæÀàËÆÓÚ¡°Á÷³ÌÊÓͼ¡±Ò³Ã棬µ«ÏÔʾÔËÐÐ×÷ÒµµÄ״̬¡£

Ñ¡Ôñ¹¤×÷ÁÐ±í½«¸ø³öÖ´Ðй¤×÷µÄʱ¼ä±í¡£Äú¿ÉÒÔÖ±½Ó´Ó´ËÁбíÖзÃÎÊ×÷ÒµºÍ×÷ÒµÈÕÖ¾¡£

Ö»ÒªÖ´ÐÐûÓÐÍê³É£¬¸ÃÒ³Ãæ½«×Ô¶¯¸üС£
Äú¿ÉÒÔÔÚÖ´ÐÐÁ÷³ÌÉÏÖ´ÐеÄһЩѡÏî°üÀ¨£º
È¡Ïû - ɱËÀËùÓÐÕýÔÚÔËÐеÄ×÷Òµ£¬²¢Á¢¼´Ê§°Ü¡£Á÷¶¯×´Ì¬½«±»É±ËÀ¡£
ÔÝÍ£ - ×èÖ¹ÐÂ×÷ÒµÔËÐС£Ä¿Ç°ÔËÐеÄ×÷ÒµÕÕ³£½øÐС£
»Ö¸´ - »Ö¸´ÔÝÍ£Ö´ÐС£
ÖØÊÔʧ°Ü - ½öµ±Á÷³Ì´¦ÓÚFAILED FINISHING״̬ʱ¿ÉÓᣵ±Á÷³ÌÈÔÈ»»î¶¯Ê±£¬ÖØÊÔ½«ÖØÐÂÆô¶¯ËùÓÐFAILED×÷Òµ¡£¡°³¢ÊÔ¡±½«ÏÔʾÔÚ¡°×÷ÒµÁÐ±í¡±Ò³ÃæÖС£
×¼±¸Ö´ÐÐ - ½öÔÚÍê³ÉµÄÁ÷³ÌÖпÉÓã¬ÎÞÂ۳ɹ¦»òʧ°Ü¡£Õ⽫×Ô¶¯½ûÓóɹ¦Íê³ÉµÄ×÷Òµ¡£
6.7 Ö´ÐÐÒ³Ãæ
µ¥»÷±êÌâÖеġ°Ö´ÐС±Ñ¡Ï½«ÏÔʾ¡°Ö´ÐС±Ò³Ãæ¡£´ËÒ³Ãæ½«ÏÔʾµ±Ç°ÔËÐеÄÖ´ÐÐÒÔ¼°×î½üÍê³ÉµÄÁ÷³Ì¡£

6.8 ÀúÊ·Ò³
µ±Ç°ÕýÔÚÖ´ÐеÄÁ÷³ÌÒÔ¼°Íê³ÉµÄÖ´ÐгÌÐò½«ÏÔʾÔÚ¡°ÀúÊ·¼Ç¼¡±Ò³ÃæÖС£ÌṩËÑË÷Ñ¡ÏîÀ´²éÕÒÄúÒª²éÕÒµÄÖ´ÐС£»òÕߣ¬Äú¿ÉÒÔÔÚ¡°
Á÷ÊÓͼִÐС±Ñ¡ÏÉϲ鿴ÏÈǰִÐеÄÁ÷³Ì¡£

6.9 ¼Æ»®Á÷³Ì
´ÓÓÃÓÚÖ´ÐÐÁ÷³ÌµÄͬһ¸öÃæ°åÖУ¬Á÷³Ì¿ÉÒÔͨ¹ýµã»÷* Schedule *°´Å¥½øÐÐÅŶ¨¡£

½«ÎªÔ¤¶¨Á÷±£ÁôÈκÎÁ÷Ñ¡Ï¡£ÀýÈ磬Èç¹û×÷Òµ±»½ûÓã¬ÔòÔ¤¶¨Á÷³ÌµÄ×÷ÒµÒ²½«±»½ûÓá£
ʹÓÃAzkaban 3.3ÖеÄеÄÁé»îµ÷¶È¹¦ÄÜ£¬Óû§¿ÉÒÔÔÚQuartzÓï·¨Ö®ºó¶¨ÒåÒ»¸öcron×÷Òµ¡£ÓëQuartz»òcron²»Í¬µÄÒ»¸öÖØÒª±ä»¯ÊÇAzkaban×î¶àÒÔ×îСµÄÁ£¶ÈÔË×÷¡£Òò´Ë£¬UIÖеĵڶþ¸ö×ֶα»±ê¼ÇΪ¾²Ì¬¡°0¡±¡£¸ÃÁé»îµÄʱ¼ä±í°Ù¿Æ½âÊÍÁËϸ½ÚÈçºÎʹÓá£
°²Åźó£¬ËüÓ¦¸Ã³öÏÖÔڼƻ®Ò³ÃæÉÏ£¬Äú¿ÉÒÔÔÚÆäÖÐɾ³ý¼Æ»®×÷Òµ»òÉèÖÃSLAÑ¡Ïî¡£

6.10 SLA
ÒªÌí¼ÓSLA֪ͨ»òÇÀÕ¼£¬Çëµ¥»÷SLA°´Å¥¡£´ÓÕâÀïÄú¿ÉÒÔÉèÖÃSLA¾¯±¨µç×ÓÓʼþ¡£¹æÔò¿ÉÒÔÌí¼Ó²¢Ó¦ÓÃÓÚµ¥¸ö×÷Òµ»òÁ÷³Ì±¾Éí¡£Èç¹û³¬¹ý³ÖÐøÊ±¼äãÐÖµ£¬Ôò¿ÉÒÔÉèÖþ¯±¨µç×ÓÓʼþ£¬·ñÔòÁ÷³Ì¿ÉÄܻᱻ×Ô¶¯É±ËÀ¡£

¹¤×÷Ò³Ãæ ¹¤×÷×é³ÉÒ»¸öÁ÷³ÌµÄ¸÷¸öÈÎÎñ¡£Òª·ÃÎÊ×÷ÒµÒ³Ãæ£¬Äú¿ÉÒÔÓÒ¼üµ¥»÷Á÷³ÌÊÓͼ£¬Ö´ÐÐÁ÷³ÌÊÓͼ»òÏîÄ¿Ò³ÃæÖеÄ×÷Òµ¡£
6.11 ÈÎÎñÒ³Ãæ
ÔÚ´ËÒ³ÃæÖУ¬Äú¿ÉÒԲ鿴×÷ÒµµÄÒÀÀµ¹ØÏµºÍÒÀÀµ¹ØÏµÒÔ¼°×÷Òµ½«Ê¹ÓõÄÈ«¾ÖÊôÐÔ¡£

6.12 ÈÎÎñ±à¼
µ¥»÷×÷Òµ±à¼½«ÔÊÐíÄú±à¼³ýÌØ¶¨±£Áô²ÎÊý£¨ÀýÈçtypeºÍ£©ÒÔÍâµÄËùÓÐ×÷ÒµÊôÐÔdependencies¡£Ö»Óе±×÷ÒµÉÐδ¿ªÊ¼ÔËÐÐʱ£¬¶Ô²ÎÊýµÄ¸ü¸Ä²Å»áÓ°ÏìÖ´ÐÐÁ÷³Ì¡£ÕâЩ¸²¸Ç×÷ÒµÊôÐÔ½«±»ÏÂÒ»¸öÏîÄ¿ÉÏ´«¸²¸Ç¡£

6.13 ¹¤×÷ÀúÊ·
Èκι¤×÷µÄÖØÊÔ½«ÏÔʾΪexecutionid.attemptÊý×Ö¡£

6.14 ¹¤×÷ÈÕÖ¾
×÷ÒµÈÕÖ¾´æ´¢ÔÚÊý¾Ý¿âÖС£ËüÃǰüº¬ËùÓÐstdoutºÍstderr×÷ÒµµÄÊä³ö¡£

¹¤×÷×ܽá
¸Ã×÷ҵժҪѡÏ°üº¬ÔÚ×÷ÒµÈÕÖ¾ÐÅÏ¢µÄÕªÒª¡£Õâ°üÀ¨£º
×÷ÒµÀàÐÍ - ×÷ÒµµÄ×÷ÒµÀàÐÍ
ÃüÁîÕªÒª - Æô¶¯×÷Òµ½ø³ÌµÄÃüÁÒÔ¼°µ¥¶ÀÏÔʾµÄÀà·¾¶ºÍÄÚ´æÉèÖõÈ×Ö¶Î
Pig / Hive×÷ÒµÕªÒª - PigºÍHive×÷ÒµµÄÌØ¶¨¶¨ÖÆ
µØÍ¼ËõС×÷Òµ - ½«Map-Reduce×÷ÒµµÄ×÷ÒµIDÁбíÓëÒÑÆô¶¯µÄ×÷ÒµÁ´½Óµ½Æä×÷Òµ¸ú×ÙÒ³Ãæ

7. Azkaban Job
7.1 ´®Ðж¨Ê±ÈÎÎñ¹¤×÷Á÷
zipĿ¼½á¹¹£º
<code style="font-family:Menlo,
'Liberation Mono', Consolas, 'DejaVu Sans Mono',
'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida
console', monospace;padding:0px;color:inherit;background-color:transparent;white-space:pre;margin-top:0px;">|--start.job
|--finish.job
</code> |
start.job
type=command
command=echo "this is start.job" |
finish.job
type=command
dependencies=start
command=echo "this is finish.job"
successEmail=test@example.com
failureEmail=test@example.com |
7.2 ²¢Ðж¨Ê±ÈÎÎñ¹¤×÷Á÷
zipĿ¼½á¹¹£º
<code style="font-family:Menlo,
'Liberation Mono', Consolas, 'DejaVu Sans Mono',
'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida
console', monospace;padding:0px;color:inherit;background-color:transparent;white-space:pre;margin-top:0px;">|--start.job
|--step1.job
|--step2.job
|--step3.job
</code> |
step1.job
type=command
dependencies=start
command=echo "this is step1.job" |
step2.job
type=command
dependencies=start
command=echo "this is step2.job" |
step3.job
type=command
dependencies=step1,step2
command=echo "this is step3.job" |
7.3 java¶¨Ê±ÈÎÎñ¹¤×÷Á÷
zipĿ¼½á¹¹£º
<code style="font-family:Menlo,
'Liberation Mono', Consolas, 'DejaVu Sans Mono',
'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida
console', monospace;padding:0px;color:inherit;background-color:transparent;white-space:pre;margin-top:0px;">|--lib
| |--AzkabanJob.jar
|--azkabanJava.job
</code> |
AzkabanJob.java
package com.example;
public class AzkabanJob {
public void run() {
// ¸ù¾ÝÐèÇó±àд¾ßÌå´úÂë
}
public static void main(String[] args) {
AzkabanJob azkabanJob = new AzkabanJob();
azkabanJob.run();
}
} |
azkabanJava.job
<code style="font-family:Menlo,
'Liberation Mono', Consolas, 'DejaVu Sans Mono',
'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida
console', monospace;padding:0px;color:inherit;background-color:transparent;white-space:pre;margin-top:0px;">#
azkabanJob.job
type=javaprocess
java.class=com.example.AzkabanJob
classpath=lib/*
</code> |
7.4 ǶÈëʽ¶¨Ê±ÈÎÎñ¹¤×÷Á÷
Ò²¿ÉÒÔ½«¹¤×÷Á÷×÷ΪÆäËû¹¤×÷Á÷³ÌÖеĽڵã°üº¬ÎªÇ¶ÈëÁ÷¡£Òª´´½¨Ò»¸öǶÈëʽÁ÷£¬Ö»Ðè´´½¨Ò»¸ö.jobÎļþ£¬type=flow²¢½«Æäflow.nameÉèÖÃΪǶÈëʽ¹¤×÷Á÷µÄÃû³Æ¡£²¢ÇÒǶÈëʽµÄ¹¤×÷Á÷ÊÇ¿ÉÒÔµ¥¶ÀÅäÖö¨Ê±ÈÎÎñµÄ£¬ÀýÈ磺
zipĿ¼½á¹¹£º
<code style="font-family:Menlo,
'Liberation Mono', Consolas, 'DejaVu Sans Mono',
'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida
console', monospace;padding:0px;color:inherit;background-color:transparent;white-space:pre;margin-top:0px;">|--bin
| |--flow1.sh
| |--flow2.sh
| |--flow3.sh
|
|--start.job
|--step1.job
|--step2.job
|--flow1.job
|--flow2.job
|--flow3.job
|--subflow1.job
|--subflow2.job
</code>
|
subflow1.job
type=flow
flow.name=flow1
dependencies=start |
subflow2.job
type=flow
flow.name=flow2
dependencies=start |
flow1.job
type=command
dependencies=step1
command=sh ./bin/flow1.sh |
flow2.job
type=command
dependencies=step2
command=sh ./bin/flow2.sh |
flow3.job
type=command
dependencies=subflow1,subflow2
command=sh ./bin/flow3.sh |
×¢Ò⣺ÕâÀïµÄbinĿ¼ºÍËùÓеÄ.jobλÓÚͬ¼¶Ä¿Â¼Ï£¬./bin/flow.shÆäÖеÄ.±íʾµ±Ç°Ä¿Â¼¡£
7.5 È«¾Ö±äÁ¿
ºó´ÁÃûΪ.propertiesµÄÎļþ½«»á×÷Ϊ²ÎÊýÎļþ¼ÓÔØ£¬²¢ÇÒÔÚflowÖÐÿ¸öjob¹²Ïí£¬ÊôÐÔÎļþͨ¹ýĿ¼µÄ·Ö²ã½á¹¹¼Ì³Ð
zipĿ¼½á¹¹
<code style="font-family:Menlo,
'Liberation Mono', Consolas, 'DejaVu Sans Mono',
'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida
console', monospace;padding:0px;color:inherit;background-color:transparent;white-space:pre;margin-top:0px;">|--common.properties
|--bin
| |--start.sh
| |--finish.sh
|--start.job
|--finish.job
|--flow
| |flow.properties
| |step1
</code>
|
common.properties
start.nofity.email=start@example.com
finish.nofity.email=finish@example.com
step.nofity.email=step@example.com |
start.job
type=command
command=sh ./bin/start.sh
notify.emails=${start.nofity.email} |
finish.job
type=command
command=sh ./bin/finish.sh
dependencies=start
notify.emails=${finish.nofity.email} |
flow.properties
success.email=success@example.com |
step.job
type=command
command=echo "this is step"
notify.emails=${step.nofity.email}
success.email=${success.email} |
common.propertiesÊÇÈ«¾ÖÊôÐÔ£¬½«»á±»start.job¡¢finish.jobÒÔ¼°flowϵÄstep.jobʹÓ㬵«ÊÇstart.jobºÍfinish.job²»Äܼ̳Ðflow
.propertiesµÄÊôÐÔ£¬ÒòΪËûÊÇÔÚÆäϲ㣬¶østep.jobÊÇ¿ÉÒԼ̳Ðflow.propertiesµÄ¡£
×¢Ò⣺xxx.propertiesÖÐÉùÃ÷µÄÊôÐÔÃû²»Äܰüº¬¿Õ¸ñ£¬±ÈÈç${success email}
7.6 Hive Job
hive.job
type=hive
user.to.proxy=Azkaban
azk.hive.action=execute.query
hive.query.01=drop table words;
hive.query.02=create table words (freq int, word
string) row format delimited fields terminated
by '\t' stored as textfile;
hive.query.03=describe words;
hive.query.04=load data local inpath "res/input"
into table words;
hive.query.05=select * from words limit 10;
hive.query.06=select freq, count(1) as f2 from
words group by freq sort by f2 desc limit 10;
|
7.7 Hadoop Job
zipĿ¼½á¹¹£º
<code style="font-family:Menlo,
'Liberation Mono', Consolas, 'DejaVu Sans Mono',
'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida
console', monospace;padding:0px;color:inherit;background-color:transparent;white-space:pre;margin-top:0px;">|--system.properties
|--pig.job
|--hadoop.job
</code>
|
system.properties
user.to.proxy=Azkaban
HDFSRoot=/tmp
param.inDataLocal=res/rpfarewell
param.inData=${HDFSRoot}/${user.to.proxy} /wordcountjavain
param.outData=${HDFSRoot}/${user.to.proxy} /wordcountjavaout
|
pig.job
type=pig
pig.script=src/wordcountpig.pig
user.to.proxy=azkabanHDFS
Root=/tmp
param.inDataLocal=res/rpfarewell
param.inData=${HDFSRoot}/${user.to.proxy} /wordcountpigin
param.outData=${HDFSRoot}/${user.to.proxy} /wordcountpigout
|
hadoop.job
type=hadoopJava
job.class=azkaban.jobtype.examples.java.WordCount
classpath=./lib/*,${hadoop.home}/lib/*
main.args=${param.inData} ${param.outData}
force.output.overwrite=true
input.path=${param.inData}
output.path=${param.outData}
dependencies=pig
|
8. Azkaban Job×î¼Ñʵ¼ù
ÒÑÕýʽʹÓÃAzkabanÖ´Ðж¨Ê±ÈÎÎñ£¬ÏÂÃæ½«ÒÔtalentÏîÄ¿×éµÄ¶¨Ê±ÈÎÎñ×÷Ϊ×î¼Ñʵ¼ù´úÂë½øÐн²½â£¬
Ŀ¼½á¹¹£º
<code style="font-family:Menlo,
'Liberation Mono', Consolas, 'DejaVu Sans Mono',
'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida
console', monospace;padding:0px;color:inherit;background-color:transparent;white-space:pre;margin-top:0px;">meritpay
|
|--conf
| |--application.properties
| |--bootstrap.yml
| |--logback.xml
| |--mybatis-config.xml
|
|--lib
| |--talent-base-0.0.1-SNAPSHOT.jar
| |--talent-meritpay-core-0.0.1-SNAPSHOT.jar
| |--talent-meritpay-job-0.0.1-SNAPSHOT.jar
| |--xxx.jar
|
|--ComputeTask.job
|--DataCheck.job
|--ExecutePlan.job
</code>
|
ExecutePlan.job
type=command
command=java -Xms64m -Xmx1024m -XX:MaxPermSize=64M
-Dazkaban.job.id=ExecPlan -jar talent-meritpay-job-0.0.1-SNAPSHOT.jar |
ComputeTask.job
type=command
command=java -Xms64m -Xmx1024m -XX:MaxPermSize=64M
-Dazkaban.job.id=ExecTask -jar talent-meritpay-job-0.0.1-SNAPSHOT.jar
dependencies=ExecutePlan
|
DataCheck.job
type=command
command=java -Xms64m -Xmx1024m -XX:MaxPermSize=64M
-Dazkaban.job.id=DataCheck -jar talent-meritpay-job-0.0.1-SNAPSHOT.jar
dependencies=ComputeTask
|
9. Azkaban Ajax API
azkabanÒ²ÌṩÁËAPI½Ó¿ÚÀ´Ê¹Óã¬ÕâÑù¿ÉÒÔ»ùÓÚazkabanʵÏÖ×Ô¼ºµÄ¹ÜÀí·½Ê½£¬ÕâЩ½Ó¿ÚÊÇͨ¹ýHTTPSµÄ·½Ê½Óëweb·þÎñÆ÷½øÐÐͨÐŵģ¬ÒòΪÔÚazkabanÖÐÓÐÓû§ºÍȨÏ޵ĸÅÄËùÒÔÔÚµ÷ÓÃAPI֮ǰÐèÒªµÇ¼£¬µÇ¼³É¹¦Ö®ºó»á·µ»ØÓû§Ò»¸ösession
id£¬Ö®ºóËùÓеIJÙ×÷¶¼ÐèҪЯ´øÕâ¸öidÒÔÅжÏÓû§ÊÇ·ñÓÐȨÏÞ¡£Èç¹ûsession idÎÞЧ£¬ÄÇôµ÷ÓÃAPI»á·µ»Ø"error"
: "session"µÄÐÅÏ¢£¬Èç¹û²»Ð¯´øsession.id²ÎÊý£¬»á·µ»ØµÇ½½çÃæµÄhtmlÎļþÄÚÈÝ£¨ÓÐЩsession
idµÄ·ÃÎÊÒ²»á·µ»ØÕâÑùµÄÄÚÈÝ£©¡£azkabanÌṩµÄAPI°üÀ¨£º¾ßÌåÇë²ÎÕÕ¹Ù·½Îĵµ£ºhttp://azkaban.github.io/azkaban/docs/latest/#ajax-api
9.1 Authenticate
Óû§µÇ¼²Ù×÷£¬ÐèҪЯ´øÓû§ÃûºÍÃÜÂ룬Èç¹û³É¹¦µÇ¼Ôò·µ»ØÒ»¸ösession idÓÃÓÚÖ®ºóµÄÇëÇó¡£
ÇëÇó²ÎÊý£º

ʵÀý´úÂ룺
<code style="font-family:Menlo,
'Liberation Mono', Consolas, 'DejaVu Sans Mono',
'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida
console', monospace;padding:0px;color:inherit;background-color:transparent;white-space:pre;margin-top:0px;">curl
-k -X POST --data "action=login&username=azkaban&password=azkaban"
https://localhost:8443
</code>
|
·µ»Ø½á¹û£º
{ "status" : "success",
"session.id" : "c001aba5-a90f-4daf-8f11-62330d034c0a"
} |
9.2 Create a Project
´´½¨Ò»¸öеÄproject£¬ÕâÐèÒªÔÚÈκιØÓÚÕâ¸öproject²Ù×÷֮ǰ½øÐУ¬ÐèÒªÊäÈëprojectµÄname×÷ΪÕâ¸öprojectµÄΨһ±êʾ£¬»¹ÐèÒª°üº¬Õâ¸öprojectµÄÃèÊöÐÅÏ¢£¬ÆäʵºÍÔÚweb
Ò³ÃæÉÏ´´½¨projectµÄÊäÈëÒ»Ñù¡£
ÇëÇó²ÎÊý£º

ʵÀý£º
<code style="font-family:Menlo,
'Liberation Mono', Consolas, 'DejaVu Sans Mono',
'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida
console', monospace;padding:0px;color:inherit;background-color:transparent;white-space:pre;margin-top:0px;">curl
-k -X POST --data "session.id=c001aba5-a90f-4daf-8f11-62330d034c0a&name=MyProject&description=test"
https://localhost:8443/manager?action=create
</code>
|
·µ»Ø½á¹û£º
{ "status":"success",
"path":"manager?project=MyProject",
"action":"redirect"
} |
9.3 Delete a Project
ɾ³ýÒ»¸öÒѾ´æÔÚµÄproject£¬¸ÃÇëÇóûÓлظ´ÐÅÏ¢£¬ÐèÒªÊäÈëprojectµÄ±êʶ¡£
ÇëÇó²ÎÊý£º

ʵÀý£º
<code style="font-family:Menlo,
'Liberation Mono', Consolas, 'DejaVu Sans Mono',
'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida
console', monospace;padding:0px;color:inherit;background-color:transparent;white-space:pre;margin-top:0px;">curl
-k -X POST --data "session.id=c001aba5-a90f-4daf-8f11-62330d034c0a&delete=true&project=azkaban"
https://localhost:8443/manager
</code>
|
9.4 Upload a Project Zip
ÉÏ´«Ò»¸özipÎļþµ½Ò»¸öproject£¬Ò»°ãÔÚ´´½¨Ò»¸öprojectÍê³ÉÖ®ºó£¬Ö®ºóµÄÉÏ´«½«¸²¸ÇÒÔǰÉÏ´«µÄÄÚÈÝ¡£
ÇëÇó²ÎÊý£º

file ÏîÄ¿zipÎļþ£¬ÉÏ´«ÀàÐͱØÐëÊÇapplication/zip»òapplication/x-zip-compressed
ʵÀý£º
<code style="font-family:Menlo,
'Liberation Mono', Consolas, 'DejaVu Sans Mono',
'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida
console', monospace;padding:0px;color:inherit;background-color:transparent;white-space:pre;margin-top:0px;">curl
-k -i -H "Content-Type: multipart/mixed"
-X POST --form 'session.id=c001aba5-a90f-4daf-8f11-62330d034c0a'
--form 'ajax=upload' --form 'file=@myproject.zip;type=application/zip'
--form 'project=MyProject;type/plain' https://localhost:8443/manager
</code>
|
·µ»Ø½á¹û£º
{ "error"
: "Installation Failed.\nError unzipping
file.", "projectId" : "192",
"version" : "1"
}
|
9.5 Fetch Flows of a Project
»ñȡһ¸öprojectϵÄËùÓÐflowÐÅÏ¢£¬ÊäÈëÐèÒªÖ¸¶¨projectµÄ±êʶ£¬Ò»¸öprojectÏÂÃæ¿ÉÄÜ´æÔÚ¶à¸öflow£¬Êä³öµÄflowÖ»°üº¬flowId±êʶÿһ¸öflow¡£
ÇëÇó²ÎÊý£º

ʵÀý£º
<code style="font-family:Menlo,
'Liberation Mono', Consolas, 'DejaVu Sans Mono',
'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida
console', monospace;padding:0px;color:inherit;background-color:transparent;white-space:pre;margin-top:0px;">curl
-k --get --data "session.id=c001aba5-a90f-4daf-8f11-62330d034c0a&ajax=fetchprojectflows&project=MyProject"
https://localhost:8443/manager
</code>
|
·µ»Ø½á¹û£º
{ "project"
: "MyProject", "projectId"
: 192, "flows" : [ { "flowId"
: "test"
}, { "flowId" : "test2"
} ]
}
|
9.6 Fetch Jobs of a Flow
»ñȡһ¸öflowÏÂËùÓÐjobµÄÐÅÏ¢£¬ÒòΪÔÚAPI¶Ëÿ¸öÃüÁî¶¼ÊǶÀÁ¢µÄ£¬ËùÒÔÕâÀïÐèÒªÊäÈëprojectµÄ±êʶºÍflowµÄ±êʶ£¬Êä³ö°üº¬Ã¿Ò»¸öjobµÄÐÅÏ¢£¬°üÀ¨jobµÄ±êʶ£¨id£©¡¢job
ÀàÐÍÒÔ¼°Õâ¸öjobÖ±½ÓÒÔÀ´µÄjob¡£
ÇëÇó²ÎÊý£º

ʵÀý£º
<code style="font-family:Menlo,
'Liberation Mono', Consolas, 'DejaVu Sans Mono',
'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida
console', monospace;padding:0px;color:inherit;background-color:transparent;white-space:pre;margin-top:0px;"
>curl -k --get --data "session.id=c001aba5-a90f-4daf-8f11-62330d034c0a&ajax=fetchflowgraph&project
=MyProject&flow=test"
https://localhost:8443/manager
</code>
|
·µ»Ø½á¹û£º
{ "project"
: "MyProject", "nodes"
: [ { "id" : "test-final",
"type" : "command", "in"
: [ "test-job-3" ]
}, { "id" : "test-job-start",
"type" : "java"
}, { "id" : "test-job-3",
"type" : "java", "in"
: [ "test-job-2" ]
}, { "id" : "test-job-2",
"type" : "java", "in"
: [ "test-job-start" ]
} ], "flow" : "test",
"projectId" : 192
} |
9.7 Fetch Executions of a Flow
»ñÈ¡flowµÄÖ´ÐÐÇé¿ö£¬ÐèÒªÖÆ¶¨Ìض¨µÄprojectºÍflow£¬Õâ¸ö½Ó¿Ú¿ÉÒÔ·ÖÒ³·µ»Ø£¬ËùÒÔÐèÒªÖÆ¶¨startÖ¸¶¨¿ªÊ¼µÄindexºÍlengthÖ¸¶¨·µ»ØµÄ¸öÊý£¬ÒòΪÿһ¸öflow
¶¼¿ÉÒÔµ¥¶ÀµÄ»òÕß×÷ΪÆäËûflowµÄ×ÓflowÖ´ÐУ¬ÕâÀï·µ»Ø¸ÃflowÖ¸¶¨Çø¼äÄÚµÄÿһ´ÎÖ´ÐеÄÐÅÏ¢¡£Ã¿Ò»¸öÖ´ÐÐÐÅÏ¢°üÀ¨Æðʼʱ¼ä¡¢Ìá½»Ö´ÐеÄÓû§¡¢Ö´ÐеÄ״̬¡¢Ìύʱ¼ä¡¢Õâ´ÎÖ´ÐÐÔÚÈ«¾ÖµÄid£¨µÝÔöµÄexecid£©£¬projectid¡¢½áÊøÊ±¼äºÍflowId¡£
ÇëÇó²ÎÊý£º

ʵÀý£º
<code style="font-family:Menlo,
'Liberation Mono', Consolas, 'DejaVu Sans Mono',
'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida
console', monospace;padding:0px;color:inherit;background-color:transparent;white-space:pre;margin-top:0px;
">curl -k --get --data "session.id=c001aba5-a90f-4daf-8f11-
62330d034c0a&ajax=fetchFlowExecutions&project
=MyProject&flow
=test&start=0&length=1" https://localhost:8443/manager
</code>
|
·µ»Ø½á¹û£º
{ "executions"
: [ { "startTime" : 1407779928865,
"submitUser" : "1", "status"
: "FAILED", "submitTime"
: 1407779928829, "execId" : 306,
"projectId" : 192, "endTime"
: 1407779950602, "flowId" : "test"
}], "total" : 16, "project"
: "MyProject", "length"
: 1, "from" : 0, "flow"
: "test", "projectId"
: 192
} |
9.8 Fetch Running Executions of a Flow
»ñÈ¡µ±Ç°ÕýÔÚÖ´ÐеÄflowµÄÖ´ÐÐÐÅÏ¢£¬ÊäÈë°üÀ¨projectºÍflowµÄ±êʶ£¬·µ»ØµÄÊǸÃflowÕýÔÚÖ´ÐеÄËùÓÐÖ´ÐÐid£¨È«¾ÖµÄexec
id£©¡£
ÇëÇó²ÎÊý£º

ʵÀý£º
<code style="font-family:Menlo,
'Liberation Mono', Consolas, 'DejaVu Sans Mono',
'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida
console', monospace;padding:0px;color:inherit;background-
color:transparent;white-space:pre;margin-top:0px;
">curl -k --get --data "session.id=c001aba5-a90f-4daf-8f11-62330d034c0a&ajax=getRunning&project
=MyProject&flow=test"
https://localhost:8443/executor
</code>
|
·µ»Ø½á¹û£º
{ "execIds": [301, 302]
} |
9.9 Execute a Flow
Æô¶¯Ò»¸öflowµÄÖ´ÐУ¬Õâ¸öÊäÈë±È½Ï¶à£¬ÒòΪÔÚweb½çÃæÉÏÿ´ÎÆô¶¯flowµÄÖ´Ðж¼ÐèÒªÉèÖü¸ÏîÅäÖ㬿ÉÒÔÔڸýӿÚÉèÖóöÁ˵÷¶ÈÖ®ÍâµÄÆòÌÖÅäÖÃÐÅÏ¢£¬ÊäÈ뻹ÐèÒª°üÀ¨projectºÍflow
µÄ±êʶ£¬Êä³öΪÕâ¸öflowµÄidºÍ±¾´ÎÖ´ÐеÄexec id

ʵÀý£º
<code style="font-family:Menlo,
'Liberation Mono', Consolas, 'DejaVu Sans Mono',
'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida
console', monospace;padding:0px;color:inherit;
background-color:transparent;white-space:pre;margin-
top:0px;">curl -k --get --data 'session.
id=c001aba5-a90f-4daf-8f11-62330d034c0a' --data
'ajax=executeFlow' --data
'project=MyProject' --data 'flow=test' https://localhost:8443/executor
</code> |
·µ»Ø½á¹û£º
{
message: "Execution submitted successfully
with exec id 295",
project: "foo-demo",
flow: "test",
execid: 295
} |
9.10 Cancel a Flow Execution
È¡ÏûÒ»´ÎflowµÄÖ´ÐУ¬ÐèÒªÊäÈëµÄÊÇÈ«¾ÖµÄexec
ÇëÇó²ÎÊý£º

ʵÀý£º
<code style="font-family:Menlo,
'Liberation Mono', Consolas, 'DejaVu Sans Mono',
'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida
console', monospace;padding:0px;color:inherit;
background-color:transparent;white-space:pre;margin-
top:0px;">curl -k --data "session.id=
c001aba5-a90f-4daf-8f11- 62330d034c0a&ajax=cancelFlow&execid=302"
https://localhost:8443/executor
</code> |
·µ»Ø½á¹û£º
{ "error"
: "Execution 302 of flow test isn't running."
} |
9.11 Flexible scheduling using Cron
ʹÓÃʱ¼ä±í´ïʽÁé»îÅäÖö¨Ê±ÈÎÎñ
ÇëÇó²ÎÊý£º

cronExpression cronʱ¼ä±í´ïʽ£¬ÔÚAzkabanÖУ¬Ê¹ÓõÄÊÇQuartzʱ¼ä±í´ïʽ¸ñʽ
ʵÀý£º
<code style="font-family:Menlo,
'Liberation Mono', Consolas, 'DejaVu Sans Mono',
'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida
console', monospace;padding:0px;color:inherit;background-
color:transparent;white-space:pre;margin- top:0px;">curl
-k -d ajax=scheduleCronFlow -d projectName=wtwt
-d flow=azkaban-training --data- urlencode cronExpression="0
23/30 5,7-10 ? * 6#3" -b "azkaban.browser.session.id=c001aba5-a90f-4daf-
8f11-62330d034c0a" http://localhost:8081/schedule
</code> |
·µ»Ø½á¹û£º
{ "message"
: "PROJECT_NAME.FLOW_NAME scheduled.",
"status" : "success"
} |
9.12 Fetch a Schedule
¸ù¾ÝÏîÄ¿Ãû³ÆºÍ×÷ÒµÁ÷ID»ñÈ¡Æä¶ÔÓ¦µÄʱ¼ä¶¨Ê±ÈÎÎñÐÅÏ¢
ÇëÇó²ÎÊý£º

cronExpression cronʱ¼ä±í´ïʽ£¬ÔÚAzkabanÖУ¬Ê¹ÓõÄÊÇQuartzʱ¼ä±í´ïʽ¸ñʽ
ʵÀý£º
<code style="font-family:Menlo,
'Liberation Mono', Consolas, 'DejaVu Sans Mono',
'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida
console', monospace;padding:0px;color:inherit;background-
color:transparent;white-space:pre;margin-top:0px;
">curl -k --get --data "session.id=
c001aba5-a90f-4daf-8f11- 62330d034c0a&ajax=fetchSchedule&projectId=1
&flowId=test" http://localhost:8081/schedule
</code> |
·µ»Ø½á¹û£º
{ "schedule" : { "cronExpression"
: "0 * 9 ? * *", "nextExecTime"
: "2017-04-01 09:00:00", "period"
: "null", "submitUser"
: "azkaban", "executionOptions"
: { "notifyOnFirstFailure" : false,
"notifyOnLastFailure" : false, "failureEmails"
: [ ], "successEmails" : [ ],
"pipelineLevel" : null, "queueLevel"
: 0, "concurrentOption" : "skip",
"mailCreator" : "default",
"memoryCheck" : true, "flowParameters"
: {
}, "failureAction" : "FINISH_CURRENTLY_RUNNING",
"failureEmailsOverridden" : false,
"successEmailsOverridden" : false,
"pipelineExecutionId" : null, "disabledJobs"
: [ ]
}, "scheduleId" : "3",
"firstSchedTime" : "2017-03-31
11:45:21"
}
} |
9.13 Unschedule a Flow
È¡Ïû×÷ÒµÁ÷µÄ¶¨Ê±ÅäÖÃ
ÇëÇó²ÎÊý£º

ʵÀý£º
<code style="font-family:Menlo,
'Liberation Mono', Consolas, 'DejaVu Sans Mono',
'Ubuntu Mono' , 'Courier New', 'andale mono',
'lucida console' , monospace;padding:0px;color:inherit;background-
color:transparent;white-space:pre;margin- top:0px;">curl
-k https://HOST:PORT/schedule -d "action=removeSched&scheduleId=3"
-b azkaban.browser.session.id=c001aba5-a90f-4daf-
8f11-62330d034c0a
</code> |
·µ»Ø½á¹û£º
{ "message"
: "flow FLOW_NAME removed from Schedules.",
"status" : "success"
} |
Pause a Flow Execution
ÔÝÍ£Ò»´ÎÖ´ÐУ¬ÊäÈëΪexec id¡£Èç¹ûÕâ¸öÖ´Ðв»ÊÇ´¦ÓÚrunning״̬£¬»á·µ»Ø´íÎóÐÅÏ¢¡£
ÇëÇó²ÎÊý£º

ʵÀý£º
<code style="font-family:Menlo,
'Liberation Mono', Consolas, 'DejaVu Sans Mono',
'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida
console', monospace;padding:0px;color:inherit;background-
color:transparent;white-space:pre;margin- top:0px;">curl
-k https://HOST:PORT/schedule -d "action=removeSched&scheduleId=3"
-b azkaban.browser.session.id=c001aba5-a90f-4daf-
8f11-62330d034c0a
</code> |
·µ»Ø½á¹û£º
{ "message" : "flow FLOW_NAME
removed from Schedules.", "status"
: "success"
} |
9.14 Resume a Flow Execution
ÖØÐÂÆô¶¯Ò»´ÎÖ´ÐУ¬ÊäÈëΪexec id£¬Èç¹ûÕâ´ÎÖ´ÐÐÒѾÔÚ½øÐУ¬²»·µ»ØÈκδíÎó£¬Èç¹ûËü²»ÔÙÔËÐÐÔò·µ»Ø´íÎóÐÅÏ¢¡£
ÇëÇó²ÎÊý£º

ʵÀý£º
<code style="font-family:Menlo,
'Liberation Mono', Consolas, 'DejaVu Sans Mono',
'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida
console', monospace;padding:0px;color:inherit;
background-color:transparent;white-space:pre;margin-
top:0px;">curl -k --data "session.id=c001aba5-a90f-4daf-8f11-62330d034c0a&ajax=pauseFlow&execid=303"
https://localhost:8443/executor
</code>
|
·µ»Ø½á¹û£º
{ "error"
: "Execution 303 of flow test isn't running."
} |
9.15 Resume a Flow Execution
¸ø¶¨Ò»¸öexec id£¬¸ÃAPI½«»Ö¸´ÔÝÍ£µÄÔËÐÐÁ÷³Ì¡£Èç¹ûÖ´ÐÐÒѾ±»»Ö¸´£¬Ëü²»»á·µ»ØÈκδíÎó; Èç¹ûÖ´ÐÐûÓÐÔËÐУ¬Ëü½«·µ»ØÒ»Ìõ´íÎóÏûÏ¢¡£
ÇëÇó²ÎÊý£º

ʵÀý£º
<code style="font-family:Menlo,
'Liberation Mono', Consolas, 'DejaVu Sans Mono',
'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida
console', monospace;padding:0px;color:inherit;
background-color:transparent;white-space:pre;
margin-top:0px;">curl -k --data "session.id=c001aba5-a90f-4daf-8f11-
62330d034c0a&ajax=resumeFlow&execid=303"
https://localhost:8443/executor
</code>
|
·µ»Ø½á¹û£º
{ "error"
: "Execution 303 of flow test isn't running."
} |
9.16 Fetch a Flow Execution
»ñȡһ´ÎÖ´ÐеÄËùÓÐÐÅÏ¢£¬ÊäÈëΪexec id£¬Êä³ö°üÀ¨Õâ´ÎÖ´ÐеÄÊôÐÔ£¨²Î¼û7£©£¬»¹°üÀ¨Õâ´ÎÖ´ÐеÄËùÓеÄjobµÄÖ´ÐÐÇé¿ö¡£
ÇëÇó²ÎÊý£º

ʵÀý£º
<code style="font-family:Menlo,
'Liberation Mono', Consolas, 'DejaVu Sans Mono',
'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida
console', monospace;padding:0px;color:inherit;
background-color:transparent;white-space:pre;margin-
top:0px;">curl -k --data "session.id=c001aba5-a90f-4daf-8f11-
62330d034c0a&ajax=fetchexecflow&execid=304"
https://localhost:8443/executor
</code>
|
·µ»Ø½á¹û£º
{ "attempt"
: 0, "submitUser" : "1",
"updateTime" : 1407779495095, "status"
: "FAILED", "submitTime"
: 1407779473318, "projectId" : 192,
"flow" : "test", "endTime"
: 1407779495093, "type" : null,
"nestedId" : "test", "startTime"
: 1407779473354, "id" : "test",
"project" : "test-azkaban",
"nodes" : [ { "attempt"
: 0, "startTime" : 1407779495077,
"id" : "test", "updateTime"
: 1407779495077, "status" : "CANCELLED",
"nestedId" : "test", "type"
: "command", "endTime"
: 1407779495077, "in" : [ "test-foo"
]
}], "flowId" : "test",
"execid" : 304
} |
9.17 Fetch Execution Job Logs
»ñȡһ´ÎÖ´ÐÐÖеÄÒ»¸öjobµÄÖ´ÐÐÈÕÖ¾£¬¿ÉÒÔ½«jobµÄÖ´ÐÐÈÕÖ¾×÷Ϊһ¸öÎļþ£¬ÕâÀïÐèÒªÖÆ¶¨exec
ÇëÇó²ÎÊý£º

ʵÀý£º
<code style="font-family:Menlo,
'Liberation Mono', Consolas, 'DejaVu Sans Mono',
'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida
console', monospace;padding:0px;color:inherit;
background-color:transparent;white-space:pre;margin-top:0px;
">curl -k --data "session.id=c001aba5-a90f-4daf-8f11-
62330d034c0a&ajax=fetchExecJobLogs&execid=297
&jobId=test-foobar&offset=0&length=100"
https://localhost:8443/executor
</code> |
·µ»Ø½á¹û£º
{ "data"
: "05-08-2014 16:53:02 PDT test-foobar INFO
- Starting job test-foobar at 140728278",
"length" : 100, "offset"
: 0
} |
9.18 Fetch Flow Execution Updates
Õâ¸öÊÇ·µ»ØÉϴβ鿴֮ºóÿ¸öÈÎÎñµÄÖ´ÐÐÇé¿ö£¿Õâ¸öÓеãÒÉ»ó¡£Ó¦¸ÃÊÇÔÚflowÖ´ÐеÄʱºòÖ´Ðнø¶ÈµÄÐÅÏ¢»ñÈ¡¡£
ÇëÇó²ÎÊý£º

ʵÀý£º
<code style="font-family:Menlo,
'Liberation Mono', Consolas, 'DejaVu Sans Mono',
'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida
console', monospace;padding:0px;color:inherit;
background-color:transparent;white-space:pre;margin-top:0px;
">curl -k --data "execid=301&lastUpdateTime=-
1&session.id=c001aba5-a90f-4daf-8f11-62330d034c0a"
https://localhost:8443/executor?ajax= fetchexecflowupdate
</code> |
·µ»Ø½á¹û£º
{ "id"
: "test", "startTime"
: 1407778382894, "attempt" : 0,
"status" : "FAILED", "updateTime"
: 1407778404708, "nodes" : [ {
"attempt" : 0, "startTime"
: 1407778404683, "id" : "test",
"updateTime" : 1407778404683, "status"
: "CANCELLED", "endTime"
: 1407778404683
}, { "attempt" : 0, "startTime"
: 1407778382913, "id" : "test-job-1",
"updateTime" : 1407778393850, "status"
: "SUCCEEDED", "endTime"
: 1407778393845
}, { "attempt" : 0, "startTime"
: 1407778393849, "id" : "test-job-2",
"updateTime" : 1407778404679, "status"
: "FAILED", "endTime"
: 1407778404675
}, { "attempt" : 0, "startTime"
: 1407778404675, "id" : "test-job-3",
"updateTime" : 1407778404675, "status"
: "CANCELLED", "endTime"
: 1407778404675
} ], "flow" : "test",
"endTime" : 1407778404705
} |
´ÓÕâÀïµÄ½Ó¿Ú¿ÉÒÔ¿´³ö£¬azkabanÌṩµÄAPIÖ»ÄÜÓÃÓÚ¼òµ¥´´½¨project¡¢flow£¬²é¿´project¡¢flow¡¢executeµÈ²Ù×÷£¬¶øweb½çÃæµÄ²Ù×÷Òª±ÈÕâ·á¸»µÃ¶à£¬Èç¹ûÎÒÃÇÏ£Íû»ùÓÚazkaban½øÐпª·¢µÄ»°£¬ÔÚÕâЩ½Ó¿ÚµÄ»ù´¡ÉÏ£¬ÎÒ¾õµÃ»¹¿ÉÒÔ¶ÔazkabanµÄÊý¾Ý¿â½øÐзÖÎö£¬´ÓÊý¾Ý¿âÖеõ½ÎÒÃÇÏëÒªµÄÐÅÏ¢£¨»ù±¾µÄд²Ù×÷¶¼Äܹ»Í¨¹ýÕâЩAPIʵÏÖ£¬ËùÒÔÎÒÃÇÖ»ÐèÒª´ÓÊý¾Ý¿âÖжÁÈ¡£©¡£µ«ÊÇÕâÑùÏà¶ÔÓÚʹÓÃAPI»¹ÊÇÓиö±×¶Ë£¬±Ï¾¹Ëæ×Ű汾µÄ¸üÐÂÊý¾Ý¿âµÄ½á¹¹¿ÉÄܻᷢÉú±ä»¯£¬µ«ÊÇÕâÒ²²»Ê§ÎªÒ»ÖÖ·½Ê½¡£
10. Azkaban²å¼þ
10.1 Hadoop Security
Azkaban×î³£ÓÃÔÚHadoopµÈ´óÊý¾Ýƽ̨ÖС£AzkabanµÄ×÷ÒµÀàÐͲå¼þϵͳÔÊÐí´ó¶àÊýÁé»îµÄÖ§³ÖÕâЩϵͳ¡£
AzkabanÄܹ»Ö§³ÖËùÓÐHadoop°æ±¾£¬Ö§³ÖHadoop Security¹¦ÄÜ; AzkabanÄܹ»Ö§³Ö¸÷ÖÖ²»Í¬°æ±¾µÄÉú̬ϵͳ×é¼þ£¬Èçͬһ¸öʵÀýÖеIJ»Í¬°æ±¾µÄpig£¬hive¡£
Hadoop Security×î³£¼ûµÄʵÏÖ·½Ê½ÊÇÒÀÀµHadoopSecurityManagerͨ¹ý°²È«·½Ê½ÓëHadoop¼¯Èº½øÐÐͨÐźÍÈ·±£HadoopµÄ°²È«¡£
¾ßÌåÇë²Î¿¼Hadoop Security
10.2 Azkaban HDFSä¯ÀÀÆ÷
Azkaban HDFSä¯ÀÀÆ÷ÊÇÒ»¸ö²å¼þ£¬¿ÉÒÔÈÃÄú²é¿´HDFS FileSystem²¢½âÂë¶àÖÖÎļþÀàÐÍ¡£Ëü×î³õ´´½¨ÓÚLinkedIn£¬ÒԲ鿴AvroÎļþ£¬LinkedinµÄBinaryJson¸ñʽºÍÎı¾Îļþ¡£Ëæ×ÅÕâ¸ö²å¼þ½øÒ»²½³ÉÊ죬ÎÒÃÇ¿ÉÄÜ»áÔÚ½«À´Ìí¼Ó²»Í¬ÎļþÀàÐ͵ĽâÂë¡£
ÏÂÔØHDFS²å¼þ,²¢½«Æä½âѹËõµ½Web·þÎñÆ÷µÄ²å¼þĿ¼ÖУ¬Ä¬ÈÏĿ¼ÊÇ/azkaban-web-server/plugins/viewer/
¾ßÌåÇë²Î¿¼HDFS Browser
10.3 Jobtype²å¼þ
Jobtype²å¼þÈ·¶¨µ¥¸ö×÷ÒµÔÚ±¾µØ»òÔ¶³ÌȺ¼¯ÉϵÄʵ¼ÊÔËÐÐÇé¿ö¡£ËüÌṩÁ˺ܴóµÄ±ãÀû£º¿ÉÒÔÌí¼Ó»ò¸ü¸ÄÈκι¤×÷ÀàÐÍ£¬¶ø²»ÓýӴ¥AzkabanºËÐÄ´úÂë;
¿ÉÒÔÇáËɵØÀ©Õ¹AzkabanÀ´ÔËÐв»Í¬µÄhadoop°æ±¾»ò·Ö·¢°æ±¾; ÔÚÌí¼ÓÏàͬÀàÐ͵Äа汾µÄͬʱ£¬¿ÉÒÔ±£Áô¾É°æ±¾¡£µ«ÊÇ£¬ÓɹÜÀíÕâЩ²å¼þµÄ¹ÜÀíÔ±À´È·±£°²×°ºÍÅäÖÃÕýÈ·¡£
ÔÚAzkabanExecutorServerÆô¶¯ºó£¬Azkaban½«³¢ÊÔ¼ÓÔØËùÓпÉÒÔÕÒµ½µÄ×÷ÒµÀàÐͲå¼þ¡£Azkaban½«×ö·Ç³£¼òµ¥µÄ²âÊԺͶªµô»µµÄ¡£Ó¦¸Ã×ÜÊdz¢ÊÔÔËÐÐһЩ²âÊÔ×÷Òµ£¬ÒÔÈ·±£¹¤×÷ÀàÐÍÕæÕý°´Ô¤ÆÚ¹¤×÷¡£
¾ßÌåÇë²Î¿¼JobType Plugins |