Modified: hadoop/core/trunk/docs/hod_user_guide.pdf URL: http://svn.apache.org/viewvc/hadoop/core/trunk/docs/hod_user_guide.pdf?rev=662795&r1=662794&r2=662795&view=diff ============================================================================== --- hadoop/core/trunk/docs/hod_user_guide.pdf (original) +++ hadoop/core/trunk/docs/hod_user_guide.pdf Tue Jun 3 06:37:54 2008 @@ -581,10 +581,10 @@ >> endobj 98 0 obj -<< /Length 2655 /Filter [ /ASCII85Decode /FlateDecode ] +<< /Length 2626 /Filter [ /ASCII85Decode /FlateDecode ] >> stream -GatU6gQJ'd&q05Pi6dRPArr+am$l&_gI+`Zf[CN2Yhn#/;kf.T$C/03gj_QJ,*W-0`HF>s;50>ubbNCW9MrPehS"9Kqf[abU\t(0(ON=J"@411-a`i":PnOd?Jq('H+Nm#pWKE6niW7hks)on*/[EMAIL PROTECTED]<YQg:>8[>-HegVW.W#mJP^ar)G@;a+`"e..l:;+Qb_'oE()Jr76B%9:iJY+7t1Y.AXtiX.Oc3p#l/SA<YR]4j9p#2*Xf9)Vg-]DNKCY0a^T5:?&M;3Jh43:[EMAIL PROTECTED]"M:.;,eB2N^5'*AmsR$JI]bpreZQ_l1:ij]&@O$hO>`3aS+!hUYqSr.'oU]Z*]NmRV)Yl;k<oq4@&lckn6;n6&`<;Wet=hS9[^BZ`;nSGCnegK;tUk\dP:DtHY97Gi:=QRj/flu7/6ZV"1T6P6ILhY)!q0j1,Kk;C%V)[cQ"7Yjh/#DJAE8H>B,u.=\2hQk84_"(NUAe4Vg!^YT`]?YXb\[*f!`-ET2Q)[EMAIL PROTECTED],Y]l-UBO+Oo/C0r^\VD_u&sX3\J[tE*CK@'DLse8+,@sp%<5=5Kl#o/oF=*a(&(%=%DdXbhiXA;19X8CfW"7lk!*4d.;Xj#3.dV,)M9t_)`R?6^>WChU#dqKnm)gHOM%lWSJJYt8G6Jgh4]aMZSK0!5AaS>@[EMAIL PROTECTED]).(6ilXH6ZgT=!IZ^E,7%>EAdAGq<11^LsXL_6ZL+1m9*11F*0gf`PBl]C";,d.uqF'LScmdnUX>$KT+,K'SFPR9gF-l;A-"0^aG%/JS?=J/u%RK"bEr(s%s>XrLW+^/f5-2;c6ar<UoWA0,L?iduarl(V-ek"/9Z@/@dgKP*JPO&^"[EMAIL PROTECTED]<."b!03Q?8#iYZ&U4TPiC-&[EMAIL PROTECTED]:^*<T*^HJbu$M3DfY"NY0;o"gIO&KUsM[ARN# .R<dpp`K#=#lq*"<0.&aH,8V5;^JGg[)S/3Soc>`OT_q;\03Km(6ApU<C($C?Rl].o/W;iZ:.8b<0r*C_,"+<qR$c'BC\<H!\n!SRXKKD%Q9=9*4\uSE;]uh>C6hW=TGr^O,[EMAIL PROTECTED]:kjhUu)>u/cSQ6se?l\WI<66o-$QB9FO%5KF^_]#:J2O%9Gh6:%N>([[h/lo^$1\#eG6_VuKP=:[EMAIL PROTECTED];[AMq9;2(4V#/ZI(($CZmJPHp^[7I05E^e74($;*EPK/73qi<mn&uZI>Klp=^!&]:@Ag_G,R[?s4n5`q+Yl>;N"gkJ!4I%9:'>DXWt=^<`8?J5f`H/(,tVVZStPcrB;!d[7*=C/CGq;TV"T+0pEI3eDBjX'Uo825"fn[I_T'a5*tR/S&&[EMAIL PROTECTED]"eN(F7P5/"%8>[EMAIL PROTECTED]@),://HhAUCqPj(huTEkIBkORsqjdBNUR5jo9J$l\;5$o77]88Gmi$[`+?ZJf8NqCQ*`1ZbI)qRa!X>M/-THNq\u;5DmM.E<@9O1aH4SRZ8is"2I'F69;1d+og_`fj0X).oLu7*$$+WAS"=*QIP!Dtp]-***L/Oee/L]'pt<1CeFi"[EMAIL PROTECTED]&-k34c<n-j!Iq?MF_dXV8kqh';c5Lb?r\Emth`tPr&d:=gKBLIUg^TtIY%sKo6e>r]Yc:nJNiG%#n%D!)S=>sr_,[EMAIL PROTECTED]<Ag-4lqZ4rFd,t-BpW5S7S<qJ;]VY7(McqV_#=K@,\!LF1cgT+UdoV^2_Z`[7(o%<h'CmbD[`Rul55KU\,e&BRZa#)(Va<.."p.P)Ge&([EMAIL PROTECTED]<,&hL%j^Ho&i=2+CMrGQM<h4e34.3Jc=dUnA'2*+HP[UP+X%/b,:>HCIiPm#'[EMAIL PROTECTED],fS6``:dBrA!HXtX7p-YU,H>=6t6()W$r0_'(\iGKIq%8udVl%3A=gAVFbliL [EMAIL PROTECTED]@rmt!S[CJ^-/]PpgI_9?9^$BDD[nCL*aL_p#SaN4L`/u*gI<b/pXB829Gcui2EJimU1KbOo$"s:9n,kE8SAM5rUIbI3_Pp3/a1*Wk.B$/'i$M,^Q5-2oJK6Efd%L_+cOGi5TRobagsj41ME;n8P*6iq4"H^dN2)je,Q7>qR^/]\&'mS'#`nXjMVR'cG<)?Z7KodlOCQ[D`7[N:A'tM:Nn%2Eub#I5XM,hqSL"hL='\Ye/(ALhc>T29GX'he0:fR=++.\@"@]d'ABL1W3%LLLi6Bn2YSHraK829Vd:&JKU:c*"ln]o$?kP^S2[Mb;U$hul`)p`1'>b>$dfqiH9Ap=<bIo8#t+9&)A._<[EMAIL PROTECTED]<2-42+H0liN'j=f"1;iEJh<>p5ADWpU3s%:"KE9N=8f"Y2C(1LA`1[d[?n//`*231)0:[EMAIL PROTECTED],(];>a6?M\O_pFC\!'@B509"il=7<307t4Nk?M35DP>/45HY.0E/o4>[EMAIL PROTECTED];5rQ!QI<@(-CWSUE#8@,6B;3h/!oTl3;OPZe,S[s5T[\r'l9n%OMpu=kjgiTq-W'&W`>%PKp:PA'[EMAIL PROTECTED]>@U%k\%7PlSF-RT!M%Gb"16AM6N~> +GatU6gQ(&I&q-CUd%_%\'TjS^ff-t3>C[j$1Vl8V(CQ7llIN+AD!U*Sr-_,l=Hk55[55f>9b!#^3ikAB7J/<pGOHUA^>0sq."=J:`LcBU5nM-;$!!Vd.Ig]i$_3AA:NrH"Ib>E#T'$_?rTEp+K<[EMAIL PROTECTED];P*fAS5,5V2t2XpG]s)Zl46`lfi-1'4866jld]4j<;[iASUW_^^WM8o\BqGc$9^<RLq1eM]tgBk^GTE8P38q/#Q<RY$G#3MePAB*qK%&dZADIK&$p"lS"D#Xok),u1Isdd(^6cS-ZN7nS4'VTV]psWT33n)R7R4[987`D/C1_AKrC^1F]0'%S;L2TcD'CH-3bep0J+fDRTBL=025;S`Gl%_+,@"[M5fZ!"?o7l4;[EMAIL PROTECTED]'2T`(9AlToY+f:*:$VXgsq\a?l+B(_%ah&5.d`NulhG(&@%6Gnobi(7GRC<8,6\Q/V;OF>_U1F1T&pPJ(QKUBnuWUGW4>\I_8>)KX-0`WlAYYqJ2!U%T//UiQkht0"3Se8">!qj=faW@>+2qC:3A>[Q5'mS5sfUVs6e`VZGr:'A:YX!fa_:^uCTQX&[YWRDil5m6!8lShbHfi`eY$$1Y+\LeIN<ZdOV?/g&8[meAY\,/KquF,sncf:r--fmta<7N!SbaJ3"^jd?/HrmAY/1YR(^SsN>:ba8c%T(kL/[EMAIL PROTECTED]<md)(l/lQBjc&r!R=kK6cdi&[EMAIL PROTECTED]"HGM>]IbJ.[O)U>ceQW0eftGg0sK5'h=qd6W4nYpqS1"[EMAIL PROTECTED];A'I>JPR&>!`MOH>t!(u$Nah/s.^\:k<4aH>VI9CVPLN)<Q3/M]NjrT9h-NM?KB+Y)%^q[A'*8pQE34>%9L9LbY0&A9IJ'd'=*C2/,sk9H+ac+`]BiE:l:/[EMAIL PROTECTED](*;;V>Ej5'u>=KUm'Yq`3&[EMAIL PROTECTED]<B +AEK:]'g(tT[jN>>]pNKBO'H5jrBb3`B]oY?e60:`K(:!d]qi''$8!S`U^EJ#RsV<)=r;[EMAIL PROTECTED]>Pam0JSpcf'3c!FNJ(-=^?Zt/U>K3];$9XVEtL:eL[8Y5rTA(M'I+40ooF',h$I\N&1_r3QQ.gA`<^%>u/cSRO64Cl\WH"+d/WM9?:bc!LX[eToDnu)k0o3h6:%L>+HN-/fnhYBB&TmK0k?Q-]8W5,D0Y(e:nNW#a3Go$mA$u2MBSd8b]2q/J9f=ebmoX?Zf)'+3ETCk0'/VmZt=Xa8WgKXZGKaM`O);Qgs5Jf]d8jab#^K90DQ1LeJ?gUB/1_!*.jd'1&,/.YN.'nb6Kf[Qkg88J50Z-`I!`)/(lDOn/8DRS@<-WP+VH]uY*&gW6!".I*Bf_<S&pYd*cf`]\NfK.m/H%iLipD+&!G^lqs?aJH^l"-Y.IW"u]"<98I0[YJ'A^1O2n`g(IqUdHkoqXrG[HA=bdcoBpWOE&[EMAIL PROTECTED]/*Yhi/r8_FD#e1LT's,0c-B3S(^2kOk6eNg\/l[kQQsR?p6*GD!Qm:HFGIR!gFs+Z"RFCV19AN8Idpn7a]3Y8G?F1^%`>iCT>I*5m:1QB?l1RJ`l$0LZ:N30a+W,Ya6AdiKpq):4%Z&%^2bqu$!Y#Q'C-W!UKug"!s#-Z8[Ra]^[NM"W-DAN.Blmqd<K=Tp]C2\e<,[EMAIL PROTECTED];[EMAIL PROTECTED])G$&#e'rDP"%OTA1+(H.hi+>=u(VYI2f!5\/i'Hg,\Mr(`ekqFV=,\6ql.U\E\X6JdF;2Yk&57Xm(GjAo)<2E"D-<(P$MJA[3O0,H9iCa=1&4gbBp^#meWnD<M!rnN>O"RL?Q'#1W5e:YONk\`!S%pTqEnn9X/#s'9-HjZ:[EMAIL PROTECTED]@a00k-XEinK`TXc6/+9P)R<DL^hBg&M18/-GIp,<cnKs5/h#;HmB=mU/l9 !oo;,La]5]+*imKUe"D3WJ`Y;GpS$U=_f&ja`J6O.6#OP/=Tt=1:ft%$kGMU1^:r'[EMAIL PROTECTED]@M\kjb'mhi)3`A7DRR>$9^m[=iQd-([EMAIL PROTECTED])[EMAIL PROTECTED]/70HRn-[30AjlOJJHTlL&Y-$ccXDmD]$HSF+_s-FYgmtQt[$;8]9&=5VF'0e<6#FR>Y=l,Co)gklFD?.*cl7]Q;mRHt`5P!utKL#/$Kn#9qUX>G<?N:u?[RrAfZHuPpL"m6P_fnOq#5Be]6!^n9h3qf,q"c:JF$K5V4PJkG_i*NGn<.%b@(cD5_9RF^oD7!([EMAIL PROTECTED]>nmT6Aq7F:[EMAIL PROTECTED]&[EMAIL PROTECTED](bK=C3]\62Xm&i;n(OH&oJ?d8';7]fQJ<*WfR`\hEPXqV-aF7-ZY'3Uq1?p&G[rqrEHmpll\^n7Q_+83"3%_lM&.454INJdeN%0WfPro_1sA,>_714WIc<n3OsM*k.)>+BB91.*S$'JWLop5.-st3A&qciDC>KS%R)-?%>TVR]6d0+31s#7Uq(0Kb.9^%g$o41n?83'4i3d,0&0C<\Zc3srtK01Hq0lWnm4/[EMAIL PROTECTED],0[]rHnUUo5Es>ieI~> endstream endobj 99 0 obj @@ -596,10 +596,10 @@ >> endobj 100 0 obj -<< /Length 2133 /Filter [ /ASCII85Decode /FlateDecode ] +<< /Length 2130 /Filter [ /ASCII85Decode /FlateDecode ] >> stream -Gau0EgQJ$c&:O:Spi01H'6N:*QqT9WCh5,"a8<6MQ,4ZuC^b=aO#):#!X!0T!G5W,e4^<(FfYD<qt(JL\!h_Ic$msbHn0\1c@"BPkDnTDhisCU0,VYDB(Lu-f<[\RmquLYjE`/&,O1W]8bpKIC>8;qq+o^deg'u8=)X%u4hk5rBYBGaZYT/A9W"mT#BF/+(J'`8VA$<&)@WK'/TNTU'fmL81A*W=#(qb-$_:"EA`Q8:4J4\a.seUkfi>bpr/^!YVkkCY(;]TB1B6\.OGWY%-b8nb^;-m!:%%F<=p/9-50.+%Jg[baJ'V32?+Q1.A%QAT6'T<%S/5=)Ls2lc)]AuM]g)^'mUut;+6Z-$0cQB@>V8EteD>sqEIpIk::&dg:BSl[)iQ>OL7+Ifka(N_*`lA:%1/3>&CN'P_=SA(ho&^K)[EMAIL PROTECTED]'=?rA!=ZjLY"KMVM=Wg^41R%/[EMAIL PROTECTED]&tWT>qNU>eQjbe734r=m.d88.^3Khj5"r0[r3>cQA>)aR.%L(oJ8.PU:!6,$]83tH^[MSOsERa/qj:Q`BcWV7fE90NlHI7kHukL$_DolOM7ZKJ&E8@)5e8VoO^c[a21s5AN>ii*L#frkP]M34Jlh_DP(6d/1#!!=<9c&WCT&9/]l/=c'apIXH':$5ctu3e1I)+eYf%R]XQ+6([EMAIL PROTECTED]'%od0tDEo,\E!PmX9qYhZ77iDIcEh/[EMAIL PROTECTED]>Y_IRhLf(AU.W;`MQ!D0`$p,:N!/X]k-EiiI:1SVa#)iP6)8f(bl?]kA[\W0.jq@:+U_88fuQQ%?ld]e,m^u]<f,t$JTLed.[juFfKc8gR-*=trdd*:[EMAIL PROTECTED]@JFlH%cLV`:ZBQ)m"L>6sjc7X58RRO<X;[EMAIL PROTECTED];o-/UHq:/ai!=a)T7_P#L.NfA9tWX3[aPB$oo*8HkIN7WADhG'#9BiL*OO"8=9`2GD^t4Y%J<!;NLPUt7hTemQYI! ?5IUAaC_!]eeh"b5MpE4cN4&#\c/P\_ml9Bd,WK>"1i[?D@:)sMZKRbkK]]m[1Dm`"[EMAIL PROTECTED]@s"om.WY)82]#78APd-S0pT7m\!7;""lOmI,S#$h-g-E,+(5@:7N9h=*HuYeK_g6LF&"ATr*Sh1E?=Z/F>:HS"4l*TKg,>ph&(g`)WYARNs=2odo"N*/nW)YIZ>OP?([EMAIL PROTECTED])T&[EMAIL PROTECTED]"a),tukTLr)R$6Cqe.5En;$/`4sA5=q!#*3'C`ON:\t%6(aCTrMau([EMAIL PROTECTED]@WF;DT1'S2IHl_%eOZP<pfS$3ROe,P1bWXYLM+'[Td#(g[j<5N2i^kk,h;8Ff500f\k9:<N&d)66^UQqCtGkoU1opSBf8l[H&[EMAIL PROTECTED],T0>gCQhR5'h:2pc).4]D;C:KiBX[AomDBKX"[EMAIL PROTECTED]&A2LjGdE>]'#HQHAHCYX]03JQXkIcBWkYtASFH!&jO1%.*S9Zp1c"r(em)G.ai+([EMAIL PROTECTED]@?cMud\p4:aQ52_iN!*b92g*Z3H*IcNpNH"2,`pNdOs(ic22"SC%NQPRTKW35*VS]gcn#3Gc4>m7I^Hd0t*7$K,gN602mP'Ri]FcmErF\h6VZj)+iLfou+%eJN?4"-%e&&O_U5QN,PaoMre,S^p;NOU4j")kRk.6"OX:8.(OAOu"*98F:.cq>t_RZ#'mA)>g99j(G9o".k/hn^>TX:98EW/NPZ]ZiDa>pUBb$Ndl=QTm$f?\Vkmf'bhsal!Yn83*biEPHm+4l3sP4K+'ab9`SlXE)!h09U<S^R*a)'[EMAIL PROTECTED]'BHPPik#sLRaYI>RBiWG1H%RHkr9me0)Q:2Kk-!dl5Se,*M7Lp\-&[T(53&q,M>N(6J1brX=JY>_=P8lWV6+Y\$+APO8dAh6Yn s]G`3kAW78[\mV0;p`TmAT\m9fT%_e5c"[EMAIL PROTECTED]);[EMAIL PROTECTED]@[EMAIL PROTECTED](.&f\E5W=&`8734relFpBX5:RE<uKPfHIpIn\ND\#,>T>-4WE=1Vi5DWef>[EMAIL PROTECTED]'I<[EMAIL PROTECTED](~> +Gau0ED0)1+&H;*)iK*4s9bEP5q3\$RRndnUF+'Z52]W=4bnZ<J3,\`o/XVli/[EMAIL PROTECTED]:uCClIe\ugXYZhCA)^<k$.WX0_7uUSD1I]ru!IS00$9HMpF16?dJ_A]m]^$%c]SI-d4*]gIsEY1gC]C_!&[EMAIL PROTECTED];_Q_]M?G-2p)d:qW:_:6C"U1mN5f[O.Z/I%E0)EjXK%\&V6S\2=r(5(jH%A-FMB5D_Jglj`ICOEOXR8qfbr/s)5=D>jU6*9r4RK%\&NE>_*jg[#<AgOdU#LP\)H1s=Unj'([EMAIL PROTECTED](hPOq<HH)*3cnGk;:6906YE'p<U7/;Ep(-Y/[,U:[EMAIL PROTECTED];=<ooDkYA"/*u*Ohr&HDuU3C1[/^Ag46tql%R:"%ZW/#0`#-[9C:guDZN&+B)B9^;Ma#FeOTsXMWZtZ]c?U[m(f*'Q1;aJ<,[k/,n6US2T8)^t<"b&[%3Yao'*?l7\LZFY(G82HRM;[EMAIL PROTECTED];7f)_f.L/Hkuq;d5pn>SZ[=\A=\QH0&s.A.`16o(Hl73P!ND^P-]RQG]947Z5/;(0eMn#M]dBC)QCSN$:[EMAIL PROTECTED],r7;G1A/=>N9QE-AU1.hC#eFRN00YMD9cd20Tc^1u(_KPnlZM)c1mbqN``giUbqL^D1k!GiLPZa:Sl..RDg9121c16sn;7_1'KsCj.n?P0L6rTK\]X<9Q?gBM'4k$KSOeH#9Z)DkW]'\@'r:8.[qm"@gD6/<RCjHO_it.llM<hRQl#P6gEQglFKNhb,'*53cMdhpo<`Ve*>VWG:<1uFO4ahH)T\b!C\D:aWUm]<u1<lRAnXJp13F.nWfhO8U/4dkr,L*TfF*,+&N4EQ-l?"c/Bs&L`Ki3sQl_KL2G0TFR:-&Q8Z+fn:jQK"qfQCSlROCX8$$D[2:emrq7iUV*SAs:[EMAIL PROTECTED]/s[kXF%[T)"I3q/M) !8#*/6<Ie=Mnb%:63XqWjBO1Hr)m;:A[`_*9#,.r17]htl0[3']6N'''g4mKZ#Q#UtHmgnB)Ve4AjSfda0h<kDdb-O:_NM-u5V*OtT2f'je71All4O<)bmIqO?+:c2h4k^faEeD!l?Vaui3T/MC+sO3m/0]&4fT&X>PiEq1P>##0JYHe*:"6P#^0=:5tB,k31p!LRFYdCnLU'8.#pW-lhAV[h<g=hr;BNHLHlG:TcO^6$VEMRA%bgt(%fOjpYYV;J[2Gc<g,?cA$4cNMM"b<kuO\aCsn23?#6mKgLCr<=CU?iPK2&[EMAIL PROTECTED],&6CTr)bM03qjsnuIfrc7m&Lf9OK)QCNR2T<C3Fq.X)I)V;"(tR1eU2e5YSWGmB[6!U/,Z0?FQ&[EMAIL PROTECTED];B)%1EJk]/9Ndd+FHe*f<.kY!%]:;Wm&W8RAC4or8b<!J4$E"b+-Ij[%DMua'QYM`R([EMAIL PROTECTED],)OBi178[)VsJ.<qT[7N'3WM>elbpVOtD<9-&d_U7slflot(M:Hbg"@g^mY/5H%#V9_R34\Xe<)7tpCrHo&!ma9Ku84(-^fd=jdJUMQNh%Oq#e$^6LPfQ=2R)QB\GpTnQtg/aF!^r"[EMAIL PROTECTED]&_APao":j.B1WAef;=sI(C#:.=`jkoq.^4]:^U,\tATdXrbY6s!Y7o7^f4fbcjD1'!-c<#Q7%51_/Wd'dkTW$DY'<R"[EMAIL PROTECTED]/FdVVen"#9`m6TOYIB8"XU$U1:7T(*2rO3W^k3+-B"N?KL;2T5BcU1S8c68kRYa8PZ2.q]`7R&Qp2J#`7b3pIi^8#2$?66&2=<&c!Gaf"=\t*RQ-j\DkjnHs[Q_@'fqT]bD%*lX:-t7=V]B-rqiU6F2TIBLBLFQ?7b13LT987We^#YbXc)A7C*>+(0_/OYL?%>;@5qMJV0c[,[EMAIL PROTECTED]>?U:hC]?N$/@iA< 2O*269o\[BM03DHD6-(M\12q?bc!iQJ<i,[EMAIL PROTECTED]:-rU^J6_3>JH4K!!.n]qlag:fuAWSFAf2(h,ZY6s<Vi=3)PO?OJ9a;]-0XS<95JYV&jJFp5=L?r.6Q2Q*Ug(LRX1;)'a[C:+)Bt1<++!ZM#6~> endstream endobj 101 0 obj @@ -611,10 +611,10 @@ >> endobj 102 0 obj -<< /Length 2001 /Filter [ /ASCII85Decode /FlateDecode ] +<< /Length 2031 /Filter [ /ASCII85Decode /FlateDecode ] >> stream -Gau0F99Z,/&AJ$CE87RQ)>)p.gdbsT>F!HCS5YT'#%Wd00mE`f`;b:?0h;@SV"%umlnZ'sFar]U]%-TSB([EMAIL PROTECTED]'RteK:jd\'#F.:W,?18LojQ5s4Ys5l?I)[EMAIL PROTECTED]@_^>c/K;Fa`km4`94Ml9nh6Mf'/!k`k#oG>g^A?js&ujSW:3pY,hE;'qV8X]t4LjBRP97>m4lA"7ZmaPi-^-5sBnWB(,[EMAIL PROTECTED](tq/<rr^!5a1X;Le"eBNl!3U?i"[#*7P^HWJrV%&[EMAIL PROTECTED]<Y[I;:[60CQLBj!Wq7qdmiQk(%H4EU\45kfL%&DfYu,n4"Sf4U;?Zs;n?s)sldAEFFQmf2?k]+s/fPInTJ/d[!Z#tLp1!WT,C%iR%Z&/MHnHM;Y;DO6Gui$+>KV$G:+"0n+h3'[EMAIL PROTECTED]>[#3.@&4T8lV_\=>PY=GTYO]pMf&gIN]=,[EMAIL PROTECTED],[EMAIL PROTECTED]:((-B1snXjd=pgN(bP?2^&2$&[EMAIL PROTECTED]<aOA%>&k;E5H*>(iQbm\KZh]+mI'6`T0C8X;dE81.JTq12qhZ1&c&IS%-=MlT&YD3bkrB6hX3=pnu00>RM,7]PQ&HAe&^PBV4B.fpP/@#&.\Hk#njCD+d;$.R3',[EMAIL PROTECTED];l6#^g3a&KUqC=KR_NZ^<-U;ghZ[(E/cU("oJ)Z9GLWDn0$k4e?9:W)(:%]m33M#,[EMAIL PROTECTED],e^)*m0eT=p"o"dcZ:c(Y=D$Ck*)"=>0<6j&ZUWC+1a#27YSgLGZl%>[js`[^;.&OYI46sPP:)qO"[EMAIL PROTECTED]/H+koi.H+H](=sS7^eb_7FJH<PL:K5`I*-b=CrR *Vq3H+A4j$2a*eO6=_(TLnZsj]oMT_K!"Sl:[EMAIL PROTECTED]<M]d:H>[EMAIL PROTECTED]'oQD/f`"?Ze:I5^rg)/gL.8Y8968'hm8;6b3E?'L[?_5cCouL7/Z+.Yr>kpi\Y(qm_kN1+8n?'eq%o!A*4>;mbGZi7pm%d9_>![Pl;ppLOWBa%g9#>g4j)WR!1!SF<9c(K!^>0-j/fFiM$>5ZiBl3J.U?k.B]Ha[$"b_WXQ</2bca0'm=`lC$\>57#K6'E(\*RF)Mg)`8F58a6B+YJ^-&Ui1ed7:(C:h_SjG4kc_kZ6p'p,RZYrfZZ!OTpU[olBEn[*BT2"?qL1agUhC5QSb>^HCsEUV(8KmdRV7Kh)GZ;E!Ao(bnCV8BJAa<par!AjsELk^(15W7Ti0]9$-0>GF*0Tka=J?LYW$Qr(sGH6G=)+/4s8]Ll^.)42_ee;EK!>h,h,4AR5M)2<CY(NUco=?;q(rQ._rVtEgJ<>4I1>g-&,T0/8Q2;CpU]`O+]m4T>"/9JEns0%g&/'8?IB>[;"F'q?H634ndd^YINr]mXEuGUA!q-%ufeGAX2U!Y&=Se2[%oU&"2/2$[-E%=!/",Wo4<%34LjQiY`.GF7`B.?XdS"9\K^qD5+S0<h"cUDGE1;9s&Nsre8!fB<5UK1"3PEDjhZ^F,S8]DU`"?Na01$=2HDd;3$qKGW;mBfhNoG;`1:[.jHE./e2=o>\ro:[i:ZFP9Sa#MAdfLp=BZ[,aTblL<np%EWk)RjiL'(ZM66skT)[EMAIL PROTECTED]"/&TZmJTMaYYr?ui7%Bi^OTo7E*s6m;3Zr)RKt+5+Bs:%YpolB=Sbj3s-'g10.NH\c6cW8749(J$i=HI@;N1")0e_G(#F)'t:q.fN1e9NqtEMNPg&5(mbb-H_B6JFL`-,[QF`\_n*Ujl'2/h3/J!s$-YH'b#[b?>85nG6aS:f+6uOH)?jIkIs%o=hbE`YWQ!7ZsC :EI9&W/>[EMAIL PROTECTED]:H&~> +Gau0F99Yi7&AII3E3uYibe/UNoHUg)Eh(0"V^.$0N3nf]aFGi-he*L]BjcIZeRl:6$`'Ytqj[#WRt`lV`R!;X[fpd^o'aJ*j11bf>-6k8b0&`jUFXr/:*uLeifD'JqrO61BC\9]Ro8)rO*f<H]Ct<H]Oi:IjI_[nCSfW%.EC#!SF9OZotm*K8DaiTKuXU9SA`q*bM`VgDVA5glqjAkNY:+6**t>`W1E1s%[NM'IJ"XCW/Ts-Ic9,\p#IcHaG-!50]E`3Clcm!00Z970;@OsdTL%//['Eh0b(J7#G9I4rmLVofm]*1;[EMAIL PROTECTED]>`9F,4Upi2"Y3/kaq_V60*7IT[ZRCrC*i3:Zip-1J#tDTHERfcX,i<keL$F;[EMAIL PROTECTED],bp8FB)eDNq1PP-e%5-Q[Zs#H0=IZV1KjHlXru>IRF+@/O6#F;+uEnT[eQ\Np4a92n$R1S/8]?uf$]R)P+QA;S7_$8j4.k]"[EMAIL PROTECTED])^=.0BEHtTKP[,b)[EMAIL PROTECTED])Kp]Vi")[EMAIL PROTECTED]:#V0Gor";dCVkYYd2%0^V6t.G]P[b%.:UOL0?U`TK!pLN!\?C'Lh$9"PH2Ad>JIi/[EMAIL PROTECTED]<joD)!"ilZHN<=XT71L3=V-#jQ=QXnsWk4Ef<dj+sjf'EUcLtq^)p<"[EMAIL PROTECTED](eF<OlTNVi-%/M&UnXCu8oILYPf!7+&-E+]]MR`l&cT>[EMAIL PROTECTED]/I#)SG1FBE00Se>bk#L?Q>CQQjEB<[EMAIL PROTECTED]"N*D`"U8-'o0asbA1[m2I/a6$<P!-!1/:*G9!ibH8pg..*eOn$5;B)]O!dE7Y2=dg?kGVH2]CZ:V*Zh(%b%6P`+Q2`kqU*>PVc;N7ZF4rbKEt#FhZCr"i/sr1OZKUD`EWW RfaDWn*<8l]*Md!f;%`JT+2sR'KU,U)GC(gFOU]5Yipq.%LcjRe4)JgR<[2i4'j'kX(`Y'Q<?2%go2VQOCfFdOQ1>$<P4=,28]G;20MY6oHAZClnX,7K9Vj7,.cIpQ8gFbgeg!:`9eC=OX'^)H7dP)hAl)I''Oiei8KMNMR-K9K]YI^$2HS>pJq;[EMAIL PROTECTED]&[EMAIL PROTECTED];oI$t'?c?C/05(JlLI,HOd)+d*=P"[EMAIL PROTECTED]"c[&22Ct00EO<N&9aDRc5&[EMAIL PROTECTED]"LSF&HZO#:,^L]!_4bAY6e\KgoM(bCpEqq^BXG$"=).[A6>[EMAIL PROTECTED]>+dT?C3TMED"49TJCGhP&?-Q\Z^V[KK]X-<:61epU8B)$"u5_&OlJ#n2<g(Cg>_FKDd#=i5bkG*p,>[EMAIL PROTECTED]/=X!<l.^W8dkG)[EMAIL PROTECTED]))\/K'OZ^:[EMAIL PROTECTED],+gFItRR'i6!6!r"Id5.fVeNpVV:j))[EMAIL PROTECTED]>/NfornQYegCN+i]HKm4K\A4K>%.h\q$X?_cZ#S$P#8c#k:Y)+OE.Kq41#0)E0$mcbPFEUuTToksk8RYKVIH\1KOfU7Iu<_8BSRHM-;kRO]"po-jLPK#F,;e-SuYKDl)ZI/B\g$)(tHbV.GIt=18YhZX%EYuB,-5^=!\eBk%_]&rXiB4W$*9`9nJ00\>Br5#'^&)Yg!o:4(2O*0Up&o)$JB'E;QQDC[MWE1\'i`mnb0a_hW&DQZaF(Ts?4'a%+':[EMAIL PROTECTED]"XB]r0DG"hhbiaZeg*%=2U?K#9V5gfQg"kB9QTOo1Kdt[u\0SCut9"SrLsXTHR3Ff\3N'r1+otB/R%#::;g,8Deg;[EMAIL PROTECTED];&ttel'[EMAIL PROTECTED]/Kp,l]QFiH/>:HX 0j&*^g<E;3>Oqt-D3brZs5AanN7gY+[C5mcXs<CJ0XrrHf/:GV~> endstream endobj 103 0 obj @@ -626,10 +626,10 @@ >> endobj 104 0 obj -<< /Length 2453 /Filter [ /ASCII85Decode /FlateDecode ] +<< /Length 2425 /Filter [ /ASCII85Decode /FlateDecode ] >> stream -Gb!#]968lH'#*[5b\a1+M^%qnDMfFQ:=\'T4ZR>\Ekmd0#&=]&!D/>"^HTmi)B<^,`NH=FAJGLPkjGXhIK9:[EMAIL PROTECTED]@l/]?)4X`Y+d=rha,mY?\a*kUoqI1CpghKp#:a>(Q^V"ipb1i&E\c;RfmFi5I/LWS]$53Yj,a&[EMAIL PROTECTED]>[EMAIL PROTECTED]'"[EMAIL PROTECTED]>_pCI[ML^:.;7<r]kG'[EMAIL PROTECTED]([0P^HeYSAeqG3ua*arE#Xktn%Z`DXFX7adcS6k\o4AV<6"n]b6q(HnWn-l*;[EMAIL PROTECTED])P\c\I#fsk8kERrc$q_[:[EMAIL PROTECTED]@9BT24.dk=pn0;Buj24$YE+)!N>4-LA'NZ7_URYp41oFai2?KpX9Iq%LO.n/b-(&Or6M=gn=_8&6:Cm#,OG7-M,p,_ol$$^*ekr2I1<B#N\T^s\H)&AIYVF4g(-*=WLXkdN.b^nC#ZZbAFJ:u%N%^cQOds1F\-?hO$EpTW[Q%bt<hBK-rPr",iTnKgbjk_UA#q+=),8AQgk=*3$'/^"S%3mA#HB>>s43,1u([EMAIL PROTECTED]:Eo`RFjecCo"i([3'ZQ;^1*?6VrY/PC7";bei\`_g.\)!Y3Y9ZYARWj*dhY#n^tKc/"q['3+-FP+e^?Eq(=!p`Y$3R$ip'7)]_rZ`?jNkd;;`#CFH5hb48P<[EMAIL PROTECTED]@g8EP]B*rsQ9F3c8mP`N+':M'lhNLoG,[EMAIL PROTECTED]"PZ_SWW]:2.YIRFn[r\nbsT,fIc%/!D+`Qo"[EMAIL PROTECTED];.03RS13Cmm"uiV;L/&k4UGM)BlV8dK=pnkb"i'r7GNtX/_mCq]aCJhNao?<qQ%ML[I[`T9f+Um4`NN)NTlV:L]*PP(*!&Q.!",$[kJ'P2>!e5e^Q8PqbQ>Q[7_L$)XYpWm%b<TgaaQY:#X1YjD\"-or:E$B9nt5.P2-6CJ:Nebh5P,DAN `._0%Hhm%G>m>^js'91!NnnQ($mEG,#1E91*&l.b]mIl;#C4tLL9i[1Wo)j[7&FJ&'/oqYo\eLBqa;I?BS[PqX!9k^F5q""'ia=I,IE>UCs4f5g%g'%RqHNO`%AhsBSNkSj/"SuUp^k8<\\"9Dk<.KnIf91>ST258SXYCV3n+uO)BV"sPRK"g9l=3Vj+W"fjEA%qkgh,jJZD;t^3b+.htTBVmRn$!^o\[U^hS#Yi?(NE.0Pko4j_SjG_V7<1K1c([s$IOOV:1RkZ6qaW,a"[EMAIL PROTECTED])\[cO%>Al*K<R9csIog*\XS7/"KBZH[>[EMAIL PROTECTED]@]%qF+F"hioMlmO9t]\'l\%3Jta-=:pqt]TZ\A%L8ks!m\k"[EMAIL PROTECTED]"^b]\s"+Y)[EMAIL PROTECTED]'<X,OUSkMO<d6r8ni-?i>V)gT!REeW(ObSd;(<cPWU3tibNh`^7@;roL?En3W\_@"Tn[ha?j`A^-Tu\coDU`0o`WBX?EdJ!e&<<c9qNgMca+Zj.et-ea8;sC%0o]c"%>GJZH.5ldq[2ai%]EQk.#r_>,je*>f:Yr+e`7A[)PspT62mQo&IrE+<aJu7]$4<jVa87'O3V)0qQ!/*d7]6*N/##i8QgQS3V"\[\UeB5'C$LNO!eqkIfW/U3[1V+du4p!o5]h=_uK%5OOP3L9q&ChmWBe*#ht!Og,S60&[EMAIL PROTECTED]<A"WXCS\I3>1rpLe&%#.f9bgC$Yp6M9Ch)d-=+Ld$9_-GJ)YW3^]IkL=HOKQ:[EMAIL PROTECTED];t.k)u?_H<^3*'8Kn5P%paZ-D<?IGFG<[EMAIL PROTECTED],([EMAIL PROTECTED]"[EMAIL PROTECTED]([EMAIL PROTECTED]@\W/F^9Nc:0r9D24pefbgQ%G2-7Hb?Q]!_Z,\LefK [EMAIL PROTECTED],ppS90n6QPCJ5Ykm^iF9t7\J4B\kg[M)&$a+ThGS^`9g>/1$NAO'C(tkr>LI_[LAog)^7#Nidb:1Sa?s7WRr\Qq*=pBikXOU:jZ"62XtqkRT$+QAdB$sTEi&_:J<s*f#[l#jM_GPu7H%buM?GQgE*/c[m(lAqp2[Q'U6PP+(%sEl#nif:E'V1F#7Db(9d=_opN)YU%o,'Od=)d6FH;b6:)&';`Wk2'/^$<q4)X.g+\VLH`+]U+pOq'6b!AC5PlP+P;&U,*+^R3WjdW1ia%dOChWj[F0OA+ml-=>iqQ1\(a2`b')K(!k*H"&+VV?Mfl`Ub'`sZOPF);8]JWn$)I_X5WAr%W[12m"+lm,mWK]nUR$),[EMAIL PROTECTED]@uUT=3t+p<a8)Ie-f'eo,>OZ$cknJDWT6U-8tlZQFISNQA^?J\LU.p%`sEoP\<9gLnL:qirV6!cibkpX>*n~> +Gb!#]968lH'#*[5b\a1+M^%qnDMfIR:=\(OG]MG?m/]S+,A]?X"=-.%rUnomU-XD&Lg=5iasmI-TY%sfP<Z-eIU(e.EC3c2q#Af;Cg6T_#Qjegq9ANEmtR.g].;!(S""o_r,[EMAIL PROTECTED](MJW%mLLpbsr!2N280,YY[Gs)[EMAIL PROTECTED]/[EMAIL PROTECTED]<Xn;%hk]k^XlX"G^q2(=#?7Wa>/Ni3tqs[9[UiGpIG%8!bg[IR2DX94cIFiM1eU"_$f.G6gOjJu^G7Y6m"@m?n]Ik]]eHR\Wo9Ol7Kj)p:e\>2OT;N)[a0NUC_<[EMAIL PROTECTED]'+IedS$[D;9n0/Nd7k62!X!]fY15>+dKY[i.I)_j,dHl.-:[EMAIL PROTECTED])'h=3uEW9Am&\@<ZYE7R/b"V":K'Ot8QNcHB#K4:kE:5Ob*H);DqbQ[B4!p-Z&S+R-+\e=A,4mEuB;>;B1%;Bcpd20*B5[Ge;\2s49J'R>\dYIg2Z\lC!\KCon&Osc^?UlXDc!=2bZQIZ^U*ioKqd+LLg<]AfLCuqC2Ko:3+Z"S([EMAIL PROTECTED]"M+To$r,1;mgq^ogETB)s7:@9Umr<M5fs'2G1o*7uJ'cWFU9dWJqG0l9_AX>#ZnU]s<$(jp(L!0F`8[7$=H1bEug/`S3_2PUQ(m+PrK(G0+D6c$9h_<u<*5V>jSf6J'H,;*fjmVoZ]!N]8=]^Y(08XG5QL7gh+?>K)c&_K+>[EMAIL PROTECTED]&nT;'?`'R6<[EMAIL PROTECTED]/tiWIPQ<U&[EMAIL PROTECTED]'Sn`a"\a"'QSYph1TA`.0;.6Euf36tYlV7HRVSsP^hGRdfnmJ>278SS$!cZ(OtoSRs\f-Z,n.(an';^([EMAIL PROTECTED]"i1[p/c 6(BlJ#C83:$h(r&lTBdb2AXV(o<s6+j-f"QA>AjbM2ti=U2XrBF$ci&T4>0)+rS\V$[pr=fL0^EnlE5KslWBGZ/#_Mqm;,qA,h59t8Q&3'kg8(,VC;l,D?I3`Hi5m:Y=QpV3Qhu^]V%h"XhWT3"QE=:*NSsq9p97k]F0EL)O/kK<LOi0'>si?1H^qY3NXd>gM<[e&:tih.dOt<+2E8Zghs7913GohQAkAS)5Ajbj0_>[EMAIL PROTECTED]&PuQ?PD#a5EC^)N#RG9gGiQl::c1((R'\A5B2.&[EMAIL PROTECTED]:#:/>a?kM\EB-WY)SEIH^g6(`r!keSSVNXrW'G)I:[EMAIL PROTECTED];BA7M?:qig1]<AItj!C$^6WMZaS:Jk7Nns0WVE9<*GA++,JJH4Sl2k7Sn:ljc\$`L_r_?]()F(q?mGUbAI&qVm:#E:+n6D%.W7\^PK2VRiI-t>7+*Pj*8[.8!20,K##k(q'[j)LBE`5!N0K8Pc%-f/U5:/6DGg4LUNQ0&FJ1HImcX3f=IITh(/dLU(H%LE)?$XFO3DO_<GfplV,Ib]N3Al'/V"bKE'/R"n>4SZW>7<S%;[EMAIL PROTECTED]"Q4nO)ZY=L/K'1('jUW'o7S(g-_,[EMAIL PROTECTED]'D0ebotaYMHP)3ZLE/"9eZDPsrF)P*UH\J0/:=DiP3]XG-SI`^MG4()$I$8Lkc,pfS>q2EsqNn0.qm)X%O`k9j7&RaHD,@[Ob:((VCC$tLg1Gk%=eSA`,[EMAIL PROTECTED]'HtU3[1V+X3j-JSsar(0abm%GM\j)Rfg/hkp7U'J!8U,%39W?,F^A<8RNdM/)[lM_gN,3MRln&Ym*-6oq$a+l<opp`>5^>[Fdl<]rd#0"%Lbj5l;%$0o_mX?&&DjKu6$[,Q]eVg[ibBeJ/QOto')nPoA'Z*TeV$ZC 9*f=]m>a$!5j3T(:C$URimDL`LZha[:[EMAIL PROTECTED]:8TiTq^+>3d(`[>E$Y4g%GK]E,[ODFPgS`UPmsR<Hn`hT_4lMk)"MLS"^#b!qp\RYIWDhIra%12\[)b>^*b_uJ&fNBIX=?'REFH0rNkhpjlZ;<WA:-bcL.Z"8Ml'^PmFl<qLsX>[EMAIL PROTECTED];38Y+sM-^]42e37s1^9HKdr<FgA2"@M0P`/[EMAIL PROTECTED]<XDU6;[EMAIL PROTECTED]'ha\,[EMAIL PROTECTED]/Rd4=iqPb0Rg.ej:?g64/j%mCaRKS;s0+*(%I\BuCYp(o#Du9rX78E(BkZ]Th_);f$<[EMAIL PROTECTED]'[EMAIL PROTECTED]@GcZh*re51+)nd,RXIXc0T*OHV#N>'gcN~> endstream endobj 105 0 obj @@ -641,10 +641,10 @@ >> endobj 106 0 obj -<< /Length 2386 /Filter [ /ASCII85Decode /FlateDecode ] +<< /Length 2390 /Filter [ /ASCII85Decode /FlateDecode ] >> stream -Gatm=gN)%,&:O:Sn?(qKN"We0I<$r8g*TO_W9lt,a\X62TqM`0,bqkVhrRSfV$JMa1*1cFRTSq<m+G\.dH^#]lK[ep>9!?cFqrcU[XoWP^Rj>[EMAIL PROTECTED]@BH_^]m@&[EMAIL PROTECTED]<[EMAIL PROTECTED]'[EMAIL PROTECTED](p[pfSAdaM,(][T5UEl0A*rp;0\]fOk[k26aU>X%Loa*9R.2=7`i"._.1MFQhb\WPnPKU#4]&-UN&kZQSb9SCJC33$^qT(+O_s4Y#Mf,0R""87aDXj2OT)jJ!Pc>:G!PTQQFbA1=Q_-ahCOA,Nml58Xs((uRiQ`I:&]\1Z'om):]#k<%2-QDtpJ;%MFKlbdM+aCU2;Q)2=D8u,#;;Z&Mm30$+I^t[/$pTiRJU2I81[^)(5J?t`VeoKTrU,lem)[EMAIL PROTECTED]@oWL;&sJsc3+.+J>g&[')7/$TQ,-71d8[M=iBF3;5WW_F&*WBic6t7OO]3Ml#<`ZOP2]E$9?QV>6M*I]H*U"Pq/FaTa8lj4[VmHM(-I/,PP#[t6n+Db%Iq;LedXf#ii1NTi%4d5HpHe,"]BN/aU[<[EMAIL PROTECTED];2^6<BXjs6f_V&P.ht)EWUPPrL=97`>'V%s)a;[EMAIL PROTECTED](UGB*F)hEOI;]8$+ba%%-GrCA'W`2r1*jNMAa!qfXZbhAMDA-.i_td20<O-=I1-YMgCp)s[X_OeOfDqSFUlbV."2?Q+4J)`(@W*fBJ^'ob.<o/=1+/*r(uRdl.<sU8j8Qm''?48b!YO62W8dRFM+5ln\H2-E?Tg\=9srcO?)cQF!4WOKbgl:6.AXYuA+jSH<J)3c8;iu<mp[35PaXla[%Tc<bF>697p*G"9N#aXR]nT>S<b7[!d><'gG^[n!Fd+0DP/AX17+J"-^8772mCeS3-N7"fV+J 3YI>ukIGh7=M6*n-ni)or+CsnF$8.hBH^R2D\6j?sb]XCFmaqe:gHKE]Idocr_;X1%ddJ:;!3'S:V#WT+`qA^ua/1CVg2`"h?(f'M_ri<</A)d%cZ;DgftkaU+mChFm&(r1erQL1+iSA>O%E7<"t.AC\Dqf\C0F5Y/?rJjF),/GO2igBpuf*\SfKN2o=pgcYajU)[EMAIL PROTECTED];D;Fa*GuLSg+"M+/10P77UNq`$2g1TF>4Q*>$.aN2"Mn)/f1]U<PW7)fJ($!tjL<9"?DfFN"H>&-EGc%X^I$;(*0M;[EMAIL PROTECTED]'X=O;8c^$U'^p.Sf?2;5s4$[eA348L_FUB(*V^.OF)V=%-!Q'KX,o&[EMAIL PROTECTED];X\]_q%3KlrVoB(B2V#K!Re*qT[&9/U/")"2mna#,8;WrmjP6g^G[;'[EMAIL PROTECTED]:2kR)bBj`Uc.=sW[[5UA.MR?&5H#PdkB=?F[FM_)/&Y<9>h+\DG=@@IDT#9[MZ159]QO<mJj,'C^_I>)kH=Jej\2.D`$7S/k2_L\3.rrO=up7htDara:/1DpljIA`mX%g*qNeu)bQ_-IE/7M4t#?Ka3GL-+HZc/+QF4qr="POACVCu%'fXON&c9o$In5CNnIO^f;qol3RBq/[EMAIL PROTECTED]"BY<jT0`rr%2T^d<&[EMAIL PROTECTED](0Zuo$QBDdAaZ#HOaSGfE#I-CT"-_.A*g^\Zbi%7cV1cUB[hk(qP3D>A)HuD4q>g,g\n^qhJO-00CFO_0tkma_;$)N)mdBJ^64CGG[O*LmDLUNGFQLrpJQhg'Be4O.[S/KfJJp&`1&4,Fc9%/@Xa,Lc!h,dOlnn%35jKk3agAU+mrjfh[+P,rdQoj$noV4qrCdcld>V%Fo=>qWB4$q1bXj4Gd7b7`481^+<"1]f4K0rAt1;>1aQOn2oDj.gN>S=W,O"R,ofK^eCK6; f3Cl4&k1]R&U!^#D*R$b5/Mcnt"FPC)$GD$U]]r1JdF58k?*Ve`e4P*!4S25LEQV_"^'Y7kpf,0auc/\MOD^[_eLHEsMJ4&11<E3E"UDL.RgpU"[EMAIL PROTECTED]@T8cWl@&N=6=D+OHo&Si"B#uQbXDVjoT?`%qdNS1*B5a]/&&*Q#Wm]H$&]J=lf?Y#`R'"628qfKi!'4^p+rn.`q7<fF?1g5(^UJP6]DPR?9R_p8c6jFsp2GaQ5=$]'h-?OimK)[EMAIL PROTECTED](JrW<@]6BnW[Y<)0DU<b5PT0BujFOk^X7Q;'QCD_-n$$pl"N9KPb-C>Q=q0]\(H;4:`Tsu_Y7F!1fg!#I9pm:t[N)aKo[kh.ZR`D;;PHBt?h]N)q[W_;#$:~> +Gatm=968iG&AJ$Cn<RV)6:m9sUHQ.ZS2<s/1f;sogB0i1,&3!sq2"&0qQBT)G:?E^RuGB/J`[%2piaDXkf;f8oB"O$Q"[EMAIL PROTECTED];8BT-LYi$u2R4;4s&cG-lpf'N+3/+"L!P/$Z^+h]O2m0F:TV=4jXUlS8!3dna7`nFo)A:qCVcJr+7E,KVo(9Tafm1;.b6?o*lP$/A6c+.*1ga<:14_PUSTE$Yh<pUYcL`*+Z35M`,^M0V92p.<.[%Y$5HXq!umiF=)1fX:8!(,>it^&<sG:XeV=%0acBd#:V@&5M^"e]pNCbB6I'gjo!R?(L!DWp_j>;6SI#f;6fnWDDS.<[EMAIL PROTECTED]"g.%).H&I><ebc23+gWl\f'%Bc's49/UPa#Z$/l>P1**ORM)"o3TSXR,+uqAQH_."V0kE3m/"1D2t/X$sPFE"at,RJoQqlV\*[^7)YK<S6!mYVC_Bi6ZIQ)lV`.\/m/7Fq7]An=^n>rAX:<'M=5BjCiqTFK#WmX4j3nEBo;d+X_"fg\LspL<Yto5F!KQ[&=jZrKas#o:CUE:B2&#nLq.#P(+E/g-%Z[<k[$p3>3FO7ScA]uK,@+P7h>CA!h,e^-;!i<03jnNc>KY^d&X`UjVbD\^h#-rVsPeQ%J;_^.`',i3lf2KJ7)hHlR-&DT\m9->D4hERF^JYTAlq).ttjR2g'js8ED5kp',//Te[oeQ(Wc$WD6%XV8p\?3O'./O)Zd2;WlYq[L:C!dIpOLA&/i"3*i6KK\.H3`J/Wr2![2pcJkhR`,u(8hk2$PI0p([EMAIL PROTECTED]"arFeE44$Fmf?o!\PUhK)Q:6O$dPXsj:ah$_P&[EMAIL PROTECTED]>D&CGSHBgKRln=(;BCoK(K&LV5+>W@</b%\Ze9<3;[EMAIL PROTECTED]&DSlZD\WWB[#9<M PQLMQ6Aj#X1_XhU[IL4tYcp3=_psf?lq[gV;7umHcgJ06\8eHjn21d<,D^Po,D6ogbHdanoI2WoJLSUAV1/G&C0ZJ8#'[iRlRGSrd<hKX?Bsf;']9pSm/^9q$&[EMAIL PROTECTED]&3Yhb>0n2h*f^]::S,m6)/W+4h9lc-*8u!)jonO\.'u-EOtaNOd^s2JQqK;XqkmET;[EMAIL PROTECTED]&7U9UcPS*<Qm99Y+\D4,0$<D1n^l%GQPC?sr$n\U.91?/kpQHBV6W*C"%_44UU]Etod38:eB<K7Sg(_.-=UhMYC[N<0q;r4_G"UshSU5Q?\MIL7?R'YhUM-:tliS.r`rNoPhn.$a^pA%VU"G,[EMAIL PROTECTED]:Sq6)Ba)o0P]M6F(,A=qaeVBq>5RH%(qBj;0goF#eKlN.lf2/V1>bNh3MgHJY>1WVP+E#d,$gq#[^@;[EMAIL PROTECTED]"[EMAIL PROTECTED]'r;^j*aI=,RX;;PPg`6I+5cs]#)`<\T!!mF.lNPm>re#p%$n2"[EMAIL PROTECTED]"Z%jC\Y4VHRW!h>W5X1]apet%&[EMAIL PROTECTED])[EMAIL PROTECTED]"9&%?DliLstQ)\G8-!^CK,C<H10C&h/4?_Aqi!:'t,tB:[EMAIL PROTECTED]&BlKd!&Q1VuV\2j!_Z8SqX$auZTG3I?k)MU_88CAMM%=\4eMAp.d)ZpYY&hQD\#TMJ+VYMEHQ&&f8CmJj+LgDE7^2MKpmj@(+0DD^.?(W/7>S=X:[EMAIL PROTECTED]"<-Ng^mkS5J-kJ97>UiQijZt7t"^Zr%FbX_p1Qd^Uac8ID?S.gqoq\.H4Q;2PbjH<peFR%\I<`lJ000)Co":3e\Pt""&>h8.hqm31UiJA!]XENTZ*0=<Y(D7_FBs,?-hPbIX'Xk!knbF7X^t5<'2f=,P&OT/[EMAIL PROTECTED]/s%U(Po&[EMAIL PROTECTED]'%/nUpnGtdij)'SI^DV, aqkrl,VP*UQ=d;YOU:?XLmMV5X'[A4NF>irQP[DC:!A=OOdM@&Y[:dP>+D1J)K6ln9^+M0.ZKQUn6'7pOge*^#W`Runk_G2<?m<S\6`AKQJkqXk(9;5HE$H8<qk,DCZ?S'Rs^_%4.1q+k,,Wfu/>e5m_aiPi^*r"D7005GES-?T!BI;;lM>6#'7Ngh/F=X^+'.i4]$38ikmku.&,[EMAIL PROTECTED]>0Jhj!3c]$hE4EXV3HB*PV2^+TT%koWYbADn]1UpS`8T3XRPYoWo[h_OsitSSTqdNi*n0ihMWrh;ZK[gB-=#%;PP99>7Vs?n?c>7GL$?HBU6^$P)S.>RG+GESCtX<CaLbiasQJ]`)<ie\:(rp;sG9o0aXNdttJ'Bc#%I-!EZ:'q^qan(r?i!YupP[K~> endstream endobj 107 0 obj @@ -656,10 +656,10 @@ >> endobj 108 0 obj -<< /Length 1333 /Filter [ /ASCII85Decode /FlateDecode ] +<< /Length 1425 /Filter [ /ASCII85Decode /FlateDecode ] >> stream -Gb!;dgQ(#H&:O:SkcGesAk7g/V/Jqp98`de&a-,F(:$B`C*c`XbAR%B41^hIfs5(o85Uqhd*S3h&'l5Tr-G\qZWTGmQudfXGH6f<l?Jm*T0g!<C[NpoV<aAgfrfd0]j>gM3II:-?bU(]CR6sV(%%M>r%Y*nPTF7aE&O-UgYM=gb88GGcK6KnOsd0TJ^IlpnEAf83N<ll@@-_k9_(Od<OF=$>,i+cfL9qWF0h$/k.3%l0%hU%2G;e;F'Z8SL>'MNg0E5UU!N,k9L/gH=N=!YATn1uPg]oLR+.U4.VJmFE/>D6*-GNSLiK^#bG,JKH9[77&]9$[U9C/[EMAIL PROTECTED])G%!RLIU,"WOMUnr6iBhcCuR3?2f-)(a[%Z92;t&ZeKiX0u3WDehNfD1&d4>WFt$(,M)ZL[4r1!)(O7_iJ<P8YKO$-j0pi'Z3^!h.EYMp=sN%d2"aa:`+n&bSktIt]c:+8bP\(e#ttH\(>;3fbm"<0]%g=T<)lcV(#j05%3Yd7ms9t^CYY(Cqmru$VAm,0_=4<Rr1JD`k&cnX3Eet;>T'R;%Wa:":&9g%N;&/3!OA-o+$)R-d:p7KG-r)LkX.5'3*0DMJ`mAhe6OCg_Ca_0hgb)"pIiV_'1A>Y"Oc/A>n45NL"NugBr[e;^k8C2.SL)Wot.'GPV+>WbAQN;$-MRoRsFU.m@&@h"OGS=VC+,>UG&+ZK"uD3DioKl>&@t*mL<AM$c$nfCH%e&)B33!m30L=QPV__E_=siM%t?gPbl6Rb9gRq91_E$D`\X%#g^e,rm;iTi^n%"4]HQ'S#0N\c*d5S\CU#*&NYne\$4G5Tp%*@:?4-%RqkgBfprEME4D)='EE0'e5a2<UB%^m8%0ZliE9l/q(/4^;\r/f\G-Dp0*cr-F&=W(e"f<8WK+P]&U;@[&Z(GhaG..hbSDWT!atLlP\WEWRKfd+D$ij>PX!J8A>LUi/_::rgMLsW4Q"61k-uP B?Y=On+UJ7_ZD!X=R9O+jRX-WIXa&1([EMAIL PROTECTED]:&[EMAIL PROTECTED]:+PX5QX%21=\>aHlLVOj.marS!irN%K>n5.[WK]cIX";Xh<umfM]1PX6lt[1t',oX`>e>\#(UpHl-90&,SKXUKHjMM<Oj+DX2<[EMAIL PROTECTED]'X4e'b.oIm0D=hDIm+n-%MF"OJH)[&)q>[EMAIL PROTECTED];[EMAIL PROTECTED]<:[EMAIL PROTECTED](].oQsk+Qc\4=Oj\/>""bjfYrJSoYm*5RNE8QU_tHU6YFhO%Xh<1Y*_3-mE,b+hW&M<C'sce$<'I=L)!(Z#*L.7W~> +Gb!;dac>+F&[EMAIL PROTECTED]:JNU:`2:[EMAIL PROTECTED]"d;]p^-6#rZT&`Y^0t[J$ZQ:O4$th?9='%C,X'n(l"(#[<>Lkl82l?eZ!!j9]G[db8Sfhn39<+G:jBI/N)[EMAIL PROTECTED],Wt$/uD3]WhB*XO^<0Lj7\^Nn1,?5:I=#XM:jp([WIPVquu4YOc^PkOI\A\Z8=_3;M`4gddBtVV=I8L?/fdG&Ua)[EMAIL PROTECTED])<[EMAIL PROTECTED]:+OV%X4mMs,:!$)[EMAIL PROTECTED](`jm,qRoCO'5jf/_.+dY')</?a.Eo])/7h!l:U5\+<E5Wj&rdD'phlV_Fn4C*9::j/'OY%"[EMAIL PROTECTED]@osS%Ah&sWBU>6sgZ"1gaLr$q$mXKPkC_J-[B$,fXt,5d8DI5SE=qVs$.^GdW]`1^@@='1I_*KimZKPl!4U_GCD"W)6bZ4<lGeF;Y/?9_r'GU4'8MrE:o?mu;^=9[-3M*nH$t3qMXoR95VilA$gT]4_`16(>>IhZJoP(,T;FTA:OUmBWfVL3"#?8+jZ#0q(a^,8nh8=K@)U="X/H]7KD_38-X:kkLnDMZSlIWdOikB?]=XEFOI<-B#C)K<b)[EMAIL PROTECTED])nj4jbQHF/%?8`;5Wr)3L[pRE;7KYJ[+dX0Jh)V"s`<_l4b"fY4;X5.+b9?4Ys9YKB;B&lL$6Ql)sU1GqbH"5bWLN5]c481iKcI!sIdjKZufB;8``W'60ha3X5B+n50Bbj1Sc#j+1gsU.]L/2$E#sEHb4u_FN*P)[EMAIL PROTECTED]/I_#knOR<6;o*n!SrL;p4<@e,RA!NqVBjl8_BMJ_aKDt'FCR`H=q(P9UfZ`'[EMAIL PROTECTED]&khW'[EMAIL PROTECTED]"4D/_)^%?i8;HEKnF)[EMAIL PROTECTED]/4I7aA?=g0R=l2pPD.hk<Ln1*YW\?<c^7[/;idMPLC/f/ c0]bVW7dp%R_XnQG?`hP0V'sMbZoG!6"iEETO!&"YJMr`qkA_M_>U0#%aDo"0(Golo4YIje+X]'LYEQQ,dZsMCkUJQnOR:ZIY/Jq,aK2Hnjr3'U^Doq\=(NoKGrIB438l*=I;@NY0cB_06+1q]]10+^cU49AF;8Q7df[;jC3>hn4oRC/okY($>HflL"1e$r"KR[:[el?$7BO/t_)0RV;6/4;oXC\H``t*($2*%8n&[EMAIL PROTECTED]'Z6],7=.6.&)L;X,b]glJ+m]@&R7+]-XJO%U6_tPpd<_>JNcSqgXZ%&\<fZ78jI_+\"[EMAIL PROTECTED];.aqJN.c9Rg$>k<.E>)Gn"&B_7/g10PB%GI0ClC5l;mE!Pbp<[EMAIL PROTECTED](*q<EU"GlEG>F.B#+mg]aqT?'IRr#`Y&F&'H03nG~> endstream endobj 109 0 obj @@ -1083,43 +1083,43 @@ 49 0 obj << /S /GoTo -/D [105 0 R /XYZ 85.0 481.25 null] +/D [105 0 R /XYZ 85.0 438.5 null] >> endobj 51 0 obj << /S /GoTo -/D [107 0 R /XYZ 85.0 659.0 null] +/D [107 0 R /XYZ 85.0 628.6 null] >> endobj 53 0 obj << /S /GoTo -/D [107 0 R /XYZ 85.0 533.747 null] +/D [107 0 R /XYZ 85.0 503.347 null] >> endobj 55 0 obj << /S /GoTo -/D [107 0 R /XYZ 85.0 442.894 null] +/D [107 0 R /XYZ 85.0 412.494 null] >> endobj 60 0 obj << /S /GoTo -/D [107 0 R /XYZ 85.0 317.641 null] +/D [107 0 R /XYZ 85.0 287.241 null] >> endobj 62 0 obj << /S /GoTo -/D [107 0 R /XYZ 85.0 239.988 null] +/D [107 0 R /XYZ 85.0 209.588 null] >> endobj 64 0 obj << /S /GoTo -/D [109 0 R /XYZ 85.0 587.0 null] +/D [109 0 R /XYZ 85.0 547.4 null] >> endobj 89 0 obj @@ -1142,70 +1142,70 @@ xref 0 146 0000000000 65535 f -0000062765 00000 n -0000062969 00000 n -0000063062 00000 n +0000062831 00000 n +0000063035 00000 n +0000063128 00000 n 0000000015 00000 n 0000000071 00000 n 0000001715 00000 n 0000001835 00000 n 0000002021 00000 n -0000063226 00000 n +0000063292 00000 n 0000002156 00000 n -0000063289 00000 n -0000002293 00000 n 0000063355 00000 n -0000002430 00000 n +0000002293 00000 n 0000063421 00000 n +0000002430 00000 n +0000063487 00000 n 0000002567 00000 n -0000063485 00000 n +0000063551 00000 n 0000002704 00000 n -0000063550 00000 n -0000002840 00000 n 0000063616 00000 n -0000002976 00000 n +0000002840 00000 n 0000063682 00000 n +0000002976 00000 n +0000063748 00000 n 0000003112 00000 n -0000063747 00000 n +0000063813 00000 n 0000003249 00000 n -0000063812 00000 n +0000063878 00000 n 0000003384 00000 n -0000063876 00000 n -0000003521 00000 n 0000063942 00000 n +0000003521 00000 n +0000064008 00000 n 0000003658 00000 n -0000064006 00000 n -0000003793 00000 n 0000064072 00000 n +0000003793 00000 n +0000064138 00000 n 0000003930 00000 n -0000064136 00000 n +0000064202 00000 n 0000004065 00000 n -0000064201 00000 n +0000064267 00000 n 0000004202 00000 n -0000064265 00000 n +0000064331 00000 n 0000004339 00000 n -0000064329 00000 n -0000004475 00000 n 0000064395 00000 n +0000004475 00000 n +0000064461 00000 n 0000004612 00000 n -0000064459 00000 n -0000004748 00000 n 0000064525 00000 n -0000004884 00000 n +0000004748 00000 n 0000064591 00000 n -0000005021 00000 n +0000004884 00000 n 0000064656 00000 n +0000005021 00000 n +0000064721 00000 n 0000005157 00000 n -0000064723 00000 n +0000064788 00000 n 0000005292 00000 n 0000005899 00000 n 0000006022 00000 n 0000006063 00000 n -0000064790 00000 n +0000064855 00000 n 0000006196 00000 n -0000064857 00000 n +0000064922 00000 n 0000006329 00000 n -0000064924 00000 n +0000064989 00000 n 0000006462 00000 n 0000009121 00000 n 0000009229 00000 n @@ -1230,63 +1230,63 @@ 0000034411 00000 n 0000034534 00000 n 0000034568 00000 n -0000064989 00000 n +0000065054 00000 n 0000034703 00000 n 0000034874 00000 n 0000037204 00000 n 0000037327 00000 n 0000037354 00000 n -0000065055 00000 n +0000065120 00000 n 0000037489 00000 n 0000039524 00000 n 0000039632 00000 n -0000042380 00000 n -0000042488 00000 n -0000044715 00000 n -0000044825 00000 n -0000046920 00000 n -0000047030 00000 n -0000049577 00000 n -0000049687 00000 n -0000052167 00000 n -0000052277 00000 n -0000053704 00000 n -0000065119 00000 n -0000053814 00000 n -0000053980 00000 n -0000054279 00000 n -0000054507 00000 n -0000054800 00000 n -0000055024 00000 n -0000055371 00000 n -0000055702 00000 n -0000055951 00000 n -0000056248 00000 n -0000056497 00000 n -0000056817 00000 n -0000057137 00000 n -0000057470 00000 n -0000057789 00000 n -0000057985 00000 n -0000058231 00000 n -0000058459 00000 n -0000058723 00000 n -0000059014 00000 n -0000059402 00000 n -0000059868 00000 n -0000060128 00000 n -0000060615 00000 n -0000061026 00000 n -0000061373 00000 n -0000061635 00000 n -0000061869 00000 n -0000061983 00000 n -0000062094 00000 n -0000062210 00000 n -0000062322 00000 n -0000062431 00000 n -0000062538 00000 n -0000062655 00000 n +0000042351 00000 n +0000042459 00000 n +0000044683 00000 n +0000044793 00000 n +0000046918 00000 n +0000047028 00000 n +0000049547 00000 n +0000049657 00000 n +0000052141 00000 n +0000052251 00000 n +0000053770 00000 n +0000065184 00000 n +0000053880 00000 n +0000054046 00000 n +0000054345 00000 n +0000054573 00000 n +0000054866 00000 n +0000055090 00000 n +0000055437 00000 n +0000055768 00000 n +0000056017 00000 n +0000056314 00000 n +0000056563 00000 n +0000056883 00000 n +0000057203 00000 n +0000057536 00000 n +0000057855 00000 n +0000058051 00000 n +0000058297 00000 n +0000058525 00000 n +0000058789 00000 n +0000059080 00000 n +0000059468 00000 n +0000059934 00000 n +0000060194 00000 n +0000060681 00000 n +0000061092 00000 n +0000061439 00000 n +0000061701 00000 n +0000061935 00000 n +0000062049 00000 n +0000062160 00000 n +0000062276 00000 n +0000062388 00000 n +0000062497 00000 n +0000062604 00000 n +0000062721 00000 n trailer << /Size 146 @@ -1294,5 +1294,5 @@ /Info 4 0 R >> startxref -65173 +65238 %%EOF
Modified: hadoop/core/trunk/src/contrib/hod/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hod/CHANGES.txt?rev=662795&r1=662794&r2=662795&view=diff ============================================================================== --- hadoop/core/trunk/src/contrib/hod/CHANGES.txt (original) +++ hadoop/core/trunk/src/contrib/hod/CHANGES.txt Tue Jun 3 06:37:54 2008 @@ -8,6 +8,10 @@ NEW FEATURES IMPROVEMENTS + + HADOOP-3376: Provide a mechanism to detect and handle violations to + resource manager limits. (Vinod Kumar Vavilapalli via ddas) + BUG FIXES Modified: hadoop/core/trunk/src/contrib/hod/bin/hod URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hod/bin/hod?rev=662795&r1=662794&r2=662795&view=diff ============================================================================== --- hadoop/core/trunk/src/contrib/hod/bin/hod (original) +++ hadoop/core/trunk/src/contrib/hod/bin/hod Tue Jun 3 06:37:54 2008 @@ -49,7 +49,8 @@ from hodlib.Common.descGenerator import * from hodlib.Common.util import local_fqdn, need_to_allocate, filter_warnings,\ get_exception_error_string, hodInterrupt, \ - HOD_INTERRUPTED_MESG, HOD_INTERRUPTED_CODE + HOD_INTERRUPTED_MESG, HOD_INTERRUPTED_CODE,\ + TORQUE_USER_LIMITS_COMMENT_FIELD from hodlib.Common.tcp import tcpError, tcpSocket from hodlib.Hod.hod import hodHelp @@ -145,6 +146,9 @@ ('update-worker-info', 'bool', 'Specifies whether to update Worker Info after allocation', False, False, False, True), + ('job-feasibility-attr', 'string', 'Specifies whether to check job feasibility - resource manager and/or scheduler limits, also gives the attribute value', + False, None, False, True), + ('title', 'string', 'Title for the current HOD allocation.', True, "HOD", False, True, 'N'), Modified: hadoop/core/trunk/src/contrib/hod/hodlib/Common/setup.py URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hod/hodlib/Common/setup.py?rev=662795&r1=662794&r2=662795&view=diff ============================================================================== --- hadoop/core/trunk/src/contrib/hod/hodlib/Common/setup.py (original) +++ hadoop/core/trunk/src/contrib/hod/hodlib/Common/setup.py Tue Jun 3 06:37:54 2008 @@ -34,7 +34,7 @@ reComma = re.compile("\s*,\s*") reDot = re.compile("\.") reCommentHack = re.compile("^.*?\s+#|;.*", flags=re.S) -reCommentNewline = re.compile("\W$") +reCommentNewline = re.compile("\n|\r$") reKeyVal = r"(?<!\\)=" reKeyVal = re.compile(reKeyVal) reKeyValList = r"(?<!\\)," Modified: hadoop/core/trunk/src/contrib/hod/hodlib/Common/util.py URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hod/hodlib/Common/util.py?rev=662795&r1=662794&r2=662795&view=diff ============================================================================== --- hadoop/core/trunk/src/contrib/hod/hodlib/Common/util.py (original) +++ hadoop/core/trunk/src/contrib/hod/hodlib/Common/util.py Tue Jun 3 06:37:54 2008 @@ -24,6 +24,10 @@ HOD_INTERRUPTED_CODE = 127 HOD_INTERRUPTED_MESG = "Hod interrupted. Cleaning up and exiting" +TORQUE_USER_LIMITS_COMMENT_FIELD = "User-limits exceeded. " + \ + "Requested:([0-9]*) Used:([0-9]*) MaxLimit:([0-9]*)" +TORQUE_USER_LIMITS_EXCEEDED_MSG = "Requested number of nodes exceeded " + \ + "maximum user limits. " class AlarmException(Exception): def __init__(self, msg=''): Modified: hadoop/core/trunk/src/contrib/hod/hodlib/Hod/hadoop.py URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hod/hodlib/Hod/hadoop.py?rev=662795&r1=662794&r2=662795&view=diff ============================================================================== --- hadoop/core/trunk/src/contrib/hod/hodlib/Hod/hadoop.py (original) +++ hadoop/core/trunk/src/contrib/hod/hodlib/Hod/hadoop.py Tue Jun 3 06:37:54 2008 @@ -186,11 +186,14 @@ count = 0 status = False state = 'Q' + userLimitsFirstFlag = True + while state == 'Q': if hodInterrupt.isSet(): raise HodInterruptException() - state = self.__nodePool.getJobState() + jobInfo = self.__nodePool.getJobInfo() + state = jobInfo['job_state'] if (state==False) or (state!='Q'): break count = count + 1 @@ -198,11 +201,28 @@ time.sleep(0.5) else: time.sleep(10) - + + if self.__cfg['hod'].has_key('job-feasibility-attr') and \ + self.__cfg['hod']['job-feasibility-attr']: + (status, msg) = self.__isJobFeasible() + if status == "Never": + self.__log.critical(TORQUE_USER_LIMITS_EXCEEDED_MSG + msg + \ + "This cluster cannot be allocated now.") + return -1 + elif status == False: + if userLimitsFirstFlag: + self.__log.critical(TORQUE_USER_LIMITS_EXCEEDED_MSG + msg + \ + "This cluster allocation will succeed only after other " + \ + "clusters are deallocated.") + userLimitsFirstFlag = False + if state and state != 'C': status = True return status + + def __isJobFeasible(self): + return self.__nodePool.isJobFeasible() def __get_ringmaster_client(self): ringmasterXRS = None @@ -434,13 +454,19 @@ walltime = self.__cfg['hod']['walltime'] self.jobId, exitCode = self.__nodePool.submitNodeSet(nodeSet, walltime) if self.jobId: + jobStatus = None try: jobStatus = self.__check_job_status() except HodInterruptException, h: self.__log.info(HOD_INTERRUPTED_MESG) self.delete_job(self.jobId) - self.__log.info("Job %s removed from queue." % self.jobId) + self.__log.info("Cluster %s removed from queue." % self.jobId) raise h + else: + if jobStatus == -1: + self.delete_job(self.jobId); + status = 4 + return status if jobStatus: self.__log.info("Cluster Id %s" \ @@ -545,13 +571,13 @@ self.__log.debug("Calling rm.stop()") ringClient.stopRM() self.__log.debug("Returning from rm.stop()") - self.__log.info("Job Shutdown by informing ringmaster.") + self.__log.info("Cluster Shutdown by informing ringmaster.") else: self.delete_job(self.jobId) - self.__log.info("Job %s removed from queue directly." % self.jobId) + self.__log.info("Cluster %s removed from queue directly." % self.jobId) raise h else: - self.__log.critical("No job found, ringmaster failed to run.") + self.__log.critical("No cluster found, ringmaster failed to run.") status = 5 elif self.jobId == False: Modified: hadoop/core/trunk/src/contrib/hod/hodlib/Hod/nodePool.py URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hod/hodlib/Hod/nodePool.py?rev=662795&r1=662794&r2=662795&view=diff ============================================================================== --- hadoop/core/trunk/src/contrib/hod/hodlib/Hod/nodePool.py (original) +++ hadoop/core/trunk/src/contrib/hod/hodlib/Hod/nodePool.py Tue Jun 3 06:37:54 2008 @@ -101,13 +101,17 @@ def getServiceId(self): raise NotImplementedError - def getJobState(self): + def getJobInfo(self): raise NotImplementedError def deleteJob(self, jobId): """Delete a job, given it's id""" raise NotImplementedError + def isJobFeasible(self): + """Check if job can run by looking at any user/job limits""" + raise NotImplementedError + def updateWorkerInfo(self, workerInfoMap): """Update information about the workers started by this NodePool.""" raise NotImplementedError Modified: hadoop/core/trunk/src/contrib/hod/hodlib/NodePools/torque.py URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hod/hodlib/NodePools/torque.py?rev=662795&r1=662794&r2=662795&view=diff ============================================================================== --- hadoop/core/trunk/src/contrib/hod/hodlib/NodePools/torque.py (original) +++ hadoop/core/trunk/src/contrib/hod/hodlib/NodePools/torque.py Tue Jun 3 06:37:54 2008 @@ -21,7 +21,8 @@ from hodlib.Hod.nodePool import * from hodlib.Schedulers.torque import torqueInterface from hodlib.Common.threads import simpleCommand -from hodlib.Common.util import get_exception_string, args_to_string, local_fqdn +from hodlib.Common.util import get_exception_string, args_to_string, local_fqdn, \ + TORQUE_USER_LIMITS_COMMENT_FIELD class TorqueNodeSet(NodeSet): def __init__(self, id, numNodes, preferredList, isPreemptee): @@ -201,6 +202,7 @@ jobId, exitCode = self.__torque.qsub(argList, stdinList) + ## UNUSED CODE: LINE ## nodeSet.qsubId = jobId return jobId, exitCode @@ -224,6 +226,7 @@ return status + ## UNUSED METHOD ?? ## def getWorkers(self): hosts = [] @@ -233,6 +236,7 @@ return hosts + ## UNUSED METHOD ?? ## def pollNodeSet(self, nodeSet): status = NodeSet.COMPLETE nodeSet = self.nodeSetDict[0] @@ -264,17 +268,17 @@ return id - def getJobState(self): + def getJobInfo(self): #torque error code when credentials fail, a temporary condition sometimes. credFailureErrorCode = 171 credFailureRetries = 10 i = 0 - jobState = False + self.__jobInfo = None while i < credFailureRetries: qstatInfo, exitCode = self.__torque.qstat(self.getServiceId()) if exitCode == 0: - jobState = qstatInfo['job_state'] + self.__jobInfo = qstatInfo break else: if exitCode == credFailureErrorCode: @@ -282,11 +286,35 @@ i = i+1 else: break - return jobState + return self.__jobInfo def deleteJob(self, jobId): exitCode = self.__torque.qdel(jobId) return exitCode + + def isJobFeasible(self): + comment = None + msg = None + if self.__jobInfo.has_key('comment'): + comment = self.__jobInfo['comment'] + try: + if comment: + commentField = re.compile(self._cfg['hod']['job-feasibility-attr']) + match = commentField.search(comment) + if match: + reqUsage = int(match.group(1)) + currentUsage = int(match.group(2)) + maxUsage = int(match.group(3)) + msg = "Current Usage:%s, Requested:%s, Maximum Limit:%s " % \ + (currentUsage, reqUsage, maxUsage) + if reqUsage > maxUsage: + return "Never", msg + if reqUsage + currentUsage > maxUsage: + return False, msg + except Exception, e: + self._log.error("Error in isJobFeasible : %s" %e) + raise Exception(e) + return True, msg def runWorkers(self, args): return self.__torque.pbsdsh(args) Added: hadoop/core/trunk/src/contrib/hod/support/checklimits.sh URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hod/support/checklimits.sh?rev=662795&view=auto ============================================================================== --- hadoop/core/trunk/src/contrib/hod/support/checklimits.sh (added) +++ hadoop/core/trunk/src/contrib/hod/support/checklimits.sh Tue Jun 3 06:37:54 2008 @@ -0,0 +1,57 @@ +#!/bin/bash + +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +COMMANDS=( "qstat" "qalter" "checkjob" ) +ERROR=0 +for (( i=0; i<[EMAIL PROTECTED]; i++ )) +do + cmd=${COMMANDS[$i]} + CMD_PATH=`which $cmd 2>/dev/null` + if [ $? -ne 0 ] + then + echo Could not find $cmd in PATH + ERROR=1 + fi +done +if [ $ERROR -ne 0 ] +then + exit 1 +fi + +jobs=`qstat -i |grep -o -e '^[0-9]*'` +for job in $jobs +do + echo -en "$job\t" + PATTERN="job [^ ]* violates active HARD MAXPROC limit of \([0-9]*\) for user [^ ]*[ ]*(R: \([0-9]*\), U: \([0-9]*\))" + OUT=`checkjob $job 2>&1|grep -o -e "$PATTERN"` + if [ $? -eq 0 ] + then + echo -en "| Exceeds resource limits\t" + COMMENT_FIELD=`echo $OUT|sed -e "s/$PATTERN/User-limits exceeded. Requested:\2 Used:\3 MaxLimit:\1/"` + qstat -f $job|grep '^[ \t]*comment = .*$' >/dev/null + if [ $? -ne 0 ] + then + echo -en "| Comment field updated\t" + qalter $job -W comment="$COMMENT_FIELD" >/dev/null + else + echo -en "| Comment field already set\t" + fi + else + echo -en "| Doesn't exceed limits.\t" + fi + echo +done Modified: hadoop/core/trunk/src/docs/src/documentation/content/xdocs/hod_admin_guide.xml URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/docs/src/documentation/content/xdocs/hod_admin_guide.xml?rev=662795&r1=662794&r2=662795&view=diff ============================================================================== --- hadoop/core/trunk/src/docs/src/documentation/content/xdocs/hod_admin_guide.xml (original) +++ hadoop/core/trunk/src/docs/src/documentation/content/xdocs/hod_admin_guide.xml Tue Jun 3 06:37:54 2008 @@ -313,6 +313,32 @@ <p><em>python logcondense.py -p ~/hadoop-0.17.0/bin/hadoop -d 7 -c ~/hadoop-conf -l /user</em></p> </section> </section> + <section> + <title>checklimits.sh - Tool to update torque comment field reflecting resource limits</title> + <p>checklimits is a HOD tool specific to torque/maui environment. It + updates torque comment field when newly submitted job(s) violate/cross + over user limits set up in maui scheduler. It uses qstat, does one pass + over torque job list to find out queued or unfinished jobs, runs maui + tool checkjob on each job to see if user limits are violated and then + runs torque's qalter utility to update job attribute 'comment'. Currently + it updates the comment as <em>User-limits exceeded. Requested:([0-9]*) + Used:([0-9]*) MaxLimit:([0-9]*)</em> for those jobs that violate limits. + This comment field is then used by HOD to behave accordingly depending on + the type of violation.</p> + <section> + <title>Running checklimits.sh</title> + <p>checklimits.sh is available under hod_install_location/support + folder. This is a shell script and can be run directly as <em>sh + checklimits.sh </em>or as <em>./checklimits.sh</em> after enabling + execute permissions. In order for this tool to be able to update + comment field of jobs from different users, it has to be run with + torque administrative privileges. This tool has to be run repeatedly + after specific intervals of time to frequently update jobs violating + constraints, for e.g. via cron. Please note that the resource manager + and scheduler commands used in this script can be expensive and so + it is better not to run this inside a tight loop without sleeping.</p> + </section> + </section> </section> </body> </document> Modified: hadoop/core/trunk/src/docs/src/documentation/content/xdocs/hod_config_guide.xml URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/docs/src/documentation/content/xdocs/hod_config_guide.xml?rev=662795&r1=662794&r2=662795&view=diff ============================================================================== --- hadoop/core/trunk/src/docs/src/documentation/content/xdocs/hod_config_guide.xml (original) +++ hadoop/core/trunk/src/docs/src/documentation/content/xdocs/hod_config_guide.xml Tue Jun 3 06:37:54 2008 @@ -104,6 +104,27 @@ specified as key-value pairs. These will be used to generate a hadoop-site.xml on the submit node that should be used for running MapReduce jobs.</li> + <li>job-feasibility-attr: A regular expression string that specifies + whether and how to check job feasibility - resource + manager or scheduler limits. The current + implementation corresponds to the torque job + attribute 'comment' and by default is disabled. + When set, HOD uses it to decide what type + of limit violation is triggered and either + deallocates the cluster or stays in queued state + according as the request is beyond maximum limits or + the cumulative usage has crossed maxumum limits. + The torque comment attribute may be updated + periodically by an external mechanism. For e.g., + comment attribute can be updated by running <a href= +"hod_admin_guide.html#checklimits.sh+-+Tool+to+update+torque+comment+field+reflecting+resource+limits"> + checklimits.sh</a> script in hod/support directory, + and then setting job-feasibility-attr equal to the + value TORQUE_USER_LIMITS_COMMENT_FIELD i.e + "User-limits exceeded. Requested:([0-9]*) + Used:([0-9]*) MaxLimit:([0-9]*)" will make HOD + behave accordingly. + </li> </ul> </section> Modified: hadoop/core/trunk/src/docs/src/documentation/content/xdocs/hod_user_guide.xml URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/docs/src/documentation/content/xdocs/hod_user_guide.xml?rev=662795&r1=662794&r2=662795&view=diff ============================================================================== --- hadoop/core/trunk/src/docs/src/documentation/content/xdocs/hod_user_guide.xml (original) +++ hadoop/core/trunk/src/docs/src/documentation/content/xdocs/hod_user_guide.xml Tue Jun 3 06:37:54 2008 @@ -404,7 +404,8 @@ <td> 4 </td> <td> Scheduler failure </td> <td> 1. Requested more resources than available. Run <code>checknodes cluster_name</code> to see if enough nodes are available. <br /> - 2. Torque is misconfigured, the path to Torque binaries is misconfigured, or other Torque problems. Contact system administrator. </td> + 2. Requested resources exceed resource manager limits. <br /> + 3. Torque is misconfigured, the path to Torque binaries is misconfigured, or other Torque problems. Contact system administrator. </td> </tr> <tr> <td> 5 </td>
