You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by ac...@apache.org on 2008/09/18 05:02:51 UTC

svn commit: r696551 [2/3] - in /hadoop/core/trunk: ./ docs/ src/contrib/streaming/src/java/org/apache/hadoop/streaming/ src/core/org/apache/hadoop/util/ src/docs/src/documentation/content/xdocs/ src/mapred/org/apache/hadoop/mapred/pipes/

Modified: hadoop/core/trunk/docs/streaming.pdf
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/docs/streaming.pdf?rev=696551&r1=696550&r2=696551&view=diff
==============================================================================
--- hadoop/core/trunk/docs/streaming.pdf (original)
+++ hadoop/core/trunk/docs/streaming.pdf Wed Sep 17 20:02:51 2008
@@ -394,10 +394,10 @@
 >>
 endobj
 71 0 obj
-<< /Length 2101 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 2075 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gau0ECN%rc'`IH,+gbT;@%en3ATcX\[]A-sIBE#n%,3J_Z=L;(7?s&&jPTFkAR3HQmA1\P,c3,TQfjrem\0T"0mUI"I%+6X)LgR;!gB"+kBZRKEN@\m0(k&k4[V]YEq8PWjk0lTLH+Mcl.e-I$?%KTM-3&R_N/7b&%\!MVIM0c`h1QmiWnM$err4#7d)];Dtcr.qCA8lAusq6,l4d\pm/%8aSPF$+X=GWl+4XJOrUTdQWYYGOnVq7%9iJIQ&JaTLou.'o^VU<IOMLRM\IB1gK;*-m)olpe*UqciSgY`N2$QOD^F;G,YAFYKYT<i(!BFLEIV]G15LiFZ&sY"\,"A4'@K?)Sbn.Q2e]6(R/q:Zg-k!58e=g%'_;$*60]+K+oC6]Ug3L*"We'DmQ7\tg\"(H@9UTlr/Me`k7V,h%jbV-2C"N'2$(HBF+b)lJa@Z5Y\!dV<6-XaqXFfV9tq)L$K**0h2;nCN2;=Z%72K9.QlBUGYh640de-!k86=FG`H^RL.Qd9p1a3WLF\*&f7s:L05le@$_'`S*c<>J[Xr[1=JgtaA^7==4I]H(hnXZZe#Y+[$Gd'mcYV%RG3i5Go)'`e7K_5NPINNUm;<P6((ZnRZ&.LbZXc`F]IL9,nB32aD;n^S,TmpsIWboY(G4"LNf+8r&n*YOL-h0>,ki3T-rO!]Xk_PoekNL`AV/u=7R\a<4`@+m.B#doB$;*Y-n^&RA.dW4K+/qX\;gg+3>OR*"GQ<k=:&5Q`JL&""a+FpF\k;;^oHD/Y+D6rT#/?Jjq.ZRkqmi(`N2`?/;?:+$;o]/%"T'oKH:Dm$`M0GXs?W'PkQA-s"8T5TVq$o(j$B;dCh(^8sWl!.I!eRBRK&!-B@HFLT3B\SJ=hb*d*NjSfeK^?%']`&=RpPq?_k@iqSdQCOTVIEQ0f)He_A])+V%NH>=9f1:hte,I@DI!ZJ>nQ\=?:m\$uqm3^MgRZ?jfL(Q7-U(;j#,T2@O5=ca
 =+`UO&51L</W]H[D<XrC-h4X@?2Nj9u9Wld%0i'K[=c1+YiJ-gjgDlo-_VJscQXbWr$CoBJ:sUL!]u53L!@;nC)km+.aMLY.k?+LD4Z#+1BQeu*>!$<.nK\]n%;RYa[gJK%)g]lhH(sS<2>&\lD*J$de*^9\5jb^O2AIngZfP5-m[.J)o_nLFq>r[7'iYqJ3/"Wj?t(YED&C!L,s[V.Wj=HR"Bu>#@g!E`ks5QrgL')%.L>jfPCd">9br,'-j>o7Yf7OY5ICD0)Qi)JDV2E/TEsZOJ0U$EJ#Y<_-jFWKofES:m3e3/X%Qtu3oNVFDg;U+c>ahHRiR^*iod8Wg,9q?%N1(e:6,Y-*SY0u#.2'lXEpAYI*;\K9l2FC<^;%Yjoj*pB6l8@di!<CC?sM2X#PSmSQ<j[hPP,s68#0)PSY&B8T@foXTf)-DpMR4$@b4R`V2FD5fT+!G7:p_q-<-g8r9&GM[OoqI/7+X/&0t"HTuUXKn-1@i;#ae$,o_?Xll(9e;#+)O""XB8uZL_?H??i>HPC<dj!kd#,-UthWT'e^(IKBpqVIYSNnNT(8U0PJN%)p=*"eCSjR1H8%;pjT[![9Q-Yl:BTS&VnL#*GaE1f5`Zr\kJEH>0QT(]CKFoRMb9hDWN@!U7boTe"-l?X<n*NY2gt=!b5ja*SoQt\r;M;mOT>\'q,Srdh]QW8?MbmssH<,L11--dFQGu6#*0fmDJbc.JkUXR%^F#IkjO.&!6LLV[*Al@[/-0_DD3pNA!,KjbCR6IQGJY>.FdQZge>i(LP19UAlo^qt=h[OF[>FRE]XX"'%L4?6kEoej:`j<h=c:\#Z_9j38h3ai(H7Cp(-P]b3+eQ>Gf9.`"bktug<V3.<Y'`$dAXpR_jcdk)qTb/On-1S>"$N]HBW=/e<T<tH#fP^2.jce@Kqp`=L:5Wp?+s0iIUGpbn78XMP^F(o\iX$<WH+&>OarGphu.p(cZ'g[gRXsc,'.YS;Y
 8OMT6tul8pWp>0(aCjPdYhb^nF$%iAW(KLro7eA,.X6Q+5LU9<%-5[J($W0PhDn04ojYTMbY\Ce8#]"'R4A\)?9\e=X;j!pK`]loFUDuc'5BLR7*rWN=]SY6~>
+Gau0ECN%rc'`IH,+gbT;TV3[sATcX\ooV.$?Y_e5__qq1/D4iM;5L'Jq=hLI?Ws2kVAXt2VBh=kk8p4A-pM(a?7fgIAsT]Qhq,3M,c9OG*rL09lLT^&IH",MOHHf:rAK"OZ@hNU#<b5bF:F/FNFb4.lV8f)=@UceV8P/1A%=DpHEn5L)&KY$jN/l<T36EPB6$.?$,nN,"^`S'e)B:*[MC&+g0Y1)YoQV!_^1W0BTBaL1*MR'\5I.j[#ZhMZn=^fjho+LY9"-IOVM,s&A^TNo'O9)m!q(O](T>LDMN*L9c/:/q$fukZp6n_*5fsnZ""Y>7%1&F_=Hpi(\85QkFZ,XL1N;'X0J#mE@on_iXe]n6s15ppeJZh,Cgnlk,5$1n.^Qr$Zu-F=QSrJ'<El>i];P/$d3UJY9AW5Ye+!KbI*dhhj-:>L7pm+]KiF$iF=@uN[7'i4j2u[%oW4'X:TOB7#B"(;T+\%+d@'`T'Rjf.&_O;7Yp"@#1"Qdj.!2['&U!C>5e3SMIFScTtgF![4uH*1Pn91m0(@.cjgK-<7/.u7Ff_jM&#dpg_W)tas*u"XC1eH-I(n3]gu7sIpfnPJFDkJY"``E)aoq0rC1dCiqV=X)3Y6-[TF"6q1I<XnZ6U>OGXc;3J*i\(8tT\`?gh*YSohqTh8IN3t3VQOf@;?*c)tb#24qi6,G"EU6LJ*f?rCooV4f!ArK@sQ\^FCbNQAo=9&tdX8$'[@p*kId.Rs/[D6"L33m2dL,uTt3iJqpYc@K%WrA=i]s+;uH%Z0-3d"e"0e8FhM]km$6I\el+`IL@d%1f[J=8U^8tn.6Gph%b+-IEKWgOo`K,VTPHBs7RaV)fV,otMoR\"h_M%_E5@9<+nB*Hb\7pY/H-V/l04^[eCKQ8-9In!kC3.>GkRbq`eSFI$N*Z%^c`!J#Mg6tHn9Wm:GaPq]6J4;*_>=.if\$3=Km3:5kRZ8K@L']\%U3f0G8Of?3HYLAH,Yj6
 7a*N7@<JTVkb(6V-)g'rZ7WS'[aUK.Cjp<@h95te(h!uD3Rj1mmpf`[IE_LFUJ^ZU[lM8Alk;Y+VTYq<U'3)_+(B;?u!KB%X*KihW2/L)KhC0HD51H70o0h,+XTm;KH'7-p++PH%!Wb&[mM)jbWJ/RQn"6f/#bbEA6;3E*LAPCG/)Y7^IZPj@N]#NtAX3V1eg\V.Q^;%jB484DAC\$&]*B?'hjG0`W^7J=PmnR&JL)!]0t&?WC4/)V=NR>-_g:-k,*Z".N\JcYX\O<@q@ZH+S&><PWd]_SR`M"@Js"WUZ4C*61#Log,d6u'brZl)9ATA],,N0:7WcgsR?@Sf9g@F@c)uH86\eBQ/2^HnI!Xf%dI]4X(qVpRpL1K?ICkO2BCgD6`+NqujriH"?:9'94\L[eic3L>G^=e\_Gg6qq(8aNW<Oi\&iX<^FiEK::K:$J<*3D`PN1[F.T#rsY$$*YAJO4(H@a*I5p$dC;3dS))6"-(_k/-"=A#Q+i*OK?`Cm>D"Ht%jSHbcgH2Do2<2.c&MXNWg]d(UO:jNiSlZk9dD)JboH4HVh*oVRMK/sZ.<Sf-\aWM6/i\qRFaE1f5`Zr^aK@]N#QOcUn#U3##Q:pS-)[jYcRQ[Gn:b^+R5M2$I\;PDbJ_C.0l$YG*;FJ>>H?LN-,S`Xe]QV/U'2W6AH;\q%)EQ>R8nXJ#glh)=JN9P^k:=ID^*]7gXO?JmL!ZU.W[maR+i%a^G*3/V!IrfH:o4fZ&L2rDi=^L2<f%o]TGH0bk8m(8nm,`!713\sm(*?;oF/$$1!"BD5Fa90/NsE)$l,pTg5'2u]3%`_kb5#nQq!D%&^0W%&rpn;Sn%>l*q71sW'[)nbt(oaCGO((q*lP[,%YN&.2Y'cAS9LTl)?t."`[#U!+HV"[`?\PHjDSkn3*d3,$&'b1k;#Y**QS?_\RAFm`-@BXiVF_LFi@H_G@6nf_3e).,8_#Qt/L2a$jA1=>$*e4P*[p&:=
 9Ui<@;hjI9uqI.a)QGk*e9Xe>n:Z5?cIN&HZ&Zg'5![(hF,fXFVd\T0.AFNl:H-)b&.,+:taGE1BrrfK.eRLI"1#J.m8qu~>
 endstream
 endobj
 72 0 obj
@@ -409,10 +409,10 @@
 >>
 endobj
 73 0 obj
-<< /Length 1636 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 1641 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-GauHLHZ.Xs&HCX[6L[#]!G4qL78XDT!,7`U-nqH$N<-p...@9b3Kb>lkE&=3,`Mq\i1JKTePnA`'EfXDs';SOfpn-8f4u/"j";0m\54o4JZpja5]+;5)<]5RH!HeMeW"d5&iZ,^n#J;?"IYD4jb/8Kcn:"fLn,teP9'uHDqADUQ=[m,e^0O]CT:eHDnkQGmB[KtVq?>fbNV>G%NeC*0`bcQmZ=CPl.&(NJH7+Qea&pY%j_dL->oC%e8]W=6V9"qL-`5A(12ej?P8MphY>L0>]"&"kkB'A/b16m3BbgGK4]5p5U3ZMNZ:`jt_;o-I4H8?S.!:7-cdaV"15%t[hPUe8Y79Be%:s-g=J%KJrLI5,DQ:6P6_\@fldR#
 _GB]5,,b4]`U:YEX?T=9D[5t,Q)^TPA\^Ce]`l)i6F-25P2gQ-k\h<Q+*V2;rCa+ADE6=jND)dO<M$Ab7r3.eqc?8HH4%]$=RFg8d5n[dcipY:*hgC2&Qi.GkM[7JdoKO0YI"qFj`g'jnpV0Uc+ur$)%&fY3XfJS;*Ki0])Z+MPN@kk;rPIreaNK]ErFcrC9M7Np;/Q*Q_@)=^>j-re,P/r$hR8ROnM&1tD\C=u)Loca-jK&XDII9nS8eO''-iJT:jB?ek-JLi\qIOZ2'7^0U0U(&ONc:dW&>@c:Q[$a^,&g.R5V$nbjGjeE9PNh(s9#a6/.FP0#FDs@.'K$@DiF^[/Q>mQ+0Y(]#h3TRr&RWKk@q<GO;un33A)K?ph&mP,,GVir&05@]2S@;ZX3D,+*B6.ASi,Im*a]_\RCtj=-=5J2fQ"g;;55ZF7#dK5o)K+]^H9C3mBrJ-,.A?lF]QX;A@JAAWW"9-B$pefEBce/C[oN]<6r44OH?f#OocGZuQu@FV2U!&%,#AUY8uW$B^=P]"liOA@jKE7@rNQn]:?g[/()/NnKHX^:R/2QslDi-l+9@9BW3:LC6DblHWP/lsh*jna$6QVSgW.!=bjRkK!H[DbHaC>"<LNhDIt6MI[fq\P?pUl#~>
+GauHLH#MFq'`['_6L[#]!G4qL73+Z,+O/<8^lWFk"q:*"d'@I<[3\n;F+!jJ8sDp#PiHXM&gZ$Qord16aQN<8hT`;!XbX"rr-dd_%WX,HoAIC,`:JLVK"R1KH#/Ie^\?U"b2>%6!`+1#^1A',YVhsES;PRB?Yn8o%)b612-a=7+5b%_HrQV<"&at:k%RlAj'41Sc[<9,`+gHbWb6QV&HeUpoAhXWUh-S^a\noMKXtMOplfg-/lDFLWhjF(CS#TAFSV.M@ZdHQm6B1kj-Hl*6uM%#Z&5;eqN@Y\%LZ1KCg#ZWBhPq>YrL8lj.Z['^=j0[k&K,tSkck',iVN-WID20f+?@4ATX8`Lhtjp=UKUP@FjCu%%Lqa,g#)FbjlQ%=ASN6RWh1f(KVcSH*RIFhgn1&+j`a-Y:AWSjLN"B/-l!<qF#`-Y[Uc2bj+'_j+AY9":*$('T(iodOp^0_G4A^D%n"L#cg7=GB\=\J,ecVh>M7Np,GY23M0j8$>dc$WJl>bU0>3uBY@`e3[i-5k"EcVe9Z6og57!_"'B1Z7Pq33&#tdh/:DkN`4<R?m@l)QU.u_[\%Sc4^1LT9NW::nV2cj/X^]PXr\Ml5Kq]f@O@UH<c^,jIGd<?51(P)Y5p+!B8@C,]FroN-^Q'jea\[^llW(Ps`*?uH1'C,=ag=%8RolO:7^=85-sQ*oWHs.O&jcPsWT>A"3b\7U7\e.K64e"\]iL^kli:f(+/n8>fA[dbNWP^Y%!RT/6[-$s#L3t5.IA8t,LKK:q_ui_AB?T%7A+fYE!(\YM8;8"Ate=[_!h_^BcHkrMAuqahKPHB;[pafbp]<&7sh:AUW9??'.UM,F`:p![TPpdeLj:nbV_SP<'>JY@@BkUN00)tjO"DU1mcZCl\)Gd3)eAu\U('skX:?r1";8m9>])uk]d_9(VJ6,U-B#<K/&$GleQ1^fl)kbcPjsMf!$cBT[,^3_;+["8OHWrO_](XF*)Uugn^G
 E/u#t']O*ZU7n"HHif0CT(V):,VCRIR_fLrq9cT^X6<tB...@l>t3&YV&s@q`Ue,],>._ak>\N5]XXHl+1sRB:sMCS`ZCRVd(qe>=(8?]j$Fa'HI"R\Y)R!j#a7VBg/I?C[WN?M$+:DmS73rU^=i:=pd>:dC0TZ/C_k$+lp-q/8JZ@97-?U1H4VjK7BTq=:Rg\5)V3+NV8CQ5CApLKlK#U$l-7&].7\\SGFm^+XX9,^a*3$\(^j)A1"[5*J5m@]fhNV[\T0>:BYc1n[kT#H]Y%Ic@]DV:!bNDSk>)JG=(CW@rTP@jm#R3Re0Y1:OHmeOuLXk1+YgIS`<q(fh=R-;`3r*p[V$E[<f$Ud&M@nqlP`8p*hsbu[)lD6Zo*V7Y+<(n0k;9F;-=IfYXQUeq~>
 endstream
 endobj
 74 0 obj
@@ -424,10 +424,10 @@
 >>
 endobj
 75 0 obj
-<< /Length 2655 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 2742 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gatm>?'Ca9(V\d6_=T4FH*'M+iZg7m8=OMSAD3p*DEFERp&]lZ-Gd\*m-XfLMXQ0081I=\Nkn5@Eupn8d0KO1iT@b-S%ijFod'NbIhUJU[TqE!T9N@52iROQA]2a%[CuCtjr7k6Cf;$QS(l#\T$8f*H'ihOotMmB=B>E3c2[S'HV<o0)B]mBm9O,YlA(/NNEo%cMndo]QrYf,0>(I!#O@FPS)efTQ`mNNCKL55%PR:O)t/s&(iDN$^:+$J*^3j+Tg&$MlR+c\=,oJqGD%?O,CsJ=[#PXTl,5lW/:U"F.?*s?mDCp,:.SLJ4@X%j7IO`8/<fYda1BZgHRD(G[-gB+Es2I!DNj,JF/09Y#KZF=0;#RfPT=rjh'T#=4"A/-9C]F=qRO:L(3Z/'k^59oBG3dMgA$'JF5bEDq\)/d]ef81mcWXjHnV1kE1:.K-3$%hS5O=$3:SEM-+j6FZf1el!4LuFpn\-,[+f0f'lnG_9RPhPb>E("8L/03ML+Jigf7[-'XA^cO*MTi.>T+96X^&Z.Eo[301YOKSA/dUBa@m4<&9Oo(cf;`,4gmD,!/m@M\mo1n"bQ054bjglb;=cgU\SMQe^L&jOY+=-K_r0S<dhq*n%c?4:@?%M]7UGJ8FR/4t'lRaQ'$d*FO&?5+T!lj>!kuPt?-M@'V$I@K[o[W(j0BU/&Ca]Z_'H_k%FZ<a)ZCaLZ#-2dWdG/FSqkRXDZGXM1E[@@?`VO;sl^4Uk**eP\e\Z@t8o!3`sRq6p&CYirgOLbOb?6=C$A==A#4kX#[0<7&7sOsU7Wb'k_GpB+i"`MX`$[:N>dCu4"lL(3EuH@&4K[s,>(0eaS%-q:@TdD/-%D:S+<N]S`O*,5tSXN_r4``Nd^[&FDG%P>^7Jr\M$Y(gb$HM`R!F\_M-rg$t;s.\L`D&-P97Y)H;X=Upm2HnA'lmp`FeT@puS'e3Nk8R:!Sr/e+nOQeSh$2;BZ:.ssMj:6uTF%R'QNT-
 CI9IM8/dcPV$]3;Q;)T?Yq3@Nl"YXFpaXUDHQFcA5VGE-OVCKB-,16d$*=ZTTa@]HdO1N!UVTXo!<>J...@Jj0>G>i%>n%m^\;g$.DD$D&?tb>@R
 F1'N1g_\;.Y1WiU8Yq^.iY>fh*Q^sT`&qV+-d-Pp9uRm<k5ek-L0.EGI)[?g.j2@Zs]J>;8Xb%-nhR+`iTVDYbLp<R^-2J'U]m0!s;3V5"64rQ$qp.:qm;GtRXlI]JJEYK"(-qrU1bRS+H'np?/:k23=3]`[A3uGmdHB)X(/MO[!!7JN[NI"DoeJA!dVJ;KE7]N>(?\d+"X&KQ*5#AZ`/=i.4`pfPcL[Yq*Ru/*F:Q$l=NA+;3a@[/&.EYU+[RSh;\7s$Q#rlZ7=d^fs"]N%1aL%o6i5Xt=N4qE0H!G1()WE$`^.m%OI!HrJ2>4[KUl*,CSX`2Q*lI;`%7b-G,*G+-FU(ciPjbKjG'(<*Vo/53cn>,-"Ls(D<Im9HSlM@:aBHWkQMO$"4c\:3?ILs4A^I(VW3]Q_&"u79/j/$'`Ibso@A@H,g16$pS5^;r<b*=:C6:6g7nr9VkqZa6[EF>!lfYa[I!Xq`#J/ZbW/fsa3]Z]o@Bo0=g8!EYM%JX^6\4D]euS\K?'-JnVUC/3gT/W+1oF%7EGj<X7+i5BjLuFPq_V)roJdA7gRisc^/u()$_1oFMA!GCnu7GY4fnKsG'_8oV`iD&7u-'^b->e*cK,%(DsPm:_tAGd/"]1RT&hRd+6.ZO*6\ZFVVj:*rTjS8E5D,RO3ms_5D:hK!r~>
+Gatn*;3Rb5'$&nm;t-0&YQg2"@&rj;akl)2<HlPrVsYjp]##<=A2+Y21RW0R"pmpX16RsXXk>SA-+/3iIj;A@h`X4%rV>E5LVQ!gcOUPCO*klXh86p[%^.f*a!`(_CNFFgn=PL)N"$DWHua#jUFh=MlM2h8E"if^7rZN?g7rllc!Pqh1]uY=&UAoIVo/stGFf<UrofXYIfh>0aO$0kd&m%ip3usP;d]C`dXUaE>CU>Uc2%=9n]n&,'fTK+5'XhfcTg906t-j/hU+?#RTsT+[muZ@Bm.YH.G`TuK>=5+pS]Wdkb%ablAPZ??XojXh#lgciS?lE9.'E5\1=T"\'42LR%OHN?9UpoA_sY?;4i#=\o0sm_rDF'JroMlH=PG,N.NWi]fi!.kUmi>!nK5YIAcDqm@k5sHb#2Z=2.@oq4Ho^.A[thP@qk.a?-AL/RDdFagQ\_hVmt"G)*ZBEC)rM:6m458uB`0?LO!,."YiqN1T*:cZLc6Zd8NU-m]DhHPBk`XKE&m7[(:F3U[^_]0-,7h-k%:4W<F5_Z5C1%%]nDJnJ_W";"*HOQfLHHAZFt]m66<??kd%H.1hB0@Kc#+E-uL+ha+'3q_\,)DR?ZYq]/s@l3BP<'9k?&4L%L5JbhqAtL_N;n%1hQRnT>W2i[bXHI9GnPS:9;^roB(KAK[G@Htp5U534i5Uh()K`R\?=2dgI_Q?7pH,(68qqb`Vrsd8.Nc'/WeO05[DblF!=mt6js]r^&&=Q=NC^!<K*6mY,Tt3ZA@SB*oK+q]1^W(Fljm:s3!"Ah5Y+0H%@0AWd/3M[G&/inFLB^[o_9,*dsE48G7pS9et[\Ir%MS%m*Cl?9]SP"N_\2<Oe"99lqEn9kY8G$#U:<c'c0eQ>!DqKs)BLA+o[e4iNJ%s?(49!c4m35B4K:_fEaU)\,HiF:SV/bG'=SLD<Dj#gfkQUOuliEDBhREHuXtdR^BM9mS)a]GEeUn#30q9CGq2cPFZ-
 uo/bqfGaq#OX$Dm+^8C!<fA...@V>d1%JHS%C-PpIF=5,*j.;U4S!3N`#L(*'f$_et8j^80eCM/%/ACR>DRV%upED9q"*bSRcF0$maGeSnC%[KnSTEs_Dul"g-D$(o;R6.$'DG%#!Kc:SGrPqoV``jI@=Zd>uc*4'`f:6rK.[#QRt%k>;%@^3:5ZS-62]C.YN_'\Q->uAH[q4h9&5l1?P<AoT5ZW+SRo;lj(o!KCR=ZL(.h&qg!Y'K162Qg<rD+2YE+:VG0f:u<`-0to_Bs/TZeg2O5%$%uJ\=\$\aB%X'V9_SsH>nJhU<Iddn'GHak\>$05(4V#T@^a3e_O,XEFNEYo\.DrB:QmU%o4r9+,_E)`5aFo[F:tt5cqp/cf=3';tsU_bKG@XjXqPMYXROtK$X&eHcO8Dil44&!f=ENk#L7RRCL(7(ZIne<;EW`+;IF('bO_781>U-'JH*OV(E,%O'nF/ki<::Q;2Vl<M07>eakh5B[(5[85#i-L9fq*#1ID(?TC)Pr:s'5LYI]1/.*Sg:tW*7,u1k)7H+_)_Cc!(LBbtrakj]RJhcKa.gmP=k]CZXnu=h\lqEn9khR"B'O5!J&95UbCL`QGm3tkEcGlNh/Vkh-C^MA$k;EL+-$OI*%,kn43tt*Lm72B'ju*AT4<0oJJdARLo+`ZY'urt:%_Vdb.*@6tNY=9kn?:o'>r`Q33-CL]:c#:qSD]c%I-"n<.njGPWCn37NcYachiOX.;\iLcaml5U==bbm![:(.[#;I.Q5Z['T!1lZe;>-lo@@Jgim<391teA,-=I=DeZ4p!#t.Kl2gO/mRnB/f[*4tA4+6H(R+MIM1004!AaIFW/=X&rV9V?.!t*@!l6:.GGU,kW"EAE4?LqnQIJ611pgY]"Kdg\($;5fFA["N(k0RXW'^7LebE:%8.Lh
 s6Y5^KKg\>qgU0?-94uROLDlI#hMU#2*1O!<OO_\#&Bq\f[5%^LiSM#$hC)pr3*bb/CY^5M5ebb&UW%t6@4r<#(l4XrtJ^[!9^&`:gZ8_%^p82:^r-SHne#*jIZP_7k_9Uhm/Ous>)5MsMSbSSkY]dV-)5q\JiH_(Jl')-*%R3*me*Mur,Z1tLN5'ou,,80T>h3UHJ6#Uo,+/,>'U9.;7Ye/?7]hEZfH+j`NI^_I<#<(l1?N7W4&tVUPM!b2!gMqO#geEh3SN([QT>5V%N[`nSs]T!HEM?fT+C%#?LJXK:]:)okU0im/>)\*Ed<24OLp_Dpb,sZMf[UnLP3RKN+tilP#sj9ZguQ;$[G(XA<eO.aD1;LM6?^g]0'NZJ2oI>S+8rIm)1\CD6joB:_lr_)]Z1:f?P-no-Cbl=K50tR8\eY+1!TO:7"!D[>l=k%j6X,Ti:3!/$b0@79p[jZc/d#[dl/f^1\9Y.V569P&ejmV,pP&oNCFTTL!+roO">m9bUsr[P`8B^`8g0ml>J7I]"WaQ*tiGfU3@,c2'p-R(@+0h>!A&[W]73)5o8>*hPb0Su&c7pLkskL]"2+i_2Lm:_IV4:HjZ&^B/Cch["addZB^G(BT!7`SmUl2^/MgNfrX[oU%/H7G$E1#fYDQ:`MrXb(m*\%[&F:@KO:8_s[!Zk.N@,-YY+.'%0$MKt\XeX(OGLr,)B&OLY9p+8RpFcHko@eX(#8<p>arX=U2JbV42fYA1Y]L"qCc\A&#Pg7(V~>
 endstream
 endobj
 76 0 obj
@@ -447,7 +447,7 @@
 78 0 obj
 << /Type /Annot
 /Subtype /Link
-/Rect [ 321.288 577.1 418.944 565.1 ]
+/Rect [ 321.288 586.96 418.944 574.96 ]
 /C [ 0 0 0 ]
 /Border [ 0 0 0 ]
 /A << /URI (http://hadoop.apache.org/core/docs/current/hadoop-default.html)
@@ -456,10 +456,10 @@
 >>
 endobj
 79 0 obj
-<< /Length 2197 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 2260 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-GauHMBlD`a)#ir1+U%\h!"H(-(mY5;Rl8q<,YO(:R"p9Zka8ItHBK8gqt5:^;:\BEXPKQhMRMO;hT&"[oji/))>uFuN(<[?IMA3g1jn29IpK8W5-li!fV).r@lF1/o_RnJO5G5;A])r,4u/U;-N(--p8DU;hfOiLB)M1.,#7*E6fphJk#K(Xa"pbu)9_o6P>oIW4m=>sBHkC#+4E@:#9meo;"WY5.*tT&1/TbhbrB!o'e@FUAlYSmB6*t#psYW.\>-#:&\$6]LR_uC($SN.hXo\3S'tA@^$KAIN>Q;KJNRSE7SUFuj;$G&Ks_&O'?#7'(f[2uBk8;aanCSIW?dcE(W\gVSg+.g<=JQVe]$:tgUiMJ[l9Z6=QK(YP[#+rOhDAe$rf+\&^NaZ>3e$gW9Fn8.*CNQbo[P>$Cdar0XShT'F>(!=Bp\lUWE&?jPJsR8UNHN4i8OrjTKc*IfM9Z;*5cn`V]C!RoNc/&A-+8.jD2(-WO\ZAt)bjWg6e#R2<`If;a/j8^(r8JrIFsMENUa67YYnrpt,0CX`WKP>j9-kI\Y@LD"^N@Qm<Idj3mp#[j,BAO=\bs3?Fl?WSId`B"1YK2rEHF0O28FB6WLZ@EX([+ec)/<s5P:K"MD@L!.:PoC"eX=)V[LZq)a\CL\,[BY'nXm$Akg2t+odb!s[<AIttjXG3gcMLof3O,@`jKr)J9=EmB7Yo'$%LD%J/dPr#)hc<Af5*K?2j&]]6SC.E`^B&\H+4??:7[s^dV,P9/ul#Eem;R$_j8o'e?]LKhYs#+:V76a`cAHFM&)W,;MM4d3f_9^"eus]+&Q_b=f0^BDk%\_i7?$>(%nCdk!<")AE_!8!daU'GPU"4c/"/uO)M5jcc6EUYq^U&feR.!KZ?f(W0;YBNPiQ9g`[`!"WmAA-6DGO2aV@k'\@6EWl-en@#A_]`!cMq:l.<o30'^i#ilC#";0ie@4..j7!\sk;Io]D`HOonq3@ZuM0mp
 n1?Bod54BO.6D!5N5I&K.(RhK<h)iae]s:B9b(=f-ZG*5,AW!W#oFD4q<n@^):_(PPKd3?]b#s9lb'JX/R::df\fBV6A/1lMH!M3:UA0]+(JW&g"A*mA*#4lr;ctDUKrccd3udqAJHPC!l847T\Q#rQ/h1XtPo@rJLoU?6-D/,<:T>e/i5qb!TY_?LrL?*%6/,i,<i?C90pNu)#d8!i?CjN9c<_6V.<);[Z%=%-c<O`^%>\#m.>*5;?ZPP<Z;[\1!,<0qL(<N'4Zu,i`fl%BdrB1p5\[&FZ"?d(=Dbt`ULTNJZ)f@2&[27@"7'TKf+Qh.C"U6Q7:n2Uh5Mp[p''Y`?nnT4_&F$t(]jJjdhuR:3i4AAWS-q9V'\%k<ngPP+e2UAbS6UpFl%UPf]<4`Jp!*]LH]uW^FucXq(`?iG!gT.D!7fM?jF?WGI9Ui:V59J`X61>h=t1u(-;kmL+QV5&<\_0#-umT7BB=;H0+0Kj12gIK&DsNJs]?@kRif[]t7Qo@#ZR=VpeqQhLHP,Y_Ze5<sbHOS*nclp!%VBn[@]CLC!\U6MuiT1q=W!\'5>C3_[Z%Li7I$g5ac,'#c)h9,]H#Bb_uNFbe;a2#t@J=.>\M6TRuF709sY<&=m=CK]K^T$m//;.HQ<ZaF,?)3EEmUoAiSRh4cD0FJg2PC86U^/ETK!k#,PF8+#jb_GCjHEoS:lV`nk`7$p>75a\tD!r-_K_jmaXf\JC`V]kBCWhY&.Jn86MX9KVen?s<K]]#UO9C\C7quQfFoC9Wi93/M,?=tc(5gg9'kd3uCSo!)qfR%sBL,&ac=m4_&fT+<GEjCQgMIANo-;Jf^bH#E3$lF\T<2[(,cmbL^ik7n?"?$&19D?:eQV<Hqbh@!@u)WG$e_gPe0jT#4+?m[`>/)cb!53fCu2r4$jCV,mL0gtPu+W/1W2@fCK6J\M\Co-l00;j[K$;GCY8g9GR?CLbu#$SGq7G^ZaQLilIj):h20
 -%Lnq,m[Lj,gQXeX.8/1h'J.Z75%j(\q!C9Pcg2Mo;?Z,@Semf(j/2JE"-P;7CB!1[H]Yc8N/lN:J3RGVeQ\9qNGpa[o[N%X[FGG'6'&%p&Tk>q"o17qh7d,I!nu;,<=DeKF\7bpj#b->F/C9FX!JUJCr[uP-/t+]SNuu<Q>0C7fg6m.oPp`qfjWWhi)rg7XiE`04.p;D\[VtkI]70gh-Y1g~>
+GauHMD/\/e&H88.+U%\(!"CMWmfbHhD3?b\ZXepeL3Y1\MiQ=[U*e!%]jJP'qp?0hHWus^N_,H/o%`cGU\n_OF>Z8Ylc@GEi:"9&?RNGI3"ET)G5;-]n4_i2>/mu7d8*8Nrqh!\f%]\/=FR[7-e.!XXqOTd+5!s._14aP4Wdqrq;lA7/k)'6WR1tn?;Ab_f%7nub6P*d>oT50U+i/\l'9:Mr#2#BQ2>B]QrG$Fg)h\T+,a(bN4L(34^!TRGb'^#9o5s$+,Lkn::3<onb4f)e2e;fm2[jSGpkf;U$u8Jn8.Wieg>okBb?55(`2f%,hq2G+teZIBci5mmQ?,I>3B%TA(=.-.5>\?`b6pG,cXW$a_\eV-f0oB"WB38epYQuZl]H[`b1"Hf)=)RkH?W03cQ]P[l'_dL?[.W^C)idQ9AsI%j/O7)Z$*<?+],-T>7Hj<246D4&`8bL0cq0kUpRS4hCj_*5+7TSs+[>N.C$QUS@CW10"XLm2Nu!#=-I24q$PpE>A[cRs,*g(\7K^_.Nl/3bAaAUmbl^KWcX:)d(kc[df8YRdko-IWZKf0FMa=YoVh#V4;q(""(^SH9<b#Ees$0-'cjNEb_7k7+MLNr$J`$26#.]Ldd%.5emaC7OUYKl/-t)e!WbhrC"d`(A!,jBLC'(@TjXH"j,7;51J"s$7l1s`1!O?q=hIW#_M?pY-ub"l^0Q!bOE"/F@*3%$Pj#1ScsMeQ;Kp`7GL@'.R"R[HECsEa*E7,)nF4Wk:dQ@bS.AAR:RP27L6R:D.,tOO`;.laV1Bk&]ZF/^>(^K<*fM8)QC/JSctjXUmo=(pt]T>eSc85p[>:L>i%T5Ntrr%,Q=+MBuEM-33/F>4PHP_%pbjo+WWJj+2,d4S+I9I8nkfZ)<U-P<BaCB)R2?1>#';6WD-XHPahr1bTVV;8%eQbgVc?(]j9cSLr7!(fLb2a=,&-.5e6NS7NkBipL/Yf021lh+8C0S$]C<AmQCr
 a(S%=@9"^2IW,E?iPC-AlJ5qmAc`MW/5R&O/i$]U+bG()2YPO[;JgUm6DHT#Hi5'Ggk2msAX@2c]T7TEAjF[[_!c[X0&M#^"73Im%<AEB5-kU1TYmL@UD*8*o9I6l]M"3<1\O*W=U)ZAXaX;o*ZQ.($,)K4_%Eb#lXBm>t!n#?3cS'N)CtoZR>\p:EAIds)%-$A7He%+UYc6,1AS_QMO)Rq3"ZTm:%2@!]6,rM_69FQ#"INU5/HbYP*VNo^\q_)%,fq0$5[n&XdQ=_ncVdrK`=hFRQ"8H"M?Eu=TIjRMbjS/4gH?Da0TQe33A2n*J]kb-?ScL&;]Y?7_>t4@7<)KB#-q__95-MXSA%msL)RHO7jYuCZ+ruZ^2M?ppBD-'J@0pQ^3HReO(n=[3cn\_)hcJ#*ek,@<@-usPc)/rE@#b.cY8mGm9&WjRqhkNFt@4@G5@@+f6u!"Ve%TV>IL6P=-.q'mc*g*mf(,9]A'C61e^A]<sXO"Zu0>:ZE3M.Uub;QfemP5=ur'fG3N"J6[b"TDPR.]9[]q%[B9<%VOY/t.et\_*]RuCJtU2%8@kj65h'[C!1e&;P3RqVD\C_:@4@Zt32moFm1h"=OrJ*0MQg4?DJW3bEo8kD\!jV&"#s91_r`S:Y-MhZ_i4%OFhC>oUdg>CbX]7>E)(Qa[sVYrC>m94;?2KL<g'(Z]5Co]A-BSSKH&GrA5i$2h<Z>W4KbcKmLq7bI([Rld\ZgXJ$(&\VLiWj*/3gE[QY-sc<OleO^KrE5F(WHWZ&P&$LQI*Lh2<6KB2`4<4iP_oJg?\l<Lc#F9"/]]_*&IYL3(QG`QX]SuuprJXcHVYUsfh_50lK0O.UN)^Pm8CtQbQn4hmclr;#=[1JH5Z%!ce2(nb3QQ@BiBn<(@q.C]BksmofE.k"UPKHL[$sn)c%gm.]e-oGG]$sH:mY%cS6RF2$O<9\8_04E1p?buK0oX!UmYC,A)W#%cbT<L`\o+I6m.'
 B?=:pTdfRU*NQ1jRo'DR*Lr;=U-DishSV<=E7Q?.8N]bfAgELA\WRWKg<D-XUj55i'0UADS\\u(ot5*PCbU'2!YmlDBZJAe+0F*hY+2!V[6Vc5a'llVVRVhe,kVe?'o]'U__?2jDfr6f:HW=@!DBInRiG]';J^3R0:C%RM7h3V0\UTS1'Vh^"D'Ap&PcN<]t>1?c=Y-[V3J\J@W:tt2(d!0m8BO'Rt%kamMW#n6]H*LfrR^j3W,[f`O21i9e>Z2._h)QDFS7g0pAbF^S"#GqWqZ~>
 endstream
 endobj
 80 0 obj
@@ -479,7 +479,7 @@
 82 0 obj
 << /Type /Annot
 /Subtype /Link
-/Rect [ 303.624 511.64 401.28 499.64 ]
+/Rect [ 303.624 538.99 401.28 526.99 ]
 /C [ 0 0 0 ]
 /Border [ 0 0 0 ]
 /A << /URI (http://hadoop.apache.org/core/docs/current/hadoop-default.html)
@@ -488,10 +488,10 @@
 >>
 endobj
 83 0 obj
-<< /Length 2060 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 1971 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-GatU5gMYb*&:Ml+#fT!75Vj!$l;f#<]qssGZH9Q>dq5kH*QhD59<'Uao(P5O/86Mr[aR[l<0YJ7*mP`\mqtobhOaX-@FbM[I6%[OYV"2mn@*Akk>Tt=J.'[QV):@1lf?m<"c`RKAtNA=(?>2K2EnB)Mer<"<k$H;i7YuY?!2ZlXQi\Q/'+.oPk)PV9?<U6BPN>:RGM$.It#"Un]EoS)`9;7I!i((3D\W^no6,!5uoYZ_+#2C.>t-`lF\*D-/&&5NK7e:&Xdo,;>-&nqtn;j-Nqioei?.LD`k(VVTN;[`kn.Ff2?48"[=7=7$QLHVEI=],@PB_fnF?!Vb<3<KH5ZfGis_f*(BsIa2`+`N14o/haD%He4H6'@eKUTWecj_kh/)Em\>r4>NKGpg0jDa6)F"hgC7F"DV1AGQOAV,BYK_8N:-;MJ5oQV&g0n\n:uD&BOUB_WoUkEf">\RgqDG,fgWOmp`MoN@ik;pDaM-PV(]UoK?hW_NG50A,t3B:]ih>QC#6jm"R;?/<<=2kA-Z)fpj+h$^#dKaj"\O9.`s.BM]tmX;6.#In@;gOe\iW:-;F*>Bh)Ds`S$U"IYu<^-.dG<6XLr?kT&BcY409n]u2&]fs7qBT&_sFNj4Y/7nG&VJq6"J-83PXK;\$HSuOlA7du#L>WtWX,*d'p@VtUfDnD;E5'),.rpSkdb:4<oq;[f;ee[:J^k*0YN!8-Y"ll;qC`UMUa5*u%I(rt$rG[15oC(f6e]5"!P+=1OcnfQX9`H0AIX'[6RGLY$m2A?T/O5_MG;i)9A"qM6q^r/_g/!n@P;]RH4ah3THq;EFYTOl8,4>\Xl)0]I2fDOB5tN8BJ9egR6rbDPU:m&jo=`?Z\kcCk74(`["&@`q::m\#>ZG..X%^*P#=P1r[5oD+Dbh67T\+>$*A[OUT4&gua&Q=bJXR8S!CJ4tLVkTH#CLtk78$X:)VgrJ<tU3F#R:FWW'Mg)Goe(=ZYcK8f(@?
 r_"nL-#1**Rl!+3%qlF_B]VTUj<;ic@)'?qSTf3<?!9X$h;3peGYeo-t_,psQo@-4IP+GMj!sYN'Nj(fCQ#&FFd4P[YA6\s?G3sGm-PR-c'9<0[d9>rAi4E6Z(mUnL:jsQ0M_mau93PGl[]kN4DlT?DU\&LL]3^\Uq[f#a1eX[28N6agAtu]9;*+"/BpqQY!W!"mChf=,#_2q<gCR[`#nfl*#\:OC$sLh/\Sc>rik:'rW/Z/MfjVtI/:TXpEtCj+30Yq(9#Tt*6j:MS6X8sXZu`I=#$g1F;Bi#_q?=MS!4^8)nmTB\T?l$<8Xe)GkdfE=86:,].*H(9q35O"B[um8<HHg#dtekTVrkIf<1".`;cbS2B+P8uWd)"3*@f[\RNV+=VC#.8h=66^nNa>oIaF[)$q>!KaR-56*H#HNMWQ\0<hmh':A]lq`edhYSg]eX-lS-nM[$"h[8ch,k9Z,F[SJ@l7J/CsW1mLJ?<X;qiVqL@CX\;>p08I`\uFXE?*MhU5mssV=N.Nk%>@aR?qXC+&,\I#82m*Ep<jZ&B,Sa1?7-8Hej]D@8MK)T,P:A5H\&Q9Dgs(W`iGW(9NK:jrlD./9Km4=`j$Hlg[Wlh)X_!,?%'K4M,O$q.[1r4i!';]qA>:Vq$N1?OkKtZD5lL2)b\*JE%CcA[nl9I37>;0b,RUnmUMAS93&N;._.aDP*T/]c"YlShjLuMmAZEIRXA:Jq0o(J%X5s>F?O%Y'@&BDmWPX`H56-<0,?P=0b2+?Jf!E$qj;_ap:_[5%qU\#`gHkZq9ADQk`M873&oW[a@2LkAn&XYVOctH1,71ZTBS(LJr02RV]Y'2i4@ZJh<^:I[E^fp"gg$3E)O@DSiU:,j0XK<)b%Nl#K3-<E%:pnj"I,/@i.sZ6N%Z=*k,I)*>q(-T!dc9`7duPDBWNmG?Y'd4b/o#,PIeG&,Q>[UnTIek4\"SiT:N7r7-D0/cs5(!X&gBSZ):.nPginjX.
 o:PhH6_E>_9&gL)"<bA0%]]=An!a'\GJ?>m0s]t)3'/5lX<fe2SOF>qk9Y/j^GZ@'IJpDCF?!-Mg[Wr~>
+Gatm<gMYb*&:O:S#fT!'5f8DBW(V\(oTl@['^<'_Vp/[:gQ]r`Q;h/Vq!WE;=jg-DCq%#*P)9l4QSXCQ6b]-ehG#@^-Ic59n,#[i'AN(?&,s/QI_Os)6X8bV\[5t45:3S3PFFYkU(2R?7MC-`cA$huC=]s+#q<3XC[8/S:)J7o?*h5?X&o8[T7r6(\0$29H)XE$-8P$s^559UoY\_M6I+%j+nAq=Z:OTX76`>)Z6*=a=R+epo]*_d(6X3'NN$X+,U*onPp@lb8CNO!7@)+#M:IR_/pDM3`f&HCO:.hcBi_uoI"'FP^m%\/KPl^J)hc.<)Q;GcX8u>1dLM'P#*"oBHdd;K.tI[5r?E/MCH0RS/.k^njK8]o./T,V9_e/iinmpG%3cji#edW:OKB_M@Pnt0c2uC+\l-M_+g`SVdqpg+KMNf(q'$X**5.8NZ'O-$s,P[+rGtK"JOkE[!CX'_&jSi%=(PEtaJ`7$-i/jV"87k'P%\kSp!;OW%L4XYb7ROZX#-.=3eZE3``t]aFV`/eR'AR>>i4\09ml7$XT%+42jT^^XmqHZhHLH0\aMl#4-!5X$ooA4e2D99F.Z:\D(tnTrmfbYLX6"U5C@d$1K2E?W[0f>p>5F[U@uK?#28]]l?,td;QNm(,hgbga$B\SF_gBI:KVS_I]X4g>/+[_qbY%PX7G8_+NK7:fa;K2O!QsUhghZsP*f%Tf1H*FAJ-RU\TpCjA-19:I2XXTdmSWDgT@?#^Is#VeX,6p0jV4`Ji:i!G.pN)M)9T`YoENblluA9TAL3Vej5aDOf2;G$45:?1<jaZH/V%S-lWto<13m@PDtabeib\@%g_b8Z:tCMc>!m4MJ\G[S(l[g+A\1R;Rc#*>TOIEROt]&fJ&8KUA/'M;Ke-V>5_]m&am-Y:Zh4:\&(415q*LJlKO6#2RM;W-/fn&aJkZ#5aO*d`<h0e\p#&F0c5"q,%gn--H>;Oa\hWLXatlB@\FE>I?\&
 d2CbhdU["M;?R38=U0>)>\Iu4c(GF$p8um9Eh9^Ske)hjUpA$"$$V"m890GUG&-0D5NJK)q5pd<6ePKgo;CaI.F[DFJX\d8h6^?8=Y$%)lWPpFES7tj7V))BJo//?b#`Ft`!i!%g/iN&^5W8ff`kgST5bY8$S:3r!+TgGs>IbV.JNr%&D,hS9^mNlX'1`pO.V['MW7JIIWnD.V'iJGK.u/q?##:4t<Trf:ph<>*%*ei]&Eo!k3]NIQa&>pP$#BZKEcWSD&Nl7A>u(,OiQ+1bG+A;@kBo!&24W2HTm1>CMG2;18/^aV44,:n$#O\fi94$I=b3rUPe+U*Ht2Xb13o4#"K(aO,c2P\i-eG)`nZ2@F.19^gK]a*,Fu4<*h8Y6dOPJras/@f@6pM;FUnsV,rrfS7Kg)RI\1S!M"%a0+uq=,7cIr,IoHaTLO*A],n6\oa.)a'?l!7jb]:,BNno4I>*^^/eg9n/a>Q"Ooc*GQ9^;%>`_-&@S!B<*0IsLNfC9%FIW:4bo5kF34/&SO3p.DHJ<JEYL=:*Wq@'i%qDPk1\,(u]5"_D=^J<U01>PoOh,UDbR6mA&\:WRMi'+TI=J]6oBa'q%V%F]nmdniDTG8>$3rS",3'6>*=9%e7J8kcQF;Fsa8F29&!LUb2CQDAX_Qetp_Miq"W#$MDkn6g,S4Pa"2OXpULJ[#)RtG>UmDbPNjMVQ5g<Z@%.,Y[-6``HnG<U>EFcI)J0cIhnnmX!;`->dP;i&.bbZk$qAIS53Cu-lN%Q+79"cT---h^!VV805$Np4.Tl(Z0K3"[5]!/#h.iUH]opS$;dbe!Z)+(5]tf(.a"?./Ma/"85!q\6G%;56V%q10Wr/6PS>?&6^A!O553I$^UtGRE8+k]&*Q//W4l]h,P9Y*Q+O:]+VH,3Zc;&[Ukt+!#)a1O-=BOm0nne#;%CW78Jj9.S)k?(5t=f!H=>@'@1-@p-m#,8[-\mU*aqq9&~>
 endstream
 endobj
 84 0 obj
@@ -503,10 +503,10 @@
 >>
 endobj
 85 0 obj
-<< /Length 1796 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 1855 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gatm<968iG&AII3Y\XjDZiUPsi5;*,S>8pV)Q1!?4]Is^/3sspMI8\INrFHn:Fmg'f"mBA#iK0sO71h/k07B/j'q_-7ZA8a^7RhPYmoUbiR;<0pGm:8ik)@eK^h&!IJ2gB"#L9TjIaTL`:j>&))_f")`[N*!ULYXMN-d@rpej4\,e2f6Zdm%(E'T/ZImCf`\&50:np2<JM].uHfOQF8dYEAKO,Vt(lP"^"C85nC'EesB2[69#^*OMLJZu($IX_i_,t[QE]YHd^$'JP7>)h>4Q6or;D=&c+,pGN/$1mFJ2L'B`eOV^"HM**HB>.#ZM<.@4&+e>Ss",`A9oj&C9(Dr#OsR3873[-?BeZf(J:d0Pu,XSSu-hc6UqfPXp_qG$F,%LERELN]^EFZ%E'unOiY'9EoZoqgk+Gc\?Qri(M4ZFB!VkA_uO[3\cA'*i9%Te?1%aK]O2XHA&0($F;gLs?!pKQ,$^`.Obc$b.7RR:PPUVF]//q>"/ZTV/S2*:[rJK;bY'5POfrpj7N9OUMKoS#]tr$;aLk":(hTO0kV8\t@F1dhF^3of,M5+G43qsSleugJc'BRmE;_Xg*YhaH9Y_;`=$SC^)KQ1CM$#K,9k0FMJQLGaY\`4HPK45hSJ50>ZG:]?*a8$DUG]g+cFGiQHfqhKR27fJ<?*d2_;MF<;T4q7\L]:<CohL6]sX"q=J`%'SQ2VR[HBOqaJq\`;nZH1!+KB1N&CUm?8*4WD-:2/8L2cXENkRnJ5WQ2+^'`fU_L@A,s4=@F=8Re0C[Y2I@6gpgcm.=RATFZ<g>"#M,:iNQR)Gj'pCqf?"f"!&GjI?<F?#OUbrqqC@_@o5JS+XW2O[U^q_jdC2Y;/bWYt]?720:N3@q'm\0>!%ldgAb"ig;KAOp@I',klWrNX\JZ"b]:l1XV"qXNn+g6p364lRsY/LU.3LMLMFH5b6dji@CpB3bA4='-Ip];9^E<3!iR#"$>kirfh^t?^UZVMl
 s9[S#]MLC%212=qkaWS^r$JDp&8#lqC/mX=&Nr#\H\"UVu=DTADlU#)!Ght6s3of3uJu=ZdP$`*<1!p[^,,(?a8*p%;Nn`4-+)j`l>U?spNP/_!=!C&Lag1"p>ojip5Z"Mc#6SQM[@/RqN,D86#&Tb!ZcET\12gK=l>do4=`abZGjKHf7VoOQ;ni'HqsOI_j1c](J,@WF`-8<bCo<<L)#oHET(q\^,i4F(Mc'ik"XbWAdH0pEn.`k^gMe?+BKu17Ha%^,p;`fjNH[rm4'teu_@/hZ7C"C=1u1)Pmue&P$5i;8YA'p`K;RB(9QsD5,*$SQQ'EUZ^8r16@M\Wo2(Z=;QpNGS@Z1G<b3#0='sD,>a%/2Nifeapa_ZSd2rasRm3X,4G/Y!a`O@%hVAAQuKaF7kTgGF+%!7LE7r@aF?0V6mPWMi/dUX_3P>k:O.XN:<#]D-J-)>SJH8t@[q=Rfi<N(XI^!GjfL]W$r5,V4Vi4Vg>^,Qnc:EHMJeUnpsU-?u6U0hII2c3f#S]I*uaa/5\1RWXuT^mGnPpe/JBm"$ikKga.4B21s;a:%XIneLXgZENZ:*20h3U)b9YE/+9;gY*d$XCXUm=]WF(a8Eg#!<tM(\e1['jfsqdl.Bmf^RBFXrdF32'1c;2YE/T'!O"[2K;iipJ%9(H?q$H_\ts5j8k%I4$Rn,'Z5p[7TL'"mm9>gn/.V(lVp891I?<eFunp$Q2+9'n[=hhTX`T1Fr8a[W6_/DF\HQe\'<R/f+2n#5&l:"mJnHsB&Fru=PMcg7<<[(etN`@!;/S^mltOCI:W~>
+Gatm<96...@HmIWQYN1HgC>g"-?!n^Y:,-PR7.b"_^+Q:f`Z>-RXj>!Im;Q_.0UYu8F(Kg,MY>]i3*W]pkLC?>.?N<G./c^k8,<kT@>CBBU(`V*a0qf9l3SMb.\LgZ
 H"rHj70?A<*NHEss^"YR]Q`a#CH[S_d44iC-bgrQYAI5\gDDK6qai1.dpDtOo^KR[YjA$Q^KO$e.Z/q$]G`*$t!HYUtFCpH^d#-J^PmA\pB\?ikg("u^6Vshg"UE8Ge7u#a;S"GC/$q%!Sp9\]X3(#bp0<PT'&!0Rm&l8OJ:t;uI(oE$oD\1Gdm"rCIf7*:_"Un6kY?Q0<W6@Q=;#e8!I70r/LrCV'V(Br8E]Rha&D2Bi,h1+&arMf)R/rug\m2X`quj>SM(8#pGamZ<*^M9\ncNHB4n1(ET/\tktk4eP&:b;\lJT>\UUOB>t'YLMh6B@MQ,hp&M/5\S3ek7MP8i^+e,X?>eZ5I&LYC<(@RC0[S\0<`hX7/VL1a<S;)D^Wk``!1Ru%q*bkeWb)j]D(?bht?R*e>XOIGSN]c(;f1[P6dOC+cksQuE-N6%$jKk^8n%JMh=)M=/2Ns*IVq&h+TPMCNo`PISlhb^0IQth?!DK*$45>XX_q[SnW*S,gD5K432o!S&o;h3)^f/%4DcG;nWqFYpRl#0bBWdm&H@%f[&&,GYZfUEEA3R3:)('G\C/bI[,98RT.l&eEkk+CJ,<.'E6#YU;#X.dKJNHG+/[HIj=Y(Mt3V9Vt*pt<YS4(B9Q/8.'$^2]\1/8JB]VkEF)&rD'LHP)I(gA_$K!=L<6O,:N"(uX:_F.8me9<P69h?@#)ek(,$8"eZVJVCh]Ktf)TTgK>b.Zs3(ZrO*(e=OmTDHsuE$Ft:eq]l<8F/hI8#&B1o-EBl%"l.KBDO\ilueVsgSQ9SgNitDA63`4`-0ZIL2M"[c6md`Y?'2;ctMSX!5321@tN@E:8D+$B:!9`9;s#,Hs,Y2#MK3B)u~>
 endstream
 endobj
 86 0 obj
@@ -526,7 +526,7 @@
 88 0 obj
 << /Type /Annot
 /Subtype /Link
-/Rect [ 90.0 438.587 589.908 426.587 ]
+/Rect [ 90.0 468.167 589.908 456.167 ]
 /C [ 0 0 0 ]
 /Border [ 0 0 0 ]
 /A << /URI (https://svn.apache.org/repos/asf/hadoop/core/trunk/src/mapred/org/apache/hadoop/mapred/lib/aggregate)
@@ -535,10 +535,10 @@
 >>
 endobj
 89 0 obj
-<< /Length 2046 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 2076 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gb!Sm>Ar7S'Roe[&<$WaJ=$op;3q]:kUgSZFm6ju6WFu1:"a8l;&,oQrqE1*k)h46:>0U$:c&b9nm&nMiHLe.e'[LGkh?AY/,B4SOf'F0ZY`qGZq0^L+Z`)qB5/mEk+`H^(C(IYh*mXch6/'XEce&?aMF``'Yb[aM5I+"D><55hm?lMS6pO[/m_8)O^8s'bC<X3fIG/Z=3B'j)t!5g'ZTK=S(N%lqrCX<MQK,f>D=k))-n$4r"K,&f2M'p2Z:<>cuP7A.Y1a6^$'>hh-uTGl$:gV]6+qk[>"7d6afi31-C67"/Zhe5$q"QQTaXa);%<2;oo;3(+mLu'I8hibl![0mq:Z%D_$+ELTDE.,Rrd-a]Pg8V)2\3np'hjkA`EA2_=Z<[@d+F6SaM]+[UWc8;QRT]1/:G03A:W*4'mh<]j4)JIK`35CCE>OBY4!AQbVElI]IVYdehS9N#>HaK(F6JXY7CVAhF_!AB"nj4S69_g")o\&>5@l3Q#:(E<;c(n.UFrR:VYq3<2LY4B>EO\(X'N9[Wp6rL-a(=C6(&L4^]`$2Y266<1gr"J`S_G(lp<.0jJopj(]]imR'jOl>s>k$!m`ljpTqqZlA%^K?;WG^0COm0<SRn+t(]IQ>;e^1t&9?n3IG>3cp;"YZZo9?+V?slBV3)aUaXq4=k@a392P_h:T8_F`uPGgldLXeJTHt:EJ_8,SW9s`^;OO84j@p'?W&oLhT%&$P:msreiT(h99UjTu]fU9#A9WaU;C\`=pTQP'!DIXQn0mK+?Z8ZSc`_>>oM2>C=H!KOX^>C]OZ8-41QRn50%+6be#Aboc!oD$7OF]9QnUXT$)usrq[cb+Vb(7'UL*1aH;aUO6AYWoY//oMCibo['"U/4gKIt&KgMs8!(WSjCK1jQD7_o]eq^Mgtqe^R'O>N#K[@nE;18Anukuu58A1[CLO)q2BF9!)$8(2aN[7f`qJF*X7?t*VV1mhg+l,N=r)t,Rrj74Q
 8gl(WRQBbSYOT&4ed:dlM3'S\1fJU.FlnWtm#86$G<*;A'R$MKZs'C`Z,1qmpJ!H'X-lH,EgIKrPc."8rI+UU<,ghXYrWki/8\X2a9-5**_X7E#Dn0P-2KI$1Ac;2^q5`iIpTlg1mp;X4_t\W8YQ2e99%1P@UnsqlXmOZiM'r^='?2QPg?SRK4O\Chj>s^B8Q-Z&REbGBn\M7['o)rQ%ao>ABGZZ!V!IT8=5a`<fablpOX/[Y_SDkCYaHY'`0&ld;,ejk:XWcF7bGY(,4EB"/<1aQm16WW'u$>m/`6:C+&Zo9M!W"UQ-U7/#"2dt5ZObEXDq4j,cWK_96=:GjLGaA'HZEV,upUgVeG8hV/]TuG2uKrOQcp0"ZL8N/P3r:VX'6^Arjp-l6Wh["Wt=_cc?uqQl#V[TIRjCS\Q4E<MeNhg@U5A6&s=Q\oLV2KNP?1UZ+aJ@Uh?:%Ep)P@j&)qf34-$-g_k"$re]/E@d-#WE5$7ADhV2p[nG2@1Z3EPdQ?WJ*m\PlT`=1i70F&Y'Vb0";ce&gl!1NEVOM,g0J;GA3][&YNHZe?K:kV@LR(&gS.?&9eU#jl-ctLBrP:kKi%t`nlQl[e_<>N!RDTF)af:r4DKC^9^dPV1h>(8+mVP\&O'(%Zg496;YGga0LfR"frUM9&@$fo=tpZc>d/-,MmKPijUfr%1<,,4[=jV.:Z#0g=S>;W8JU#V"3#I#_@`%-LX^q4ao<Du>b\g!!L%?9e!,]Ba%OPJJ000S-_?'n0W#@+mU0V7`p;laH2,i]X9T7@X.Ipc5\(&9J7o'7h[C8BGpJot76-%'.`q6C9rmH3`>1pt<IZlA_iZ7IarGl.p0?CgCZ.Y+6r>FCVo6qeAF8WC;[^HsfDT;YEd#d6%6;Hf6UPW5dT4n7K-a`B83P\ja<8H,'/Xb>ma^OCn^aZS^8EL4;MR!2GP?k&j;O%Ii1E)e]\[J!\X#(dNqc8=CaIZu12.`;%%T\g>0/
 eH<NA/^X2X[n?`WiI*b9Kfc!,U:`Ud208r4qta/Z(>Mc."aCF3/0.s[CHmN6A4JQM~>
+Gb!SmgMYb8&:N/3&41rhJ@4NVH#_eu,`^ol9qB4K.De>P8P>I/75A,r[f4"YRs%>dP*.^T:^"&6,^8CpRENn&Y@aOgZdIBeVQAbVgQANL<O"(_I[[XRSsm)_%*_UHXt3$a8$<D?YT;^_h:GY9RC5^&Q.VO6lc!c]mO1]=<e_]FHE/$Zi9\Td[,T3O+/pP;(&hp)B'I98l@;uJ[S]4a_B@hcb1'=I[jN!_Z?Ym7I&_Vjq*b%Qb^Sg!0L7"eAG?09=(4u5&P3gMhIPtug"8A(OCpPkFXq`/)FU!XZ/uWo=iPrLU\3q4O0Vo9cQfVoqcWkQ-rY<r\7r^K@Om8U<^B,Oc;qo"hP<Z7AekG*QfrT=O?Y=BJl%JQ[$%KBQe-Zto'q!,+P7&'<L9)\-W6PtBdC1d*Z'W:RnC_"f-Re95!WlFo8%8YI#b9rArc'G%1Ap+r&GD'Pj5csWqe;SoL`Rp\pj-Dl4%B-2ScJIWf>)o6oFUO1F4@K[<`^XPH2PjEd>hq^<D0gP./)\]GA=1#[&WqA?iemUYn_H?7b^7Kj67jc%\Zf*S0B[8Z>E`bAK)TYRG!J;hb>gIFaejZ'odFAudmdUu"0[jFYLs0Nb,%h'.@m'B2uoj)e!t_NoD9gm'Y:L*\9U&_KZIeok<3B?;O8b*O)bcgFod)]XT)bQ]WmrBe@'%hT?gL@HJi]oDW4^6:B[Ee3)kperM@/!dU0^#p4Q+7e/'r&."TZN+aX(.HFUmfcJI_U"u<G'`N+CrjiSmM5I>ND\=3d/^W'/*Ik8J./P?p]jG`E^[]+hk!!80Lt+8(80S+$k7c`P_GhdYUjIDMa+FaQ4-n>'#"ePD9&_!?<!k-%53/l)$NeQeC>C%p=f-=OXq"Tg-?&XRBZo^H3\JW),Ir0j,>E3*Kc&IZ#gRgm8Q,7@+te03AKKjdr:HZL0L0\?%8JUN2n$'\<l*daN>o!9]&l^1u+ZDN"=CGAT:Ad.as`'-m8LZRFOZ
 [A]jT>n&8rnK3`En=7Oq\'%LNtr?fbE8A2mZLHi%<'(U*kK`B:Dfn?]dP_ZuM4%(%QPM7GL(:<jZX7t*9bKHBE&+f+VpM\=m6$.;%F90`MQ-fO^S!LY9C;!re3Yb'bCk?=p>-E6YDkC`Y(,9O*IG/4%]k=["=5::o;K5g#C(]_hJp-#'8\-A>>R#s,)6QDEUQG]@.,ejgpN/2YMB!#(F/,Z@W#qfAC7j5TGRA(l()5M`f(LWOQ3ptR_,h`T[LXgqCng=PH\i`Z&lL`H5^&>H)bG0G?]`07Tu5F:*jJSVOn&YFj-8o3^!I;52/Qe@rGW,sMGCC0'j?K)i#4MIp0e`:RSdQJqOS)\Pb)Vgj'8,r<he>F*.!iKJ[JjG3n;R@&NZTZF9^N'n5HC1R(*qKR_G8g#3H@^eVN8:e[<p:a%?.b*gb#[LN"e[W;j$saFL%ShfJXOk@9ug<:8p>KC1]Q7NU5ei<'s\Bs55PkeLnV(i3i+g3UAi=PV@V&<cSZ(kI(dl?7d9_bmmO!d8c>K](Z5m+>oK/foX!7%I<tM5(T#$YcO&>!pp<:`Eg_24!p,nQkWI4BX^EX+mO#2DK#rf0F7P<e1GlB9DDj/=5Wu]7^p+HmJ9:i*UOHAR,H#B[^IVW=egXPP<^EoODqYC8KCK]DZT;fUEb!dMkr4,?ilP,R`+qaR>r+MYaK/H(ZQ[\Ob^n"l1-',9F'<:4m[#Yrs6lR$4XlH1oL2olj9`Rp8+P^nJ-9C*G1>#L%pp`gafOUGuJ=TQ<(5LU`Vk=FR#%HVRScL7qtX56b>:"A,Wsa5=sEML0^nI*B,L1.Vh&>V*TJ;ee.1"q2"l2-P(@^o(,U<+/%c%4hqh]8dup@YOT&-SKOlf]djS]PV8@I[\_*:Pnrr7_q1F;j4=6%PaRn"k+=9FLV.d'\[EU[e(=h2!G%5'dY?:Cp^';,s!W&oG\jZ?B))o1IJ;6"'bA_3__tdGCL?YBWt3gs#*1mEPW
 BM$/k,?IiTn@Lq1.GHJ9l9=JqTm_>NK;<LpJHiak,/aRsE:B9.3(;;Jd?o*CdtLb+.d<RG/*9&0QN\_u]SoTYNL^B!`BIQ.~>
 endstream
 endobj
 90 0 obj
@@ -550,10 +550,10 @@
 >>
 endobj
 91 0 obj
-<< /Length 2195 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 2157 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gau0DD/\/e&H;*)+m_i8@,XN=4i8t\=d*I5g9'mA%.c[0&oA;E7#dAhAAeED:2eNWOjXr]:t-(knTaf`F)QN6?G0XJr`i<9&-&h6O\KZ8pO2gY^#o.7F"-Xld*febY'sNe=g,QM$nU\ZGO+)-DU7#*O':@Bf-(`;eiL-d5Of%+Vq)`$-(V\Ia)R6?nbIKYX@n*Sn3j6b>i/Lan4`!AEN;E8FIeI#Nh>uF<gr?0EN9f(\59e9lORe0j2;QGOjK"I9/^`5P@p@`R4"^?n<"pr'eaLKms?36GVVn.a;kh7"6(8=H5:'4S>H@28DGW['_no5">]4-ealo*$L*f`OWZ4d#hrXUVW4[Q8"iXBL?G0go"[bXe?Sdpgt:0pa#ncP]R7gu=e/U!8<IXB0.WX7U7Ch4(O:ZCTO9nllUmbB<M@rLo5*2A)]sceK@k:A=sA/PTaad6>Z^#L:kf#XY;h,*/_oiSdLuokcppoY(7Yq\1k7Bc4krm@?)"S$%9"^qEV!Oh&Tb6=aQC???^s5Ph*"5pm15&+I:;+8*s6#7CN_HJ-$DS7)1c(bnR=M%4kD"(V*jT1[KF^>7'Ge+,]p`FT%?LfN3KhT)/p[s)6:E7$!,C1#ai.s75iK-^LU1Y%bZBBXO)J*Ci<(2%aSZP"$grRedCHlW\m.0$JB8Mq_6u&SCT!jmmZ<tnNi$o@Bp/[e$/I9(n6)5M$sE(:e>s384^>M5T;miD[@H[qpaL;&p<r_4';K6B]1sDO"gX014tbp8'>#XU,nnhhHfK&!H>?ZGf,mRa!g?#?&;g"?AVh:2]alE=)jXt&\VF)hYhD=K/6/aOZo6MAR=:Wekup]i@R%F^q_M+-ip>/9r;=&[VH1S@Lll5%;t2/@%*Z+R?s6RKulID4ppcclkeUI"jlEqMbH4Rpja!o?JaYX5B1&*3I:KLZ&9%^9ii7qj1Lq_Qm33"/8qdKOCFeS!PK"KPQT.1%+6)"OQ^u5j'1l&V'7E
 ^WH",qlH53V^t3S&R`=gl=Edn-`]F!EX>fT4`qgV>,jo5H))3sB"d_pm4t:um&C&^/N98`Kg!5jPpgtD:>L'hqqF.1=@8(lf*`l8$kI:fOi5*5&/=Qdl$!?dXJ/uh]HY`H#O&so4k5_?/&CaG>2KdK,#W8+.#je*IlSnN!&JX#VG4o8EGs8T1]i7&Q'nL+Bd?h4X^F=0uY+_e4G?4$5Ceha9@b]!7?/dokaR7Ws%8(!']IY/.R%_(nl,F*WM+[4C0-H#VdT&IT'cAJT\UrJE:l1!"ge(l#d<>WA?=J!GW)on[k2a4uDi.Lp**Rp$\?E(,d>6ssHS176'A;j?XD@.RbnRKEZ,b>:!T:JHK],$d5A>sqhirH+s3*UGM23091+ro!d?cSk0m2ts;/]ANO0lJs1)X/$`MU&LEBur.BWS[[T'Kan'b?+a_ja1::MV\]<3(Q2f['m7";hE4VJRLr"a$_]?36$%E<\@O'SXu#5Y#t3dl)kHe/YhVQK.i<_qY&j'TI0GH-]mHE/,k?Hhp@a^rZXIr#s]RFWhT*6T3;Z2T4FA%QFmkk0RThZ'Y7p]\NtnkHbk>3#:6>'Rd/7UU0#SKlU?oL75_REfKU9.i+qHMuABU\X%T1j)R7gs84RiBLj?4%)\=91e^3S5SLbIdsspQP_ZEhRMiVC3*`&D(dqKeL;VNZ-t+csR:m9GQifFXDo<99du*unhF`G5*ju^_4`+Ak$)YD?bo"]0^?`YT!"rP,60uAs$QjRj826eS=@_\S;nbKP,bm[";$p49bGfg-;bqiuUH\<CO-?c*S9;N7`SR!8C4q6p5c)oqA<GX:04>*:$/Dq`M_1bC.SU_30&0I:Ys%D6>pN#T6#[At(re_0-)p&=h[]LT1Xu5pD))"W<K+ifCe%hE9Fu$XfsCq_.]-R@7P-Ec\fUX8I5/&K8Et*]j'U!O+Ll+;1WcIjF6WFm40E.%D[*H3/[V?Sh'M\`LZ%tl:"9h7e(i
 .La*aIOk#gL?TJ6r.b^rS-_r:G(M#uRdqFrArVW2\.1uC&u@`G+Rn(h@V,k-+5fE>B%E5HL3!hEZ_5t-;3/a+e(TYL)2^)+eKPTd/a('1/%"ji9j+\OtZ7)!;"01f;RN@n3#!6P)aqB0IO%oaO0N[n_riOJ/#L2QOmm23n:NS7B&Y0kOkWq1m&Xs<.4a,Fo`hHcj5N!B,R,\.&H?[*Bg'*~>
+Gau0DgMYe)&:NH>&Gd"YW*,7o]-rQTN?&gKd`,Jo7CNe4M7ZD_&lhQpg+E0i*Smfj/D9GY&S*Ic,3R1oR@E'8=7=bA5?H@g_uHc;A/!_gI33oDYIQjg=?o"'Za?sFX'\oreuN^A",f50CqX'+m62Kg;6/I;3[CHD>%cFT-_$;tAFaPX.e?%B!e0_*e2h+,aX7fVDp.TFXZro[O)l]hO$mk>i,AeX)^%8$Z4;NoJ2-&/Ziff3=,D<hp...@omIjhB>\IH#=k>SR2OIQcR@=f%>V\M@E-['l99YKE9T(YZE#rdDL=ku:S8Qup/?pT(W]EkO`aEYc&&BND1%kg\E<7goc]-/lb6_Q3CN_X%!Br78"aGC1kjtB7WZ>Vt5RCjPmr76X\?A2Y?9V!J,"$e-Q%o,pDl5)Ik_MWm[hoOLR-.@4mfOZn!)o+JH@lS<?#P"9Mg_g/A47q)DDG0s).t;c33JKpGU_3LQ]88q?B4^@rPr#
 I@nblgQB`%Ldo:;>eDR+M\+A#6Z=kt]h^2qs<uU%eARO>7hQ>-X)ANe;FB@XF,uoDSMkEdl2h5Mn-385jf)-!8Nb.Ig[J]OcQ*om;^c\h4eBK=u6LPp,C,Wa;kW:N$hs(_QE*Tm$rt<EEWHIL&dM]4o<3(qkUilF$&sr&*MY_Lo[B@L2o\6?^gU!G!,]<D$g"gt9T_([qbOSNK%+Q@h2a6P'<-h>b!BEi8Y4<1(aA@H0'u\CO8jlA4p=(CI5tJeYh2.-L&Qaa/F7N2i2ao2H%^!NMgfN,'W5S:?_f'']cMgpY?!G']VO5Vb4mlVd!6=\&jNOt&Mj??s9rV4lccgGmLJ[/rH!noOHkl5mfM2ZY(A0SNnOT]B-'N<P>&7A*)](>QJ]<#jk.1JF>Od5'3P:3/j(U*BP]Br33u#9`JH,cqe$Mh[irNGc><'ImM*&6CZRD'@"PTmQ4)I>E7*S#u@l^]q5J=gm7F=)-QM1e7%<%'N^Se8'NB(/*'7U:r%P@lOX2kK+dtYB%e%lNHg`1X!-2+X[-fO!UIpSp!fT:dC4@MK7b31DP;PBU]PbI4lQ!@hshMR"cbJeqJ'X$P(k-uClih%<iR);JUqnk,L/.GNS1!mkAgGGQ8SFY#a=u-6s%#<#)'3LaV2BAYA"qBj5AgU!@EId7j@Gckeo1^b#(O7NnNUX0C#j?!OdS)?s^c#[ZDtuY."rY5\_&3e'm]c3N:'rEsoE+>lh/qTPh+]XCY`G\)pg$YF1S/p`V29r68S<[b>i`$Qh5p.+Trge]0IE_tR]S.3qZHPs^^TZ-dD_^*N0U9"5lu6FmVL4\<Ylc&M'+bb*Xq/%%[5BQaM?e'SM-uYe*l/33)%YAoF8V>_((sL>O\h*qN\&/1:&EO14J<_=(YAIP'YW-h>"CJ%"aCp4d0+hQqQ=lm^SR2]btWlDkSbbl7Sbpq?,(<Br[3'RHA*&39Kg31<8tbK>olU1CIA=C_#'X8/1h7&0@
 ig1`_p8TR"\=M&D*:^3>2MOC7R09j%9mG;hL4:5+!j&Xiu`THjZRbb+];(_S8bW.u,hU7VUlLI.;Q*opAJ$=1I)IquYm`<.CO6gKAtWBO-u4?BX4D27/OT,>/YgU:T3f/IGG*P"X`/leGi]Q"rXgH&qgMcP"XehA$+4->WPGlIhE^OA]~>
 endstream
 endobj
 92 0 obj
@@ -573,7 +573,7 @@
 94 0 obj
 << /Type /Annot
 /Subtype /Link
-/Rect [ 250.644 205.748 290.628 193.748 ]
+/Rect [ 250.644 219.801 290.628 207.801 ]
 /C [ 0 0 0 ]
 /Border [ 0 0 0 ]
 /A << /URI (mapred_tutorial.html#Reducer)
@@ -582,10 +582,10 @@
 >>
 endobj
 95 0 obj
-<< /Length 1816 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 1812 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gatm<D/\/e&H;*)+Tqt=!];9%n(kRLm?4=Keo[sJDHMXF[V2(g/S^N7Ur.ZZ:2f::QCARoJiGfKG<A(`h!sTpo?#[5o(Rf@.K$lN`"$dg+:-oSoBYS-mnse<eC)3;9R`DB]N9[3JAc8R^-_rTFF;7T+a$.QrsrPVZ?0h%J,/DGlQIe2kHRJA=7at\BcM3PQWgMk(QleJk$./tdmoJ$=l@f)Ve_kPPoD_d'h4QBH"j(+DtAr:m%UQoOd.#t>[PD0^T@6,HV:m]M;rb.^6)%h2JCSYnXWMd(),uA)@Kg[1r=5A)A<mp)Tt"i)_$`DdC>&I'9BRO$.!"jlZ>epA+TXI-:*$0fTJCe/h;UuCrN:/)=c+nM]XT*hgN/Ir;"QCaNWLrp_28SbCq[-3Xc3N>5_T$C;IA791`Wd[ruo%B8f`l[MHe,mdQXd/B87T<?\`_(%t!=g7*-hmBE'sH(KqF$R_"$$pG7M=sOYK1hd;%RZ?,,3jXj71KB\No2X>I`iOFqEP&0o5,lM!ALh7#>R/R\N0B3=`O"g^*Ge/^_;`1MD,;&pAb_NnZRLn^c(WnZ3fpgJL[VdRZG]k<k#%FR>C6_h46O2F3V<nr0s=US*ehH/!MpP@`dI;c8t89*Im^'bpM=BbL_A:$J%S0o+XM"BM=Hbe"dJd&L>s0=q32"&drmUc4qB71[T.B.RmDIV!o$BZLehbVS'lZ[W[T$\nA[RWBT2H8gGckd.@7RnSf@K1Bd8GG#-fOfjAp.V7PZFE%@jd?W.2LT7ekRt(*Z%r]i*!ZE,DL#UYns<i]_F$Q+h_(brRuN4NE*6iq3P=lOe&S%/C[k3X!q9@ejH^Y4/I>)S!'JCcj9#Z7o1N"HkNop02lV,bC]8VXaqliAdBUi]!Au7G_:@h(;'%8sMOsY?u$e/[Ag#:/HbR<Z4hC5&aP_*e\DJ!GB"Rk?9J4!q2JFa$l8&*&uYg-:EGd.M^AuCm,`Q]TaiuTt]>QD&8W
 A0+*#?#A@Hdemb0(]#mKJhjmDP#g+Z<'(%Z@0O$00E\MpZFc(>dmKBa5TYc8m3aI^mbR!Jk+5O)e\0Q<Iob_2><L'`W!*X]WOrG[HL*KJ`iCHBt$HL7m'VHZ594Vrc<_,e*4;2]:IF8qqp0kan6k+M^_#Vb4[j,4RNb>X*M<[sQcf?2o/pg,=ZT'9Am>Ak&6eF:EI1Gf/2,=In?ItGn_l5FeX$g^-/<r]kad((B>g`henG,UKlNTVOQ0*3?c0u1oZKBdVH7\XG2"#P=nsblu**aBr!.j1>imjpEju4#edV;!T3eP<_dQcLU&hWbtF)A.l]k&l??cMY;QKur#LPuB7f!e6rishEK@OcfdD2&38^q:m6FS+Oslcd^G0-ii5NZ[t>"+6`oi\"<DKMFXH2II2=Dg>k%7\-b:O!+kLKt9F9L'B'2PUcn1(8rDJc(J8'p]0ab,b#S.8?O`5'?=Up)^tb*4XaAPk^'nEf`.WpPT'=Ar$JWAM07Un[(VGmpT&-#Iklr%/r:!9E4bb;qj:C@XD%rq@GgX8hV3e@n?GX>rf(^I2XPVh#,'B.iQT25Ui=qHgs27[!B.WP_:2tJ6AO,H3;Q5OV]ldN0Q@-Zmq&%p+-]9jT)KsU1f`cl0;%]<Aem3F#9H5\$"[E$\`f`"@0iE9^n:n#2?V>0ntY$E'9]T',gCHEU:oie9h/9DU&'GuK(!s=JaA\t0(O5\V$`&]kkXGC($bZAL/J_2i-]bCGbsuW>,LTi/a*3#mY1Jd8Bc&t,B`0?/%gBFL#r&D<ShbU7[i(?F-[E6em9+qTinumZ2j1FR'%!^q[ZK2FhI~>
+Gatm<D/\/e&H;*)+Tqt=!Au0$n(kRL01jUnCV&%`2_7<^>I;Vo(,\]VdU>@hV`43Xb>!jH5o^oa4!(#@mWeA^q;c?Uq0PH1'`ME7@YZpD&-VLeq=X@'G:<i.C2%*.-GN5\goJ5(5[q/dh][Oe3kj^;OLcU9s+`:;=ZWsN^\mc4ooKpTo@Tf1X8-Mi1laTc9<D7FMb)o5o<%]Kl(d^K=l@f)Ve_kPPoD_d'h4QBH"j(+DtAr:m%UQoOd.#t>[PD0^T@6,HV:m]M;rb.^6)%h2JCSYnXWMd(),uA)@Kg[1r=5A)A<mp)Tt"i)_$`DdC>&I'9BRO$.!"jlZ>epA+TXI-:*$0fTJCg/h;UuCrN:/)tD=po2h9Fmlk&_rd8<2A7k9tr/'aejhdBQ*<lTbXo>CM[GY8WV5,im>J%K#1Ie?F>74mQGPKBmQ=G^;WY!n@$MttYmEIYEG1b'J4O;!^Kp,#"#+l/7/J8=6RPY1#9uh)QSQX"WRB"Dbq5W^_A(Ebt\6[TrYDaWD)LNa$e:M4Y/"TM^mU-]K$b#cbC;[k1*Q,))QVDH^>n.lmf7Am?3b6Q:PpOEO235$WgYtk.fK%RFbc-(WMg;GY%k%GGO!pu@0]n90;rScPrYoUj^1S[+7[1-;p>a-.$Rp)-8;n>e0;-8P0HADMc_i&P34>jtp3C=K\#l"7faK>\Ph'Gm5^ZHsg(`AlQVHH&KK&$*6=Y]+hS/gA8@cr5n]]);8fL(O22FCR,I_^"0p5,:DW%=m4oO[]28[,jYn.3Sm$1KBJnmG2)$PdN')+D-X7Z(kDV!bYk;aTJ'sBiR>`X,^"3@seefg\=&BbTZG(l9Jf"d9iBB*F2QA(G6-'4??[,9S!,Ol3016je#%EI_o'>NKo.e;`mlu"9C;QB)?H2U(1CQT&.G(N&V[F0j4o7=5goE]QV#WURU37ho](O3^M4>*WJj1s&S1EdC<;Q5`n@[kSLj/#Fp$2*[LC:hgsGYug
 d4$`]>YSQ9Sel=WnqX-a,6Vq*OPA&!nK\:BCQ%S<?Y#D\@E@6:m!#6")e`gg2@7F(sq<3"@`$N7cX7%aN>#jf*&"ob3/%Is?C,kd/'TQ.WUMua970+lY^-qZQ@YL$\_D;c_clmggDBB(Q8CYGQ&IdUQE]`8,l?FYfOJj5nqb.Jdij+?815fZ%d&pKp0naCJdcV0K?Lr7MlucUU17UDcZq@,0b>N&mSm9C=`$K8^$_NKuFK)R29InBR=IS1fY%>k_1%\T/_eIonY2qSk[lLrT-ia=hDoJbOM9TrgbbWd<_K6!;-)?%!i?_[m4m(I+F*l)<5e`3=XXr)!>7VSXqQ4\$7`HB&5J^=q`d8+%4Fh]I53V+G@i(Q,O'YA/rZ&u7h#Q-+[^aMG/tr/;)qSpnmOaBV_5J%@KeYt]\59Y)'@8uiQ?%[eh?#-:^)>Gb*$=!bBOoR3*6D)JIH#KfG7+R&UBbA0"9"83Q2*XDKouKZN8N^h5,F:oR'nr8l$e%4r_H;:fHlZ2$>u)WF<@FGgGBAu)!ma*dC\,:%mG.KgV7;ogNL8J]`9lM4e-ebK,!bJOk][e1r-!_0pm9G;!?.b#"N%Bi)F4g8gQ)qrEZLglQbt6eC/nXNi";>jlNh>bKPRHj1o.1-)%Cj3>XjN/.A5m$lDr.dpO;e5^p*;F[?`725IcL6F9gB[-?e31";bu>OWYOH]R!'e4'B)^.9CZ$U#S[SO.as`))+2&"N*+*A:Fl=j(pCTEW#9h7#)1)MpILA>JVrBnb_HU9OQ%XiakNd7A=3Cec^:eCn\).l;#X8/=I])q,<!ErQ0Mp2GW~>
 endstream
 endobj
 96 0 obj
@@ -597,10 +597,10 @@
 >>
 endobj
 97 0 obj
-<< /Length 1577 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 1573 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gb!#\>Ar7S'Roe[&Gjfj8/UVY?%Sk>dNrU^2<YZ...@o4>i2LT9fo+IPlq;\Z'93c$Pf*^PKh!c2Tl9taD,-MO-L_7^=c\PRSoE^Gnf!+%U<i"Q3.n)#4)4((l+Q)!4GQ420\'9];)p8F]9,S+BN5f9M(^*HY0;-O`,d?+?WW*K:`j3a@[<qH;b3E@BTEYk0eb.1?/[B1R"riIC$[&jdbqYh7mWLq/Gdqo?0iegSbhZd;*D2n>&LZqjH*r4b_7`qrq<@^oeb.0oGLP=4S#ZXRcV?-2IdY-U_b$['1PfDR;,&\2j<gV4ET>r=]@?%(h-H]GAe<[
 'hQA)9(Vq(-,,Z[<=oP@d#.<X"_?o4.k`l^8Gh>!?[IBd(>a39>Po=BLirDHA,;M<6I,&fdJ^YRCa`o5?W1n6qCc#5Ne<@G^%4Q:FJ"9g1(Zq$`Ql3k!#"UTc9q4HB-9tlOBbL$K7oHrT$j7+uJ+cO)!>cr664C=%hg:EdpjZl_;Au9B7nsY!U:6f3aL"Z>h.Wti'^`-C@jLCm.7N&aM"8&SH$lnGAQ?B)39_bt`3XdbDGPq1'ODQP@^Xuc>m9J2grqJY[V>*>og>T<BTk>d3Gsh$R_)r-jOQ24SKHpqdTflR200qWPJ@RX8_t]<.ZI2:6Q>(`5FB%l$mojV42mEq\CKHcFRU"!*BtfmDuH-lmH3Gm%'8OuZ&dX7i,5Rj&T/+YFK?#nLni%P8/1h7&.oc32/0t7+:.74Vf,!Ba.W\=R*lgfdf<]+*D,O<?ZTc7F2ZotPgQ^D5&`"\\hcPO,fY\LLMkp,&sS&Ei%ak.#+I=[q94Fsb]^S3q7S=#b@Iko5RG<)Ain3X,_sfeOJXV3>2cQ.-kGm>SEgnCdEH0-FpI__gY1gY.l:lh,RYp@#C)sRi;F&^qE/N~>
+Gb!#\>Ar7S'Roe[&GjfZ8/UVY?%Sk>d\^`5/a*g3FBF<LO_J%%,cW%'0DkE(\ljfslm1d9et=T*.3A&-k;sLB@QM&i:;0M?CB8pg-4qQRnpMVZoiO@@ngG_HF0&8ApQOJ](Jer<.1+DR`ug[[40UE0:M@(k_N/QA)js'@l<2T[qW#hCY-d,n"7+$B1qf%C@9fTjaTk\$^\&_oP>nKu6%5'K+N,8e>DQOK>RNC[:Ju"B)FU_:V<,-0I,.C2PpXDe-a(hqf159?X?WiOcPmG*&b1/Q11$2S7QO8KbWo.m9U?L*nI@^B:RqB0&t-X^-K6ga/dO+T]G+nuB2TKjOmC?7'gV="^3`!QKIern6GAPVpT\!jqtlc5.:!:P-2D#;qC:r*Vrd\@@+BU>_AF1okRuWn>)b_&&CMZ^C(Out(geKlQ1?)d+WRgYACCl'PiRAKE=3h^L+G-@jAhq@,<#MMRB[bY/7?EiJotH)`8;.SVV/[X!bSoRT;)diJh'"PU=>hq??m*Y1;$-9:+13J2KZ`BicrNj3`&gF+\OYS<N/`N'V5/e,I]V:Kq*<6dCH<SaN%u4]TBASH<#b\R6MV60r\aZ0s6b,)3Ro(87@60p1Kg(dZQg;4#EZGKZuH_Z4uL*Sk=AhP9TM\rYVTM)F;/M`9e/p3D)8r&j*I=>&O*Yfp?=\2)?uMi)>Slac:?kSrR?[.3=ED8@IbU6^a:noZt;OK"&Zu-??4B:<!a8&ZT.O&23VN:lQ<C9_OEIog4_d-u9@iI:j;KmC6'4ZCG?kcNNgp?$#bd=aJhMGe:4sn?eFb^]eBk-A"OV`:j>U/4ouu%@m:p!+md_>ZeTSDm-5P[K('h!*`a^9\:Q4VIQj8#dR9./(P^3.H54m[#7Fi(D:6NW6*gXB%s$?GnG&5m[R>t=<?=W7?X9K>[C^nr,js3]tV$<'`%+^o&b?J^)B`joq+PJ!fh#9E@3[WeVtOJNngI#a6E!nV)O%Rrc56
 'S6Z8=>_no1@-@?\?5h=bb6fVQH_FM-+Q?hi:tEL1#'3W_P>u@r7>q<WN@r<9'_67mJHS_d`$XN<bbC!3;6nSSI8`r((,r&-p&0#NZ!Wl&Wa]QScPReT:c*1kgm\:h;5?e-lQ/Xbc7fepd.Z-GD$F7$'FHSIqL@rs[c7=T.7e0/SfKg[A;T/p"s_ST8Tgf=p/A?9&s&0Z\"j^\-R$Wr:?BU^U6J[Jp@,GYJ.^,miS-L-i_aqpR#9F72g#k2^Mu'M+P<Qrldh,`m\!;.R,th8ib@h4!K^O;gi\(-]1R-MrR]8I"A](P>UOfX4KC;"TabjtoD`4d2DCN.rTk4s6Jtmk;q'](Cj5f=fY-rn[^V`%:,B,?0>p%l4+Y#Ck!upE:slO7E$1/b59`t_><kSa@+V1`c[m:<=.R&?BcMmH#[g87YY>4E[<*[nds]K'H-[(Lo2%ooLAAWe0^-g["HXHJg)dhJhagQV3e>>uD\d0/8E;Q7H841=qW<"-GV#&tZ2l6WS!r^uH]T4>_a0a"Ztb<dk+OoYGB0if]L4OtlEWLUVq]cd-X*3(>9R,t;*Mc/I/r_Cp.RD"~>
 endstream
 endobj
 98 0 obj
@@ -945,43 +945,43 @@
 25 0 obj
 <<
 /S /GoTo
-/D [76 0 R /XYZ 85.0 554.1 null]
+/D [76 0 R /XYZ 85.0 563.96 null]
 >>
 endobj
 27 0 obj
 <<
 /S /GoTo
-/D [80 0 R /XYZ 85.0 447.72 null]
+/D [80 0 R /XYZ 85.0 475.07 null]
 >>
 endobj
 29 0 obj
 <<
 /S /GoTo
-/D [80 0 R /XYZ 85.0 416.586 null]
+/D [80 0 R /XYZ 85.0 443.936 null]
 >>
 endobj
 31 0 obj
 <<
 /S /GoTo
-/D [84 0 R /XYZ 85.0 624.6 null]
+/D [84 0 R /XYZ 85.0 659.0 null]
 >>
 endobj
 34 0 obj
 <<
 /S /GoTo
-/D [86 0 R /XYZ 85.0 480.04 null]
+/D [86 0 R /XYZ 85.0 509.62 null]
 >>
 endobj
 36 0 obj
 <<
 /S /GoTo
-/D [90 0 R /XYZ 85.0 550.54 null]
+/D [90 0 R /XYZ 85.0 580.12 null]
 >>
 endobj
 38 0 obj
 <<
 /S /GoTo
-/D [90 0 R /XYZ 85.0 157.107 null]
+/D [90 0 R /XYZ 85.0 186.687 null]
 >>
 endobj
 40 0 obj
@@ -993,19 +993,19 @@
 42 0 obj
 <<
 /S /GoTo
-/D [92 0 R /XYZ 85.0 567.294 null]
+/D [92 0 R /XYZ 85.0 581.347 null]
 >>
 endobj
 44 0 obj
 <<
 /S /GoTo
-/D [92 0 R /XYZ 85.0 234.001 null]
+/D [92 0 R /XYZ 85.0 248.054 null]
 >>
 endobj
 46 0 obj
 <<
 /S /GoTo
-/D [92 0 R /XYZ 85.0 182.748 null]
+/D [92 0 R /XYZ 85.0 196.801 null]
 >>
 endobj
 49 0 obj
@@ -1064,139 +1064,139 @@
 xref
 0 134
 0000000000 65535 f 
-0000047308 00000 n 
-0000047458 00000 n 
-0000047550 00000 n 
+0000047393 00000 n 
+0000047543 00000 n 
+0000047635 00000 n 
 0000000015 00000 n 
 0000000071 00000 n 
 0000002129 00000 n 
 0000002249 00000 n 
 0000002421 00000 n 
-0000047702 00000 n 
+0000047787 00000 n 
 0000002556 00000 n 
-0000047765 00000 n 
+0000047850 00000 n 
 0000002693 00000 n 
-0000047831 00000 n 
+0000047916 00000 n 
 0000002830 00000 n 
-0000047896 00000 n 
+0000047981 00000 n 
 0000002967 00000 n 
-0000047962 00000 n 
+0000048047 00000 n 
 0000003104 00000 n 
-0000048028 00000 n 
+0000048113 00000 n 
 0000003240 00000 n 
-0000048092 00000 n 
+0000048177 00000 n 
 0000003376 00000 n 
-0000048158 00000 n 
+0000048243 00000 n 
 0000003513 00000 n 
-0000048223 00000 n 
+0000048308 00000 n 
 0000003649 00000 n 
-0000048287 00000 n 
+0000048373 00000 n 
 0000003785 00000 n 
-0000048352 00000 n 
+0000048438 00000 n 
 0000003920 00000 n 
-0000048418 00000 n 
+0000048504 00000 n 
 0000004059 00000 n 
 0000004194 00000 n 
-0000048482 00000 n 
+0000048568 00000 n 
 0000004331 00000 n 
-0000048547 00000 n 
+0000048633 00000 n 
 0000004468 00000 n 
-0000048612 00000 n 
+0000048698 00000 n 
 0000004605 00000 n 
-0000048678 00000 n 
+0000048764 00000 n 
 0000004744 00000 n 
-0000048742 00000 n 
+0000048828 00000 n 
 0000004880 00000 n 
-0000048808 00000 n 
+0000048894 00000 n 
 0000005016 00000 n 
-0000048874 00000 n 
+0000048960 00000 n 
 0000005155 00000 n 
 0000005289 00000 n 
-0000048940 00000 n 
+0000049026 00000 n 
 0000005425 00000 n 
 0000006310 00000 n 
 0000006433 00000 n 
 0000006502 00000 n 
-0000049005 00000 n 
+0000049091 00000 n 
 0000006634 00000 n 
-0000049071 00000 n 
+0000049157 00000 n 
 0000006766 00000 n 
-0000049137 00000 n 
+0000049223 00000 n 
 0000006899 00000 n 
-0000049203 00000 n 
+0000049289 00000 n 
 0000007032 00000 n 
-0000049267 00000 n 
+0000049353 00000 n 
 0000007165 00000 n 
-0000049333 00000 n 
+0000049419 00000 n 
 0000007297 00000 n 
-0000049399 00000 n 
+0000049485 00000 n 
 0000007429 00000 n 
 0000009592 00000 n 
 0000009700 00000 n 
 0000011818 00000 n 
 0000011926 00000 n 
-0000014120 00000 n 
-0000014228 00000 n 
-0000015957 00000 n 
-0000016065 00000 n 
-0000018813 00000 n 
-0000018936 00000 n 
-0000018963 00000 n 
-0000019175 00000 n 
-0000021465 00000 n 
-0000021588 00000 n 
-0000021615 00000 n 
-0000021828 00000 n 
-0000023981 00000 n 
-0000024089 00000 n 
-0000025978 00000 n 
-0000026101 00000 n 
-0000026128 00000 n 
-0000026379 00000 n 
-0000028518 00000 n 
-0000028626 00000 n 
-0000030914 00000 n 
-0000031037 00000 n 
-0000031064 00000 n 
-0000031246 00000 n 
-0000033155 00000 n 
-0000033263 00000 n 
-0000034933 00000 n 
-0000049465 00000 n 
-0000035041 00000 n 
-0000035229 00000 n 
-0000035473 00000 n 
-0000035782 00000 n 
-0000036092 00000 n 
-0000036291 00000 n 
-0000036605 00000 n 
-0000036983 00000 n 
-0000037422 00000 n 
-0000037663 00000 n 
-0000037926 00000 n 
-0000038352 00000 n 
-0000039186 00000 n 
-0000039726 00000 n 
-0000040108 00000 n 
-0000040399 00000 n 
-0000040979 00000 n 
-0000041306 00000 n 
-0000041606 00000 n 
-0000042457 00000 n 
-0000043038 00000 n 
-0000044083 00000 n 
-0000044460 00000 n 
-0000044859 00000 n 
-0000045322 00000 n 
-0000045709 00000 n 
-0000046132 00000 n 
-0000046528 00000 n 
-0000046642 00000 n 
-0000046753 00000 n 
-0000046865 00000 n 
-0000046974 00000 n 
-0000047081 00000 n 
-0000047198 00000 n 
+0000014094 00000 n 
+0000014202 00000 n 
+0000015936 00000 n 
+0000016044 00000 n 
+0000018879 00000 n 
+0000019002 00000 n 
+0000019029 00000 n 
+0000019243 00000 n 
+0000021596 00000 n 
+0000021719 00000 n 
+0000021746 00000 n 
+0000021959 00000 n 
+0000024023 00000 n 
+0000024131 00000 n 
+0000026079 00000 n 
+0000026202 00000 n 
+0000026229 00000 n 
+0000026480 00000 n 
+0000028649 00000 n 
+0000028757 00000 n 
+0000031007 00000 n 
+0000031130 00000 n 
+0000031157 00000 n 
+0000031339 00000 n 
+0000033244 00000 n 
+0000033352 00000 n 
+0000035018 00000 n 
+0000049551 00000 n 
+0000035126 00000 n 
+0000035314 00000 n 
+0000035558 00000 n 
+0000035867 00000 n 
+0000036177 00000 n 
+0000036376 00000 n 
+0000036690 00000 n 
+0000037068 00000 n 
+0000037507 00000 n 
+0000037748 00000 n 
+0000038011 00000 n 
+0000038437 00000 n 
+0000039271 00000 n 
+0000039811 00000 n 
+0000040193 00000 n 
+0000040484 00000 n 
+0000041064 00000 n 
+0000041391 00000 n 
+0000041691 00000 n 
+0000042542 00000 n 
+0000043123 00000 n 
+0000044168 00000 n 
+0000044545 00000 n 
+0000044944 00000 n 
+0000045407 00000 n 
+0000045794 00000 n 
+0000046217 00000 n 
+0000046613 00000 n 
+0000046727 00000 n 
+0000046838 00000 n 
+0000046950 00000 n 
+0000047059 00000 n 
+0000047166 00000 n 
+0000047283 00000 n 
 trailer
 <<
 /Size 134
@@ -1204,5 +1204,5 @@
 /Info 4 0 R
 >>
 startxref
-49518
+49604
 %%EOF

Modified: hadoop/core/trunk/src/contrib/streaming/src/java/org/apache/hadoop/streaming/HadoopStreaming.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/streaming/src/java/org/apache/hadoop/streaming/HadoopStreaming.java?rev=696551&r1=696550&r2=696551&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/streaming/src/java/org/apache/hadoop/streaming/HadoopStreaming.java (original)
+++ hadoop/core/trunk/src/contrib/streaming/src/java/org/apache/hadoop/streaming/HadoopStreaming.java Wed Sep 17 20:02:51 2008
@@ -18,7 +18,7 @@
 
 package org.apache.hadoop.streaming;
 
-import java.io.IOException;
+import org.apache.hadoop.util.ToolRunner;
 
 /** The main entrypoint. Usually invoked with the script bin/hadoopStreaming
  * or bin/hadoop har hadoop-streaming.jar args.
@@ -26,11 +26,10 @@
  */
 public class HadoopStreaming {
 
-  public static void main(String[] args) throws IOException {
-    boolean mayExit = true;
+  public static void main(String[] args) throws Exception {
     int returnStatus = 0;
-    StreamJob job = new StreamJob(args, mayExit);
-    returnStatus = job.go();
+    StreamJob job = new StreamJob();
+    returnStatus = ToolRunner.run(job, args);
     if (returnStatus != 0) {
       System.err.println("Streaming Job Failed!");
       System.exit(returnStatus);

Modified: hadoop/core/trunk/src/contrib/streaming/src/java/org/apache/hadoop/streaming/StreamJob.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/streaming/src/java/org/apache/hadoop/streaming/StreamJob.java?rev=696551&r1=696550&r2=696551&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/streaming/src/java/org/apache/hadoop/streaming/StreamJob.java (original)
+++ hadoop/core/trunk/src/contrib/streaming/src/java/org/apache/hadoop/streaming/StreamJob.java Wed Sep 17 20:02:51 2008
@@ -68,12 +68,14 @@
 import org.apache.hadoop.mapred.TextOutputFormat;
 import org.apache.hadoop.mapred.lib.aggregate.ValueAggregatorCombiner;
 import org.apache.hadoop.mapred.lib.aggregate.ValueAggregatorReducer;
+import org.apache.hadoop.util.GenericOptionsParser;
 import org.apache.hadoop.util.StringUtils;
+import org.apache.hadoop.util.Tool;
 
 /** All the client-side work happens here.
  * (Jar packaging, MapRed job submission and monitoring)
  */
-public class StreamJob {
+public class StreamJob implements Tool {
 
   protected static final Log LOG = LogFactory.getLog(StreamJob.class.getName());
   final static String REDUCE_NONE = "NONE";
@@ -91,11 +93,47 @@
                                                                 "-jobconf", "(n=v) Optional. Add or override a JobConf property.", 'D'); 
   private MultiPropertyOption cmdenv = new MultiPropertyOption(
                                                                "-cmdenv", "(n=v) Pass env.var to streaming commands.", 'E');  
-  
+  /**@deprecated use StreamJob() with ToolRunner or set the 
+   * Configuration using {@link #setConf(Configuration)} and 
+   * run with {@link #run(String[])}.  
+   */
+  @Deprecated
   public StreamJob(String[] argv, boolean mayExit) {
-    setupOptions();
+    this();
     argv_ = argv;
-    mayExit_ = mayExit;
+    this.config_ = new Configuration();
+  }
+  
+  public StreamJob() {
+    setupOptions();
+  }
+  
+  @Override
+  public Configuration getConf() {
+    return config_;
+  }
+
+  @Override
+  public void setConf(Configuration conf) {
+    this.config_ = conf;
+  }
+  
+  @Override
+  public int run(String[] args) throws Exception {
+    try {
+      this.argv_ = args;
+      init();
+  
+      preProcessArgs();
+      parseArgv();
+      postProcessArgs();
+  
+      setJobConf();
+      return submitAndMonitorJob();
+    }catch (IllegalArgumentException ex) {
+      //ignore, since log will already be printed
+      return 1;
+    }
   }
   
   /**
@@ -103,16 +141,16 @@
    * intializes the job conf and submits the job
    * to the jobtracker
    * @throws IOException
+   * @deprecated use {@link #run(String[])} instead.
    */
+  @Deprecated
   public int go() throws IOException {
-    init();
-
-    preProcessArgs();
-    parseArgv();
-    postProcessArgs();
-
-    setJobConf();
-    return submitAndMonitorJob();
+    try {
+      return run(argv_);
+    }
+    catch (Exception ex) {
+      throw new IOException(ex.getMessage());
+    }
   }
   
   protected void init() {
@@ -129,11 +167,7 @@
   }
 
   void postProcessArgs() throws IOException {
-    if (cluster_ == null) {
-      // hadoop-default.xml is standard, hadoop-local.xml is not.
-      cluster_ = "default";
-    }
-    hadoopAliasConf_ = "hadoop-" + getClusterNick() + ".xml";
+    
     if (inputSpecs_.size() == 0) {
       fail("Required argument: -input <name>");
     }
@@ -193,21 +227,13 @@
     return cmd;
   }
 
-  String getHadoopAliasConfFile() {
-    return new File(getHadoopClientHome() + "/conf", hadoopAliasConf_).getAbsolutePath();
-  }
-
   void parseArgv(){
     CommandLine cmdLine = null; 
     try{
       cmdLine = parser.parse(argv_);
     }catch(Exception oe){
       LOG.error(oe.getMessage());
-      if (detailedUsage_) {
-        exitUsage(true);
-      } else {
-        exitUsage(false);
-      }
+      exitUsage(argv_.length > 0 && "-info".equals(argv_[0]));
     }
     
     if (cmdLine != null){
@@ -222,20 +248,14 @@
       comCmd_ = (String)cmdLine.getValue("-combiner"); 
       redCmd_ = (String)cmdLine.getValue("-reducer"); 
       
-      packageFiles_.addAll(cmdLine.getValues("-file"));
-      
-      cluster_ = (String)cmdLine.getValue("-cluster");
-      
-      configPath_.addAll(cmdLine.getValues("-config"));
-      
+      if(!cmdLine.getValues("-file").isEmpty()) {
+        packageFiles_.addAll(cmdLine.getValues("-file"));
+      }
+         
       String fsName = (String)cmdLine.getValue("-dfs");
       if (null != fsName){
-        userJobConfProps_.put("fs.default.name", fsName);        
-      }
-      
-      String jt = (String)cmdLine.getValue("mapred.job.tracker");
-      if (null != jt){
-        userJobConfProps_.put("fs.default.name", jt);        
+        LOG.warn("-dfs option is deprecated, please use -fs instead.");
+        config_.set("fs.default.name", fsName);
       }
       
       additionalConfSpec_ = (String)cmdLine.getValue("-additionalconfspec"); 
@@ -248,14 +268,16 @@
       reduceDebugSpec_ = (String)cmdLine.getValue("-reducedebug");
       
       List<String> car = cmdLine.getValues("-cacheArchive"); 
-      if (null != car){
+      if (null != car && !car.isEmpty()){
+        LOG.warn("-cacheArchive option is deprecated, please use -archives instead.");
         for(String s : car){
           cacheArchives = (cacheArchives == null)?s :cacheArchives + "," + s;  
         }
       }
 
       List<String> caf = cmdLine.getValues("-cacheFile"); 
-      if (null != caf){
+      if (null != caf && !caf.isEmpty()){
+        LOG.warn("-cacheFile option is deprecated, please use -files instead.");
         for(String s : caf){
           cacheFiles = (cacheFiles == null)?s :cacheFiles + "," + s;  
         }
@@ -264,10 +286,11 @@
       List<String> jobConfArgs = (List<String>)cmdLine.getValue(jobconf); 
       List<String> envArgs = (List<String>)cmdLine.getValue(cmdenv); 
       
-      if (null != jobConfArgs){
+      if (null != jobConfArgs && !jobConfArgs.isEmpty()){
+        LOG.warn("-jobconf option is deprecated, please use -D instead.");
         for(String s : jobConfArgs){
           String []parts = s.split("=", 2); 
-          userJobConfProps_.put(parts[0], parts[1]);
+          config_.set(parts[0], parts[1]);
         }
       }
       if (null != envArgs){
@@ -278,8 +301,8 @@
           addTaskEnvironment_ += s;
         }
       }
-    }else if (detailedUsage_) {
-      exitUsage(true);
+    }else {
+      exitUsage(argv_.length > 0 && "-info".equals(argv_[0]));
     }
   }
 
@@ -454,38 +477,37 @@
   public void exitUsage(boolean detailed) {
     //         1         2         3         4         5         6         7
     //1234567890123456789012345678901234567890123456789012345678901234567890123456789
+    
+    System.out.println("Usage: $HADOOP_HOME/bin/hadoop jar \\");
+    System.out.println("          $HADOOP_HOME/hadoop-streaming.jar [options]");
+    System.out.println("Options:");
+    System.out.println("  -input    <path>     DFS input file(s) for the Map step");
+    System.out.println("  -output   <path>     DFS output directory for the Reduce step");
+    System.out.println("  -mapper   <cmd|JavaClassName>      The streaming command to run");
+    System.out.println("  -combiner <JavaClassName> Combiner has to be a Java class");
+    System.out.println("  -reducer  <cmd|JavaClassName>      The streaming command to run");
+    System.out.println("  -file     <file>     File/dir to be shipped in the Job jar file");
+    System.out.println("  -inputformat TextInputFormat(default)|SequenceFileAsTextInputFormat|JavaClassName Optional.");
+    System.out.println("  -outputformat TextOutputFormat(default)|JavaClassName  Optional.");
+    System.out.println("  -partitioner JavaClassName  Optional.");
+    System.out.println("  -numReduceTasks <num>  Optional.");
+    System.out.println("  -inputreader <spec>  Optional.");
+    System.out.println("  -cmdenv   <n>=<v>    Optional. Pass env.var to streaming commands");
+    System.out.println("  -mapdebug <path>  Optional. " +
+    "To run this script when a map task fails ");
+    System.out.println("  -reducedebug <path>  Optional." +
+    " To run this script when a reduce task fails ");
+    System.out.println("  -verbose");
+    System.out.println();
+    GenericOptionsParser.printGenericCommandUsage(System.out);
+
     if (!detailed) {
-      System.out.println("Usage: $HADOOP_HOME/bin/hadoop [--config dir] jar \\");
-      System.out.println("          $HADOOP_HOME/hadoop-streaming.jar [options]");
-      System.out.println("Options:");
-      System.out.println("  -input    <path>     DFS input file(s) for the Map step");
-      System.out.println("  -output   <path>     DFS output directory for the Reduce step");
-      System.out.println("  -mapper   <cmd|JavaClassName>      The streaming command to run");
-      System.out.println("  -combiner <JavaClassName> Combiner has to be a Java class");
-      System.out.println("  -reducer  <cmd|JavaClassName>      The streaming command to run");
-      System.out.println("  -file     <file>     File/dir to be shipped in the Job jar file");
-      System.out.println("  -dfs    <h:p>|local  Optional. Override DFS configuration");
-      System.out.println("  -jt     <h:p>|local  Optional. Override JobTracker configuration");
-      System.out.println("  -additionalconfspec specfile  Optional.");
-      System.out.println("  -inputformat TextInputFormat(default)|SequenceFileAsTextInputFormat|JavaClassName Optional.");
-      System.out.println("  -outputformat TextOutputFormat(default)|JavaClassName  Optional.");
-      System.out.println("  -partitioner JavaClassName  Optional.");
-      System.out.println("  -numReduceTasks <num>  Optional.");
-      System.out.println("  -inputreader <spec>  Optional.");
-      System.out.println("  -jobconf  <n>=<v>    Optional. Add or override a JobConf property");
-      System.out.println("  -cmdenv   <n>=<v>    Optional. Pass env.var to streaming commands");
-      System.out.println("  -mapdebug <path>  Optional. " +
-                                "To run this script when a map task fails ");
-      System.out.println("  -reducedebug <path>  Optional." +
-                             " To run this script when a reduce task fails ");
-      System.out.println("  -cacheFile fileNameURI");
-      System.out.println("  -cacheArchive fileNameURI");
-      System.out.println("  -verbose");
       System.out.println();      
       System.out.println("For more details about these options:");
       System.out.println("Use $HADOOP_HOME/bin/hadoop jar build/hadoop-streaming.jar -info");
       fail("");
     }
+    System.out.println();
     System.out.println("In -input: globbing on <path> is supported and can have multiple -input");
     System.out.println("Default Map input format: a line is a record in UTF-8");
     System.out.println("  the key part ends at first TAB, the rest of the line is the value");
@@ -498,7 +520,7 @@
     System.out.println("  The location of this working directory is unspecified.");
     System.out.println();
     System.out.println("To set the number of reduce tasks (num. of output files):");
-    System.out.println("  -jobconf mapred.reduce.tasks=10");
+    System.out.println("  -D mapred.reduce.tasks=10");
     System.out.println("To skip the sort/combine/shuffle/sort/reduce step:");
     System.out.println("  Use -numReduceTasks 0");
     System.out
@@ -509,24 +531,24 @@
     System.out.println("  This equivalent -reducer NONE");
     System.out.println();
     System.out.println("To speed up the last maps:");
-    System.out.println("  -jobconf mapred.map.tasks.speculative.execution=true");
+    System.out.println("  -D mapred.map.tasks.speculative.execution=true");
     System.out.println("To speed up the last reduces:");
-    System.out.println("  -jobconf mapred.reduce.tasks.speculative.execution=true");
+    System.out.println("  -D mapred.reduce.tasks.speculative.execution=true");
     System.out.println("To name the job (appears in the JobTracker Web UI):");
-    System.out.println("  -jobconf mapred.job.name='My Job' ");
+    System.out.println("  -D mapred.job.name='My Job' ");
     System.out.println("To change the local temp directory:");
-    System.out.println("  -jobconf dfs.data.dir=/tmp/dfs");
-    System.out.println("  -jobconf stream.tmpdir=/tmp/streaming");
+    System.out.println("  -D dfs.data.dir=/tmp/dfs");
+    System.out.println("  -D stream.tmpdir=/tmp/streaming");
     System.out.println("Additional local temp directories with -cluster local:");
-    System.out.println("  -jobconf mapred.local.dir=/tmp/local");
-    System.out.println("  -jobconf mapred.system.dir=/tmp/system");
-    System.out.println("  -jobconf mapred.temp.dir=/tmp/temp");
+    System.out.println("  -D mapred.local.dir=/tmp/local");
+    System.out.println("  -D mapred.system.dir=/tmp/system");
+    System.out.println("  -D mapred.temp.dir=/tmp/temp");
     System.out.println("To treat tasks with non-zero exit status as SUCCEDED:");    
-    System.out.println("  -jobconf stream.non.zero.exit.is.failure=false");
+    System.out.println("  -D stream.non.zero.exit.is.failure=false");
     System.out.println("Use a custom hadoopStreaming build along a standard hadoop install:");
     System.out.println("  $HADOOP_HOME/bin/hadoop jar /path/my-hadoop-streaming.jar [...]\\");
     System.out
-      .println("    [...] -jobconf stream.shipped.hadoopstreaming=/path/my-hadoop-streaming.jar");
+      .println("    [...] -D stream.shipped.hadoopstreaming=/path/my-hadoop-streaming.jar");
     System.out.println("For more details about jobconf parameters see:");
     System.out.println("  http://wiki.apache.org/hadoop/JobConfFile");
     System.out.println("To set an environement variable in a streaming command:");
@@ -544,13 +566,9 @@
     fail("");
   }
 
-  public void fail(String message) {
-    if (mayExit_) {
-      System.err.println(message);
-      throw new RuntimeException(message);
-    } else {
-      throw new IllegalArgumentException(message);
-    }
+  public void fail(String message) {    
+    System.err.println(message);
+    throw new IllegalArgumentException(message);
   }
 
   // --------------------------------------------
@@ -565,17 +583,12 @@
   }
 
   protected boolean isLocalHadoop() {
-    boolean local;
-    if (jobConf_ == null) {
-      local = getClusterNick().equals("local");
-    } else {
-      local = StreamUtil.isLocalJobTracker(jobConf_);
-    }
-    return local;
+    return StreamUtil.isLocalJobTracker(jobConf_);
   }
 
+  @Deprecated
   protected String getClusterNick() {
-    return cluster_;
+    return "default";
   }
 
   /** @return path to the created Jar file or null if no files are necessary.
@@ -589,8 +602,7 @@
     // First try an explicit spec: it's too hard to find our own location in this case:
     // $HADOOP_HOME/bin/hadoop jar /not/first/on/classpath/custom-hadoop-streaming.jar
     // where findInClasspath() would find the version of hadoop-streaming.jar in $HADOOP_HOME
-    String runtimeClasses = userJobConfProps_.get("stream.shipped.hadoopstreaming"); // jar or class dir
-    System.out.println(runtimeClasses + "=@@@userJobConfProps_.get(stream.shipped.hadoopstreaming");
+    String runtimeClasses = config_.get("stream.shipped.hadoopstreaming"); // jar or class dir
     
     if (runtimeClasses == null) {
       runtimeClasses = StreamUtil.findInClasspath(StreamJob.class.getName());
@@ -632,25 +644,6 @@
     builder.merge(packageFiles_, unjarFiles, jobJarName);
     return jobJarName;
   }
-
-  /**
-   * This method sets the user jobconf variable specified
-   * by user using -jobconf key=value
-   * @param doEarlyProps
-   */
-  protected void setUserJobConfProps(boolean doEarlyProps) {
-    Iterator it = userJobConfProps_.keySet().iterator();
-    while (it.hasNext()) {
-      String key = (String) it.next();
-      String val = userJobConfProps_.get(key);
-      boolean earlyName = key.equals("fs.default.name");
-      earlyName |= key.equals("stream.shipped.hadoopstreaming");
-      if (doEarlyProps == earlyName) {
-        msg("xxxJobConf: set(" + key + ", " + val + ") early=" + doEarlyProps);
-        jobConf_.set(key, val);
-      }
-    }
-  }
   
   /**
    * get the uris of all the files/caches
@@ -663,22 +656,10 @@
   }
   
   protected void setJobConf() throws IOException {
-    msg("hadoopAliasConf_ = " + hadoopAliasConf_);
-    config_ = new Configuration();
-    if (!cluster_.equals("default")) {
-      config_.addResource(new Path(getHadoopAliasConfFile()));
-    } else {
-      // use only defaults: hadoop-default.xml and hadoop-site.xml
-    }
-    System.out.println("additionalConfSpec_:" + additionalConfSpec_);
     if (additionalConfSpec_ != null) {
+      LOG.warn("-additionalconfspec option is deprecated, please use -conf instead.");
       config_.addResource(new Path(additionalConfSpec_));
     }
-    Iterator it = configPath_.iterator();
-    while (it.hasNext()) {
-      String pathName = (String) it.next();
-      config_.addResource(new Path(pathName));
-    }
 
     // general MapRed job properties
     jobConf_ = new JobConf(config_);
@@ -686,8 +667,6 @@
     // All streaming jobs get the task timeout value
     // from the configuration settings.
 
-    setUserJobConfProps(true);
-
     // The correct FS must be set before this is called!
     // (to resolve local vs. dfs drive letter differences) 
     // (mapred.working.dir will be lazily initialized ONCE and depends on FS)
@@ -802,7 +781,6 @@
       }
     }
     
-    setUserJobConfProps(false);
     FileOutputFormat.setOutputPath(jobConf_, new Path(output_));
     fmt = null;
     if (outputFormatSpec_!= null) {
@@ -1027,7 +1005,6 @@
     }
   }
 
-  protected boolean mayExit_;
   protected String[] argv_;
   protected boolean verbose_;
   protected boolean detailedUsage_;
@@ -1047,18 +1024,15 @@
   protected boolean hasSimpleInputSpecs_;
   protected ArrayList packageFiles_ = new ArrayList(); // <String>
   protected ArrayList shippedCanonFiles_ = new ArrayList(); // <String>
-  protected TreeMap<String, String> userJobConfProps_ = new TreeMap<String, String>(); 
+  //protected TreeMap<String, String> userJobConfProps_ = new TreeMap<String, String>(); 
   protected String output_;
   protected String mapCmd_;
   protected String comCmd_;
   protected String redCmd_;
-  protected String cluster_;
   protected String cacheFiles;
   protected String cacheArchives;
   protected URI[] fileURIs;
   protected URI[] archiveURIs;
-  protected ArrayList configPath_ = new ArrayList(); // <String>
-  protected String hadoopAliasConf_;
   protected String inReaderSpec_;
   protected String inputFormatSpec_;
   protected String outputFormatSpec_;
@@ -1079,4 +1053,5 @@
   protected JobID jobId_;
   protected static String LINK_URI = "You need to specify the uris as hdfs://host:port/#linkname," +
     "Please specify a different link name for all of your caching URIs";
+
 }

Modified: hadoop/core/trunk/src/core/org/apache/hadoop/util/GenericOptionsParser.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/core/org/apache/hadoop/util/GenericOptionsParser.java?rev=696551&r1=696550&r2=696551&view=diff
==============================================================================
--- hadoop/core/trunk/src/core/org/apache/hadoop/util/GenericOptionsParser.java (original)
+++ hadoop/core/trunk/src/core/org/apache/hadoop/util/GenericOptionsParser.java Wed Sep 17 20:02:51 2008
@@ -35,8 +35,8 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.fs.Path;
 
 /**
  * <code>GenericOptionsParser</code> is a utility to parse command line
@@ -165,7 +165,7 @@
    * Specify properties of each generic option
    */
   @SuppressWarnings("static-access")
-  private Options buildGeneralOptions(Options opts) {
+  private static Options buildGeneralOptions(Options opts) {
     Option fs = OptionBuilder.withArgName("local|namenode:port")
     .hasArg()
     .withDescription("specify a namenode")
@@ -224,7 +224,10 @@
       conf.set("mapred.job.tracker", line.getOptionValue("jt"));
     }
     if (line.hasOption("conf")) {
-      conf.addResource(new Path(line.getOptionValue("conf")));
+      String[] values = line.getOptionValues("conf");
+      for(String value : values) {
+        conf.addResource(new Path(value));
+      }
     }
     try {
       if (line.hasOption("libjars")) {
@@ -356,6 +359,7 @@
    * @param out stream to print the usage message to.
    */
   public static void printGenericCommandUsage(PrintStream out) {
+    
     out.println("Generic options supported are");
     out.println("-conf <configuration file>     specify an application configuration file");
     out.println("-D <property=value>            use value for given property");

Modified: hadoop/core/trunk/src/docs/src/documentation/content/xdocs/streaming.xml
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/docs/src/documentation/content/xdocs/streaming.xml?rev=696551&r1=696550&r2=696551&view=diff
==============================================================================
--- hadoop/core/trunk/src/docs/src/documentation/content/xdocs/streaming.xml (original)
+++ hadoop/core/trunk/src/docs/src/documentation/content/xdocs/streaming.xml Wed Sep 17 20:02:51 2008
@@ -111,7 +111,7 @@
 <p>
 Often, you may want to process input data using a map function only. To do this, simply set mapred.reduce.tasks to zero. The Map/Reduce framework will not create any reducer tasks. Rather, the outputs of the mapper tasks will be the final output of the job.
 </p><p>
-To be backward compatible, Hadoop Streaming also supports the "-reduce NONE" option, which is equivalent to "-jobconf mapred.reduce.tasks=0".
+To be backward compatible, Hadoop Streaming also supports the "-reduce NONE" option, which is equivalent to "-D mapred.reduce.tasks=0".
 </p>
 </section>
 
@@ -137,31 +137,31 @@
 <title>Large files and archives in Hadoop Streaming </title>
 
 <p>
-The -cacheFile and -cacheArchive options allow you to make files and archives available to the tasks. The argument is a URI to the file or archive that you have already uploaded to HDFS. These files and archives are cached across jobs. You can retrieve the host and fs_port values from the fs.default.name config variable.
+The -files and -archives options allow you to make files and archives available to the tasks. The argument is a URI to the file or archive that you have already uploaded to HDFS. These files and archives are cached across jobs. You can retrieve the host and fs_port values from the fs.default.name config variable.
 </p>
 <p>
-Here are examples of the -cacheFile option:
+Here are examples of the -files option:
 </p> 
 <source>
--cacheFile hdfs://host:fs_port/user/testfile.txt#testlink
+-files hdfs://host:fs_port/user/testfile.txt#testlink
 </source>
 <p>
 In the above example, the part of the url after # is used as the symlink name that is created in the current working directory of tasks. So the tasks will have a symlink called testlink in the cwd that points to a local copy of testfile.txt. Multiple entries can be specified as: 
 </p>
 <source>
--cacheFile hdfs://host:fs_port/user/testfile1.txt#testlink1 -cacheFile hdfs://host:fs_port/user/testfile2.txt#testlink2
+-files hdfs://host:fs_port/user/testfile1.txt#testlink1 -files hdfs://host:fs_port/user/testfile2.txt#testlink2
 </source>
 <p>
-The -cacheArchive option allows you to copy jars locally to the cwd of tasks and automatically unjar the files. For example:
+The -archives option allows you to copy jars locally to the cwd of tasks and automatically unjar the files. For example:
 </p>
 <source>
--cacheArchive hdfs://host:fs_port/user/testfile.jar#testlink3
+-archives hdfs://host:fs_port/user/testfile.jar#testlink3
 </source>
 <p>
 In the example above, a symlink testlink3 is created in the current working directory of tasks. This symlink points to the directory that stores the unjarred contents of the uploaded jar file.
 </p>
 <p>
-Here's another example of the -cacheArchive option. Here, the input.txt file has two lines specifying the names of the two files: testlink/cache.txt and testlink/cache2.txt. "testlink" is a symlink to the archived directory, which has the files "cache.txt" and "cache2.txt".
+Here's another example of the -archives option. Here, the input.txt file has two lines specifying the names of the two files: testlink/cache.txt and testlink/cache2.txt. "testlink" is a symlink to the archived directory, which has the files "cache.txt" and "cache2.txt".
 </p>
 <source>
 $HADOOP_HOME/bin/hadoop  jar $HADOOP_HOME/hadoop-streaming.jar \
@@ -169,10 +169,10 @@
                   -mapper "xargs cat"  \
                   -reducer "cat"  \
                   -output "/user/me/samples/cachefile/out" \  
-                  -cacheArchive 'hdfs://hadoop-nn1.example.com/user/me/samples/cachefile/cachedir.jar#testlink' \  
-                  -jobconf mapred.map.tasks=1 \
-                  -jobconf mapred.reduce.tasks=1 \ 
-                  -jobconf mapred.job.name="Experiment"
+                  -archives 'hdfs://hadoop-nn1.example.com/user/me/samples/cachefile/cachedir.jar#testlink' \  
+                  -D mapred.map.tasks=1 \
+                  -D mapred.reduce.tasks=1 \ 
+                  -D mapred.job.name="Experiment"
 
 $ ls test_jar/
 cache.txt  cache2.txt
@@ -208,7 +208,7 @@
 <section>
 <title>Specifying Additional Configuration Variables for Jobs </title>
 <p>
-You can specify additional configuration variables by using "-jobconf  &lt;n&gt;=&lt;v&gt;". For example: 
+You can specify additional configuration variables by using "-D  &lt;n&gt;=&lt;v&gt;". For example: 
 </p>
 <source>
 $HADOOP_HOME/bin/hadoop  jar $HADOOP_HOME/hadoop-streaming.jar \
@@ -216,10 +216,10 @@
     -output myOutputDir \
     -mapper org.apache.hadoop.mapred.lib.IdentityMapper\
     -reducer /bin/wc \
-    -jobconf mapred.reduce.tasks=2
+    -D mapred.reduce.tasks=2
 </source>
 <p>
-The -jobconf mapred.reduce.tasks=2 in the above example specifies to use two reducers for the job.
+The -D mapred.reduce.tasks=2 in the above example specifies to use two reducers for the job.
 </p>
 <p>
 For more details on the jobconf parameters see:
@@ -233,36 +233,46 @@
 </p>
 <table>
 <tr><th>Parameter</th><th>Optional/Required </th><th>Description </th></tr>
-<tr><td> -cluster name </td><td> Optional </td><td> Switch between local Hadoop and one or more remote clusters </td></tr>
-
-<tr><td> -dfs  host:port or local </td><td> Optional </td><td> Override the HDFS configuration for the job </td></tr>
-<tr><td> -jt host:port or local </td><td> Optional </td><td> Override the JobTracker configuration for the job </td></tr>
-<tr><td> -additionalconfspec specfile </td><td> Optional </td><td> Specifies a set of configuration variables in an XML file like hadoop-site.xml, instead of using multiple  options of type "-jobconf name=value" </td></tr>
 
 <tr><td> -cmdenv   name=value </td><td> Optional </td><td> Pass env var to streaming commands </td></tr>
-<tr><td> -cacheFile fileNameURI </td><td> Optional </td><td> Specify a file to be uploaded to the HDFS </td></tr>
-<tr><td> -cacheArchive fileNameURI </td><td> Optional </td><td> Specify a jar file to be uploaded to the HDFS. This jar file is unjarred automatically in the cwd of the task </td></tr>
 
 <tr><td> -inputreader JavaClassName </td><td> Optional </td><td> For backwards-compatibility: specifies a record reader class (instead of an input format class) </td></tr>
 <tr><td> -verbose </td><td> Optional </td><td> Verbose output </td></tr>
 </table>
 <p>
-To switch between "local" Hadoop and one or more remote Hadoop clusters use -cluster &lt;name&gt;.
-By default, hadoop-default.xml and hadoop-site.xml are used. The -cluster &lt;name&gt; option will cause $HADOOP_HOME/conf/hadoop-&lt;name&gt;.xml to be used instead.
+Streaming support Hadoop generic command line options. 
+
+Supported parameters are : 
+The general command line syntax is :
+<br/>    bin/hadoop command [genericOptions] [commandOptions]
 </p>
+
+<table>
+<tr><th>Parameter</th><th>Optional/Required </th><th>Description </th></tr>
+
+<tr><td> -conf  configuration_file </td><td> Optional </td><td> specify an application configuration file </td></tr>
+<tr><td> -D  property=value </td><td> Optional </td><td> use value for given property </td></tr>
+<tr><td> -fs host:port or local </td><td> Optional </td><td> specify a namenode </td></tr>
+<tr><td> -jt host:port or local </td><td> Optional </td><td> specify a job tracker </td></tr>
+<tr><td> -files </td><td> Optional </td><td> specify comma separated files to be copied to the map reduce cluster </td></tr>
+<tr><td> -archives </td><td> Optional </td><td> specify comma separated archives to be unarchived on the compute machines </td></tr>
+<tr><td>  </td><td> Optional </td><td>  </td></tr>
+<tr><td> -jt host:port or local </td><td> Optional </td><td>  </td></tr>
+</table>
+
 <p>
 To change the local temp directory use:
 </p>
 <source>
-  -jobconf dfs.data.dir=/tmp
+  -D dfs.data.dir=/tmp
 </source>
 <p>
 To specify additional local temp directories use:
 </p>
 <source>
-   -jobconf mapred.local.dir=/tmp/local
-   -jobconf mapred.system.dir=/tmp/system
-   -jobconf mapred.temp.dir=/tmp/temp
+   -D mapred.local.dir=/tmp/local
+   -D mapred.system.dir=/tmp/system
+   -D mapred.temp.dir=/tmp/temp
 </source>
 <p>
 For more details on jobconf parameters see:
@@ -294,13 +304,13 @@
     -output myOutputDir \
     -mapper org.apache.hadoop.mapred.lib.IdentityMapper \
     -reducer org.apache.hadoop.mapred.lib.IdentityReducer \
-    -jobconf stream.map.output.field.separator=. \
-    -jobconf stream.num.map.output.key.fields=4 
+    -D stream.map.output.field.separator=. \
+    -D stream.num.map.output.key.fields=4 
 </source>
 <p>
-In the above example, "-jobconf stream.map.output.field.separator=." specifies "." as the field separator for the map outputs, and the prefix up to the fourth "." in a line will be the key and the rest of the line (excluding the fourth ".") will be the value. If a line has less than four "."s, then the whole line will be the key and the value will be an empty Text object (like the one created by new Text("")).
+In the above example, "-D stream.map.output.field.separator=." specifies "." as the field separator for the map outputs, and the prefix up to the fourth "." in a line will be the key and the rest of the line (excluding the fourth ".") will be the value. If a line has less than four "."s, then the whole line will be the key and the value will be an empty Text object (like the one created by new Text("")).
 </p><p>
-Similarly, you can use "-jobconf stream.reduce.output.field.separator=SEP" and "-jobconf stream.num.reduce.output.fields=NUM" to specify the nth field separator in a line of the reduce outputs as the separator between the key and the value.
+Similarly, you can use "-D stream.reduce.output.field.separator=SEP" and "-D stream.num.reduce.output.fields=NUM" to specify the nth field separator in a line of the reduce outputs as the separator between the key and the value.
 </p>
 </section>
 
@@ -317,16 +327,16 @@
     -mapper org.apache.hadoop.mapred.lib.IdentityMapper \
     -reducer org.apache.hadoop.mapred.lib.IdentityReducer \
     -partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner \
-    -jobconf stream.map.output.field.separator=. \
-    -jobconf stream.num.map.output.key.fields=4 \
-    -jobconf map.output.key.field.separator=. \
-    -jobconf num.key.fields.for.partition=2 \
-    -jobconf mapred.reduce.tasks=12
+    -D stream.map.output.field.separator=. \
+    -D stream.num.map.output.key.fields=4 \
+    -D map.output.key.field.separator=. \
+    -D num.key.fields.for.partition=2 \
+    -D mapred.reduce.tasks=12
 </source>
 <p>
-Here, <em>-jobconf stream.map.output.field.separator=.</em> and <em>-jobconf stream.num.map.output.key.fields=4</em> are as explained in previous example. The two variables are used by streaming to identify the key/value pair of mapper. 
+Here, <em>-D stream.map.output.field.separator=.</em> and <em>-D stream.num.map.output.key.fields=4</em> are as explained in previous example. The two variables are used by streaming to identify the key/value pair of mapper. 
 </p><p>
-The map output keys of the above Map/Reduce job normally have four fields separated by ".". However, the Map/Reduce framework will partition the map outputs by the first two fields of the keys using the <em>-jobconf num.key.fields.for.partition=2</em> option. Here, <em>-jobconf map.output.key.field.separator=.</em> specifies the separator for the partition. This guarantees that all the key/value pairs with the same first two fields in the keys will be partitioned into the same reducer.
+The map output keys of the above Map/Reduce job normally have four fields separated by ".". However, the Map/Reduce framework will partition the map outputs by the first two fields of the keys using the <em>-D num.key.fields.for.partition=2</em> option. Here, <em>-D map.output.key.field.separator=.</em> specifies the separator for the partition. This guarantees that all the key/value pairs with the same first two fields in the keys will be partitioned into the same reducer.
 </p><p>
 <em>This is effectively equivalent to specifying the first two fields as the primary key and the next two fields as the secondary. The primary key is used for partitioning, and the combination of the primary and secondary keys is used for sorting.</em> A simple illustration is shown here:
 </p>
@@ -383,7 +393,7 @@
     -mapper myAggregatorForKeyCount.py \
     -reducer aggregate \
     -file myAggregatorForKeyCount.py \
-    -jobconf mapred.reduce.tasks=12
+    -D mapred.reduce.tasks=12
 </source>
 <p>
 The python program myAggregatorForKeyCount.py looks like:
@@ -423,18 +433,18 @@
     -mapper org.apache.hadoop.mapred.lib.FieldSelectionMapReduce\
     -reducer org.apache.hadoop.mapred.lib.FieldSelectionMapReduce\
     -partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner \
-    -jobconf map.output.key.field.separa=. \
-    -jobconf num.key.fields.for.partition=2 \
-    -jobconf mapred.data.field.separator=. \
-    -jobconf map.output.key.value.fields.spec=6,5,1-3:0- \
-    -jobconf reduce.output.key.value.fields.spec=0-2:5- \
-    -jobconf mapred.reduce.tasks=12
+    -D map.output.key.field.separa=. \
+    -D num.key.fields.for.partition=2 \
+    -D mapred.data.field.separator=. \
+    -D map.output.key.value.fields.spec=6,5,1-3:0- \
+    -D reduce.output.key.value.fields.spec=0-2:5- \
+    -D mapred.reduce.tasks=12
 </source>
 <p>
-The option "-jobconf map.output.key.value.fields.spec=6,5,1-3:0-" specifies key/value selection for the map outputs. Key selection spec and value selection spec are separated by ":". In this case, the map output key will consist of fields 6, 5, 1, 2, and 3. The map output value will consist of all fields (0- means field 0 and all 
+The option "-D map.output.key.value.fields.spec=6,5,1-3:0-" specifies key/value selection for the map outputs. Key selection spec and value selection spec are separated by ":". In this case, the map output key will consist of fields 6, 5, 1, 2, and 3. The map output value will consist of all fields (0- means field 0 and all 
 the subsequent fields). 
 </p><p>
-The option "-jobconf reduce.output.key.value.fields.spec=0-2:0-" specifies key/value selection for the reduce outputs. In this case, the reduce output key will consist of fields 0, 1, 2 (corresponding to the original fields 6, 5, 1). The reduce output value will consist of all fields starting from field 5 (corresponding to all the original fields).  
+The option "-D reduce.output.key.value.fields.spec=0-2:0-" specifies key/value selection for the reduce outputs. In this case, the reduce output key will consist of fields 0, 1, 2 (corresponding to the original fields 6, 5, 1). The reduce output value will consist of all fields starting from field 5 (corresponding to all the original fields).  
 </p>
 </section>
 </section>
@@ -504,7 +514,7 @@
     -input /user/me/samples/student_marks 
     -mapper \"$c2\" -reducer 'cat'  
     -output /user/me/samples/student_out 
-    -jobconf mapred.job.name='Experiment'
+    -D mapred.job.name='Experiment'
 
 $ hadoop dfs -ls samples/student_out
 Found 1 items/user/me/samples/student_out/part-00000    &lt;r 3&gt;   16
@@ -530,7 +540,7 @@
 The jar packaging happens in a directory pointed to by the configuration variable stream.tmpdir. The default value of stream.tmpdir is /tmp. Set the value to a directory with more space:
 </p>
 <source>
--jobconf stream.tmpdir=/export/bigspace/...
+-D stream.tmpdir=/export/bigspace/...
 </source>
 </section>
 
@@ -546,7 +556,7 @@
 <section>
 <title>How do I generate output files with gzip format? </title>
 <p>
-Instead of plain text files, you can generate gzip files as your generated output. Pass '-jobconf mapred.output.compress=true -jobconf  mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCode' as option to your streaming job.
+Instead of plain text files, you can generate gzip files as your generated output. Pass '-D mapred.output.compress=true -D  mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCode' as option to your streaming job.
 </p>
 </section>