Site index · List index
Message view
Top
From d...@apache.org
Subject svn commit: r674834 [3/3] - in /hadoop/core/trunk: ./ docs/ src/docs/src/documentation/content/xdocs/
Date Tue, 08 Jul 2008 14:11:58 GMT
Modified: hadoop/core/trunk/docs/streaming.html
==============================================================================
+++ hadoop/core/trunk/docs/streaming.html Tue Jul  8 07:11:58 2008
@@ -287,7 +287,7 @@
<div class="section">
<p>
-Hadoop streaming is a utility that comes with the Hadoop distribution. The utility allows you to create and run map/reduce jobs with any executable or script as the mapper and/or the reducer. For example:
+Hadoop streaming is a utility that comes with the Hadoop distribution. The utility allows you to create and run Map/Reduce jobs with any executable or script as the mapper and/or the reducer. For example:
</p>
<pre class="code">
$HADOOP_HOME/bin/hadoop jar$HADOOP_HOME/hadoop-streaming.jar \
@@ -303,7 +303,7 @@
<h2 class="h3">How Does Streaming Work </h2>
<div class="section">
<p>
-In the above example, both the mapper and the reducer are executables that read the input from stdin (line by line) and emit the output to stdout. The utility will create a map/reduce job, submit the job to an appropriate cluster, and monitor the progress of the job until it completes.
+In the above example, both the mapper and the reducer are executables that read the input from stdin (line by line) and emit the output to stdout. The utility will create a Map/Reduce job, submit the job to an appropriate cluster, and monitor the progress of the job until it completes.
</p>
<p>
When an executable is specified for mappers, each mapper task will launch the executable as a separate process when the mapper is initialized. As the mapper task runs, it converts its inputs into lines and feed the lines to the stdin of the process. In the meantime, the mapper collects the line oriented outputs from the stdout of the process and converts each line into a key/value pair, which is collected as the output of the mapper. By default, the
@@ -314,7 +314,7 @@
When an executable is specified for reducers, each reducer task will launch the executable as a separate process then the reducer is initialized. As the reducer task runs, it converts its input key/values pairs into lines and feeds the lines to the stdin of the process. In the meantime, the reducer collects the line oriented outputs from the stdout of the process, converts each line into a key/value pair, which is collected as the output of the reducer. By default, the prefix of a line up to the first tab character is the key and the the rest of the line (excluding the tab character) is the value. However, this can be customized, as discussed later.
</p>
<p>
-This is the basis for the communication protocol between the map/reduce framework and the streaming mapper/reducer.
+This is the basis for the communication protocol between the Map/Reduce framework and the streaming mapper/reducer.
</p>
<p>
You can supply a Java class as the mapper and/or the reducer. The above example is equivalent to:
@@ -372,7 +372,7 @@
<a name="N10077"></a><a name="Mapper-Only+Jobs"></a>
<h3 class="h4">Mapper-Only Jobs </h3>
<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.
+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".
@@ -380,7 +380,7 @@
<a name="N10083"></a><a name="Specifying+Other+Plugins+for+Jobs"></a>
<h3 class="h4">Specifying Other Plugins for Jobs </h3>
<p>
-Just as with a normal map/reduce job, you can specify other plugins for a streaming job:
+Just as with a normal Map/Reduce job, you can specify other plugins for a streaming job:
</p>
<pre class="code">
-inputformat JavaClassName
@@ -500,7 +500,7 @@

<tr>
-<td colspan="1" rowspan="1"> -dfs  host:port or local </td><td colspan="1" rowspan="1"> Optional </td><td colspan="1" rowspan="1"> Override the DFS configuration for the job </td>
+<td colspan="1" rowspan="1"> -dfs  host:port or local </td><td colspan="1" rowspan="1"> Optional </td><td colspan="1" rowspan="1"> Override the HDFS configuration for the job </td>
</tr>

<tr>
@@ -571,7 +571,7 @@
<a name="N10194"></a><a name="Customizing+the+Way+to+Split+Lines+into+Key%2FValue+Pairs"></a>
<h3 class="h4">Customizing the Way to Split Lines into Key/Value Pairs </h3>
<p>
-As noted earlier, when the map/reduce framework reads a line from the stdout of the mapper, it splits the line into a key/value pair. By default, the prefix of the line up to the first tab character is the key and the the rest of the line (excluding the tab character) is the value.
+As noted earlier, when the Map/Reduce framework reads a line from the stdout of the mapper, it splits the line into a key/value pair. By default, the prefix of the line up to the first tab character is the key and the the rest of the line (excluding the tab character) is the value.
</p>
<p>
However, you can customize this default. You can specify a field separator other than the tab character (the default), and you can specify the nth (n &gt;= 1) character rather than the first character in a line (the default) as the separator between the key and value. For example:
@@ -594,7 +594,7 @@
<h3 class="h4">A Useful Partitioner Class (secondary sort, the -partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner option) </h3>
<p>
-Hadoop has a library class, org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner, that is useful for many applications. This class allows the map/reduce framework to partition the map outputs based on prefixes of keys, not the whole keys. For example:
+Hadoop has a library class, org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner, that is useful for many applications. This class allows the Map/Reduce framework to partition the map outputs based on prefixes of keys, not the whole keys. For example:
</p>
<pre class="code">
$HADOOP_HOME/bin/hadoop jar$HADOOP_HOME/hadoop-streaming.jar \
@@ -613,7 +613,7 @@
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.
</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>-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.
</p>
<p>

@@ -746,7 +746,7 @@

<li> Hadoop Streaming and custom mapper script:<ul>

-<li> Generate a file containing the full DFS path of the input files. Each map task would get one file name as input.</li>
+<li> Generate a file containing the full HDFS path of the input files. Each map task would get one file name as input.</li>

<li> Create a mapper script which, given a filename, will get the file to local disk, gzip the file and put it back in the desired output directory</li>

==============================================================================
+++ hadoop/core/trunk/docs/streaming.pdf Tue Jul  8 07:11:58 2008
@@ -364,10 +364,10 @@
>>
endobj
67 0 obj
-<< /Length 2066 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 2070 /Filter [ /ASCII85Decode /FlateDecode ]
>>
stream
-Gb!#]9on$e&A@sBkg2Zum*[*NAbD?GfmEe=VN$/"kS==Rdq^k)kYT\ggL"=1P0BUfHCZBW(HH"TPJeI1QP>koAse;Q$>8V^:2nAI.)654^\0*?L"S(E>Tf<87fhIXcss;t#l;mIM^/kurn6*l"m)UBN;hT6c!3bI=gEbLn7SW\sNcesQk3["r3F4=n"\IZ0HBPK[7UI[N?;rJ3R03^6:[#Y&7N\M2mKdb>7mGbtG;qTl&$3NqoEK6g1+4j$1/^qr7<[r<g<8&"-.$,0=270rrt_DRP%BqC5Gf^E-'4G#srW83GoND65<Rn1:Wp-eaJRI>K'qcaXd]aCr_'>_U!aQuaZd&4WTbl;MhM;tB9M]LpV21VS(P9C%scFL(9EFiC@U8r'($2#RM'VJem!O>3p;',:l&$F7arSrXL(,c(B';,9;MhKnT3IspF$"WK$+7!-77.Df]1VB5F_obo,?_RT'&+'q0YEIIfRce$c5^RVKP3St>.K8JJsK=54,h8#E79t[?3&7Afgl*AnLG"Tr+-EMZrK<MZVUfO?q!np(L0uO)cC)Ll!R%=ouPSSiJB>_Ybf]:d6JnBa'.[C*DjjkrNM\TjX_:no^soDZd8KEOO_SAp^n\nl)YH;BO\.M0*Gg<pJ[CR+QQ$?eV.^r;H6YDjTKRR!cee$Ko5q"6\oYQ7lSh\\7:N^X,bW_T?,M:3=_0!"W#)Z0=L_7aFFo<LC=5pLQAPGh%s*(]2Z;*_-gF+D?VPFRuTj9kBWqod5_8!'h1[DT+VOUjY@sdn?f](QH%(@Km0%:B,>&Lgn5-b,P$BjpG9gq'4U_Z?<2C_V:3+7[/8qPWaU8?"Kd_40U$c?^m+k97JW^S6F$+82Kc_]RHYk/_Oq(Tmo30[lbpm7p8k;V<h:)s><n[SYSSq=g<'-E9%;-g_%?.u9V@$_MBXSr]%KN0P7otQ.Zmde4f@h3]%pM]fI]=7gPZbtK<#UTo\]Tk 1m1#R\Z3CGgX+K7dkC9fqk0<=8c]S=V-P46ge_\G*KrA9$Fht%P>pK#Gs5gL#()g"dFqLdPm,qk\IO6=u>B.*L9OI4>5E:@9bP<P;9q[^X+hJOQ+]=LV(tZJ<raeVr\3@em7Rr\N[7SnY&-O9/LJVrcA"%kQf1_OU1fGnGEN89a,J0T*dCb%u:_WI^ZBDrfE".&&0Rk*Zm+31qH),P'@I3QSmOE-EkHYcmt5+tg_l6tp=h]T[0L5MJ>p@pCVT7BrB#.tI,]4%I6-TnR\2up7d@OD>Q49dN?8;'AZ:bpJOR?)pMl>O<t;KC+pc/gGDVfkb.kn:I7)TeoBS2?^HH_Zs7*PcGXC79LVW*-D<!o\A,'5AZ]ZrrCEG/B!_&B/0gma/GcM,[oJhBpKd[LPuFI^+BGdq"#a.GWLC_WfJ'U_R+3k5-9%PKFZrHS'MSRX;LB=dpRc3=HOLIS4?VGfU\_^lE*?A:uK,GB1gd4U-5A,m&mL:V<12PBF?BiS8ddM_hp='5DoLg+=_hGV(?Zf,mC%TS*<peI?P=WDSA3GIcQD\)LZ?@5/;V-Bh.[3s[@XIemYIuas.R/(2./"aX<L%(KCU<*@l'QR2@Hd,H9I#"\<IWNYR<\Z\BL2X)n/C9&8O&#o10%*Xb(cKrkKLj/J(-K3!!R/g3R6Om"nq^;W9>dE@q\2S>!#t"b58d^W0lZ.%6<3[(VtqR[NCDd[tcSt13+T3NRV,V@[Jn.jGY1"1*H3]iC5BXth@?@1hGs"#L[:ijctmDXo>AQ?(kjfk?LT5Ws7(hG]bhE&F:'#REdqMgs-X8J#QH3R;.>*%\>j7c*^GJTQ5:Z';dB[A)e7LjI?Sh*5mXEo%bok#]K*TQ&nGM@3jUNc,DkUnnX^\?g"T5eAHB"=6neI!_d>L;"Nla4;9]]@%nf2ge,6RB^#tg:A*d=NWP"KlMUr6gaH&GMpN]U0(M;> l+$$a9IPJn\i&n*q81sP5YI&3:Co7bX0RbZ5otLHjh\L_9t@.AlcX[Vjk<7@IFP^=iKIX6&H/fr<)#i6#Q~> +Gb!#]gN)%,&:N/3n=^B7N"BW:c*44=*&S0j]HFQuU+U*'gQ8MIeZG/(cL9j!L-XYabWa[6ID=R;X84ZF^YY8>B?aMC&\Sb6mZ3nFc+\FL_b@TPI1Ka>FOllOq\+p[3p.c%T0ITq[mCdDr37jlc4^9eG7!b^KnKW0>9tUXgqMkhN[2u<>[cG$$87<+c8UaABnfWlf*3U8)Re'qk<mP0_2!qL?%2g3.k^/+kiIl9/[HuS3e9bB";'Ib"(*7_6LJsU(nh2'n;Xe.EWFH)Y*j-%do7=&IWqM(JC?l0=,79Yf)g1IUTT/rRWLCiVCX7uQI6[VZX2q_,4ZL.ZOF-+d_[;q"GJ(5ifuT9Qtg+O\Da=[n=Q(#H\BW.C_%mPjPj::.8>nA;Ip]=W,[koU5p+n6a(PR>!#*+Tclp[K5E\e^Vn@3>5CRk=oE?28,",DH"u3u@]uCP*%J:W-0#DksR@deMHZ=?,rm02_mp7V*4C@Nso"i93ZU*>"_LA.Pn#)a!CE.%eYHB46iNA)kcp]2sG!G/8dF;o*G5%k^n:I"W_hM^S?9B,=9g,b'ffbIp*k(.A-l>P:r)a?EU(3HAedn8?ABppsbYSf4,7?K<^*LNZ0,#PMQXtN]Ln3TAupc)oS:SRc'V)ggN;(QKtW#RJ_O@N'>3e-7b?juR"DWrLZ&N=N,qIf*87Te?ed#"'VK,o=WGO[oK@]XU;C,p5gI#,h4'o?@njWV&V8se0DL)Dl:K->?uc?oX8V/FW?k*n_3!RZ,js-Ksn\mq.,(An2.h6YK[2e^a"XH*q>?)%?asR)giNW]:Ip+I&^!MPB1#CJ!5Z2(R!(k[btoo-K&J[BW,Z3lhLfU_#1P=tg=H'iA7C6<bZ6Cuf7k%e!@j&A?K3q&tqg9]QCJE_H6nt@O8_KVNpieFc^6pI'r/m"qE"\-<hF4TP0t[QCgCgsZor47Oh7l-&5ZsR.qkn.>37< ^;K^?*\sG8s86co5V^_Y8D*A.4&lXOQq6TGiT-FobAUKc_jtQf"S0o;*7?Rjt5qSQ7/D2KU'8]bXPs'A^I/0DaIUX?5QQ@i3RHRi/6h%'mPY?3;bLCr*-"dZc&c/P/"2MNY<YL1p3I!-@k4U",:;LJfS9025"f6^59=\gh2iXs1f:-Q"rjUFp'kRQ^9"V5qi[t>\TJ-c7^.cKV(@n!.g,UeN4i,mYX*Gs5N=p0KK"r87%t,/hHH8OsG5TqX(^'jJ1h0CAZY&aP%(bWB0!7DT"dlm4_b#g6]hF+m"QJ358*[@R+-BVk^*b6'0u?!gqko7#SW;(u?d=%j;'<1T1a]kjkte&qi<X%?6NtsT?2LHVeO'k9Un9Q7WS:J+E9s?]XRmNf<k0SX(r2P07rhn_bjU_hcr9K/umt#6!/%>VuS*2QI^.soD.AHN@JYAid:OV>7_)1D6/=jFhk:&=PH+?W5U:VU+P@7Rg54^bdE:f86RlVU*JhDL!Pk<%sJ7.YcBMYWSm@n:.XGL6iI1"B9quD^Fi]toTf4h>?Y-DTI"TLd!0sh=iq8uM]5e2NE,l)'Wc,3dsnL;maEVG9SaRZ%X@oAaRTZ*X>M_PFmSYm6^5T856fP)i:bc+c0.+MSV<F(Jp5Wpg;-Fh(CpJb0?oJAWW*i<9c63<==JO0H#1jUBj#]eg]2HSXei^0kZCr2D.iegPDCc*Eh:YOE^K*\>0+F/n^RkV4do'2#eQ73m*L.aeLG/P+dU11OoHb]2#FH0^\03Yru(/l^>bC7g5?VSb,V<e;HV91caWNNN09E?Dk5d-M.%bCm<bQ&'<[pQ6f]CkPek'j>h68E%j45ecO1:(GfWgUZ#P^HElnOkp-M.Qq-b'^b7!=2O?>(e?+'V0B.e5?RWgf_'eTR@MlKVDi[^:dHZ6f3lsA)iU??"k#_)nr6%9\[hpmZ+ffBLO+0!8"A5OQ&#(S<YaUa1\ HZ6uc<!l[>,aB[m8^!j"j(ad!bRQ.?J;(%S"%j,[YN+,3SerK@W:jBHrC^)WI3]"&o)HWOV!.TYDJ;KN'0*shR*Y5~> endstream endobj 68 0 obj @@ -379,10 +379,10 @@ >> endobj 69 0 obj -<< /Length 2023 /Filter [ /ASCII85Decode /FlateDecode ] +<< /Length 2025 /Filter [ /ASCII85Decode /FlateDecode ] >> stream -GauTD/\/e&H;*)+VY%0!];3"eD'\r?(3_U>3(j@9A88Q>)hJ/UAE=8VYP]cUh/%Zh)dd3PO/Hb\b3q"An%rc[l,3EA4s2-+fM/E(&%mQIr]L\m@P]MLepR&SjDAtn-9_fRca.#\,e12#I%]@l,jqEpuR-NKRk'SL)F67[?u%\Qqts8h:q\3L8^0nu<K-=mL6HrUFnXP?k=u=]=31cbJ6N=67FR:cE[h;'UI:[@'O:DXikV[H]Xp9VleIGD::WNu:'K(QPI('dQN_3B+ms)J\ABbo_m0K4QI_peS6RX6U89J+%khrU(MD#L(VeR@smNM/sD3Agt]QPoIPdK2JfABQ?QTnpoL@26/.Paq.8T(IqW-XsV;3cUK3@CIFnjAUMVGk=?,Z+mD8#2#umnsgeOX6?4;B6>F!K%L8<.=1"CSH2Sht?K1dAs50c,Kagem;b/tNS4bR7(Xa\Hl5]Rr:Lou>hYHSKJZjW"eI&9YQ/B2hosaf=7H4M++a2:qf,1j[_+pJS3l'd=#lR[.9sN4@0\<@mcIS?S1Be\PX,E-^%!bk?lT]QW!L:'<MCH/g64A!(?#(dYA1_eZ5"UKktIYpmakItW8nX#g3fk\[R99:g(ola&4d9Wo;j9u!3B"tr^(-*'Wn\I\Cj5+PN/sFU@<shDXCB[B012Q)+Rj6(i_"K_o[g9lI*YlMr[!XrErK\7oh!F*D&PRat/!I)Grfpin>4+nJ4?phpPeR8U64I6Z2^uOl55DOF<KdL]8Ar(o*s-.j*Xt(%is5FPSP&b*BDp52)=2DrnK;!g_L6PLHZWMe021r3Y>l<!#9,RiKk^H:s#Y:nQI8AorJfhW1(?l-K=R>4':]85W^7V/[C9O@ju?),t"9mH%r4PTSF,c]/+,*>5t=bDYTtiq!=OIAp85,+qYk%eYB9_hU<I-l=A&o!ERIlkj&NMX]E0P?928r<Xr(S_.dQZj.#tQ gOgR\V(r26gYG?sKTkq_XW8qhBJ_K#Z1pSLGeR%"eb%Ie^#h/%95f>lS-pJk^%2btR+6gJpY)b7T&EP+Irm/WOk7n7kUk/19@IsP=%WpP'11\?rkfn?g/HdGl4MsE^5<H8bNEi7^3)@l.!?_9HrSomne0\MfV^f)L?p!AMtc^e'&bUaQMhS*5q(QhbYd27_,d6Ep_[6NC!lq'=H3_snLH%Wg!V*5W[(8VlNUD@!@R%bcjJZ[7?Pfij!G,PZNmcVN)C!DFM21C+;(e9i>,E]jDeL>irrPqNnn*6:VnGHBd@>lsZm")'V3*X-/nKg5Si2j1)XJ5s@s""!!8BuVBd_Jg,GRP&,U.YJ%L^\.X;QfSTS!jjF'0<jSKtWGcK.TTFi][qU%>Dp:(^ZBRp-"aJIr?eInC0e@Io)G98kE]?AI5(fm/E6>h^L;pOAGSA2k#4[WAH+\\^"F-Ish^fV.1?Wj,;%tO32Z:&,)EP4l/V/t.R:KTGCm9Q3N"ju6#\N,O6Mf/F!VSu@Ug2?5Z8C7W.mWY??QG,BFNP6)C?Ha[u<DI"L*5sY1#J.DJcCt8sW+;*q+WTbte+>A>&DL?bO6BK'D=t)Rqi\A??"5TU(:2dJ8(<ICg)sF]m#m*#+jAGT65X36;+l>0]>T4-)i<G=qm1@M(8SeI38ueeAXqs>9/;u>70g'(]i!lZJM5.s/oT@(+NRGHYed4YID[T\=lJ6<Q4TQC22.68c!^BGaDNNXN#Z*hW>rD<8Vf%An%P,QpuSMnQCMYY/D(BEhg8a8Ua^Ja!=NOMM=C]PP6p+Tfft'M1c>6,FN4;N#*mun-Eth-m&V,o3V@"XWKA*b-0;["]YCBG2a4!=?Cc]3mhlb2ca7alNr!HGIaYafh67JqiH2e&lbP)%sN-G:+OCR"o&+^%+nHZU-p5[__i0m>=lGes1BNUm?O'4f;XQ<=Jb)'8lJB:%^!mYA_ogn!b ]-HKS2faeENl#eF'KY[1;A1UIqEpch0oX=W5+6W1J~> +GauTD/\/e&H;*)+VY%0!];3"eD'\r?(3_U>3(j@9A88Q>)hJ/UAE=8VYP]cUh/%Zh)dd3PO/Hb\b3q"An%rc[l,3EA4s2-+fM/E(&%mQIr]L\m@P]MLepR&SjDAtn-9_fRca.#\,e12#I%]@l,jqEpuR-NKRk'SL)F67[?u%\Qqts8h:q\3L8^0nu<K-=mL6HrUFnXP?k=u=]=31cbJ6N=67FR:cE[h;'UI:[@'O:DXikV[H]Xp9VleIGD::WNu:'K(QPI('dQN_3B+ms)J\ABbo_m0K4QI_peS6RX6U89J+%khrU(MD#L(VeR@smNM/sD3Agt]QPoIPdK2JfABQ?QTnpoL@26/.Paq.8T(IqW-XsV;3cUK3@CIFnjAUMVGk=?,Z+mD8#2#umnsgeOX6?4;B6>F!K%L8<.=1"CSH2Sht?K1dAs50c,Kagem;b/tNS4bR7(Xa\Hl5]Rr:Lou>hYHSKJZjW"eI&9YQ/B2hosaf=7H4M++a2:qf,1j[_+pJS3l'd=#lR[.9sN4@0\<@mcIS?S1Be\PX,E-^%!bk?lT]QW!L:'<MCH/g64A!(?#(dYA1_eZ5"UKktIYpmakItW8nX#g3fk\[R99:g(ola&4d9Wo;j9u!3B"tr^(-*'Wn\I\Cj5+PN/sFU@<shDXCB[B012Q)+Rj6(i_"K_o[g9lI*YlMr[!XrErK\7oh!F*D&PRat/!I)Grfpin>4+nJ4?phpPeR8U64I6Z2^uOl55DOF<KdL]8Ar(o*s-.j*Xt(%is5FPSP&b*BDp52)=2DrnK;!g_L6PLHZWMe021r3Y>l<!#9,RiKk^H:s#Y:nQI8AorJfhW1(?l-K=R>4':]85W^7V/[C9O@ju?),t"9mH%r4PTSF,c]/+,*>5t=bDYTtiq!=OIAp85,+qYk%eYB9_hU<I-l=A&o!ERIlkj&NMX]E0P?928r<Xr(S_.dQZj.#tQ gOgR\V(r26gYG?sKTkq_XW8qhBJ_K#Z1pSLGeR%"eb%Ie^#h/%95f>lS-pJk^%2btR+6gJpY)b7T&EP+Irm/WOk7n7kUk/19@IsP=%WpP'11\?rkfn?g/HdGl4MsE^5<H8bNEi7^3)@l.!?_9HrSomne0\MfV^f)L?p!AMtc^e'&bUaQMhS*5q(QhbYd27_,d6Ep_[6NC!lq'=H3_snLH%Wg!V*5W[(8VlNUD@!@R%bcjJZ[7?Pfij!G,PZNmcVN)C!DFM21C+;(e9i>,E]jDeL>irrPqNnn*6:VnGHBd@>lsZm")'V3*X-/nKg5Si2j1)XJ5s@s""!!8BuVBd_Jg,GRP&,U.YJ%L^\.X;QfSTS!jjF'0<jSKtWGcK.TTFi][qU%>Dp:(^ZBRp-"aJIr?eInC0e@Io)G98kE]?AI5(fm/E6>h^L;pOAGSA2k#4[WAH+\\^"F-Ish^fV.1?Wj,;%tO32Z:&,)EP4l/V/t.R:KTGCm9Q3N"ju6#\N,O6Mf/F!VSu@Ug2?5Z8C7W.mWY??QG,BFNP6)C?Ha[u<DI"L*5sY1#J.DJcCt8sW+;*q+WTbte+>A>&DL?bO6BK'D=t)Rqi\A??"5TU(:2dJ8(<ICg)sF]m#m*#+jAGT65X36;+l>0]>T4-)i<G=qm1@M(8SeI38ueeAXqs>9/;u>70g'(]i!lZJM5.s/oT@(+NRGHYed4YID[T\=lJ6<Q4TU%=I&SNaS8/>XQU5kR+_EV"POSA&B5]::IVCKYA!BBDI7Wk:g[^ZiG)S*'@Ko57nsOEe%eSQ>.F-kK:Yd3B#srgnC_3+'#6S&n\dA6%haYRmHiu8=TA5O)=ig5u<,"tH;*#:W]Cbmm;&2;&0)JQF2MZ:uraaOC<(/kgUr"h1PYFARij2d>/h7GTBtuk/qX0VeR[t5q6F73Y05=RaEj'O"!t>X<9cLBE@RfYF8:h(N6<TnU>n]Q?q FNERd.;.Sgg[UI3D9g4f3oigldNJB%TiZD=tc^LPpdRK~> endstream endobj 70 0 obj @@ -394,10 +394,10 @@ >> endobj 71 0 obj -<< /Length 2097 /Filter [ /ASCII85Decode /FlateDecode ] +<< /Length 2101 /Filter [ /ASCII85Decode /FlateDecode ] >> stream -Gau0E?#SIU'Rf_Z&DEH\BP<8!Z9%?GmHQSuf63./@G<cQ6i#[/?4qF-i\Ws?e2&)g0U3k87K^SHShgk8r?$$6^\8ag[+<XPrp@,VY'hGb,.i*Og?Cj\h^qe2(WG/182-?CcM[G)1e=TCWZU@?/HSs]1<-Nt8o:Sa5B0+%AC]+!E+au,JBKaJDAV=Brn93.=WkT1(D8lps9VU_KHQ,E7+RE;5p*#:Y5OkQK2_=]Z,SMnHf&Cs]IY%4mh6ZhGMViPbfoL"U>bhqIho=[S?se(BS8M^2%1bDr@iR';I4P,R,uIj=+9[_X&t*#NVc@QQ9ecOM23#^Wh6T9(sgl.e3K]0TY\a:*l?d3^&m:kF5?U6*Fi<!JrJ>qS-fpep..C?3GMe<ihQB)[%FZN(j*0jo4I>g]H7/g+ZPg#QWsSQLR3RA%=qHjKIuLsVF#0'U>RpM-5=6a"M,BqU)6N8;]:<cl;)7POP6<nmbE]nj;Z-Li)5F:FH/QL3/d^COBS6pmsRpY"jP86'?fKJ"b5\pVk^pKID9JGLcZqFR!l'<MPjT["dk=m%2n+RI/YmK]W#"[Z(KmD^TOA@b]]aU+@?DMdmF@mq0\//9k0.2;jfs@b\i-\k,.@QMg(XH7iBoJK5OC=<tau4V\=I7iaUemkaL0M3nJZP>S,K^/2T8\Y*,'r*8pJXnN'Zdu/l>jT-4=%.g?qX@W3=uG&o3PXpGHmTs56?jGFU.K+tgL?kM(CVZt0^TO0#&"^YT>36CuN9N0J'ud7J7poo<oK"I11Z?=G._TaRg@;m%B<PEZS%?2lO&_4[^jE>Wd1-IKLX/4u49^+&<Fb%Q1e0d_qIfS?If,b5ZDQQC:1H_)>ha+#3o+7@:[/(AgQ/_S(Bkr0)1i^MkS9sdPo3*!(j\Rc8M[l,f-@X%;%Z@e<bjJ)Xa9,LK1nXdY:=eqObn5b\d@GU+/^'L,,-c671 .*'Vmd4K:H4p/VZ.p"c;4<]6,)%ns.RN%n*^M-5_ROPtr_nCnqVEl-XIN0e%+dgDVj#uJqq%_]f+f<CB0H6_^<QNO2!7u9PW^i^]PMbC;Hc.n]^[6ZHOXaEQa[<gru6:2i-D'^Bf5Q<R;G.gldP9'+[GFt;)T.C+LC01EUK3'aRoH)jn]=MA9)*s#>\<fO//=i,'=FOX38U'rnSq9*AH.Q"'q0E9TXnah+2.2_#+/_io[V<_X?WHRK&;R".XrBI[g*#bs?d;IUG&"j3ioRJ0Fo7*bri\eK2YB-?L@@S@]N.4:-.?)CN"J():!4AFdjD8]]/+Q_V-mfRgp<lPYR8Ed2gtR8d;Z9IB7aab'_D8LeV_;4'"UoHKG@Y4D/so\'l4<'Pcsd2leof0qD@eI*ng.:6AC7?eT'V>>>4KSeo:N+Q^H4#-b^W#q.eNh-?@Wr6hY5)>dYtBkC]>C?P'm+3%4f3N2L@Z1?%mg/DW(=Xcj@Zf<3>>NPgkI0if>O"=A#Q+iEjT0ETIS"OeRU]t0]eDBD2ZGpQU\MWUr1-)"KGLBIi.3gsh,eY+TUnMaLI\j]l(H<):R07o+Y6h#k98XTu_=+iYbNIK@^P)(ohu#m_bN1mUl&RN"o><LQ(J/l47KNo/TRJ@MpYFFi-HZ0D#HJu&a*eN\n')bDZ8k]lL3B,@8a,4qu7J7WgtGV"i.)E9/YljSjA^OS6Xaa&)jiF:!3ec?ZFZX9>,?P*[+d2N\hK&(W@3#k!@+_WihqrhriYa!@\h(>*mt'=3(QfP2)c1O3s^!uqeEZHk8IEhP\B2R4*n6"QEm(PF=>"J4j",MX/of)hbOLDM*sr@qGI3u@Ei^;^O/#R+4bks@>rSnm/L0A(MmS;)V=c1oaJg]?;=ij6%;O+CF2SJ02mI%C/FCcEd),tCUREE<obC1'W9M3n[]KP.?FSpDh!s8?>qp<>b\n<qbaO1Q@6#-XgD, c@B%20oX0eB_TB]:NL9mR[i[<:"ppK@]r?Rd5)1nbrC("m++_)KqGAc@c/</6'k'>@&TP'o*HZ@608:T.Wm'Z,Td#K6lo)NSsj_GL;<?_#4WXk+1H~> +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&%\!MVIM0ch1QmiWnMerr4#7d)];Dtcr.qCA8lAusq6,l4d\pm/%8aSPF+X=GWl+4XJOrUTdQWYYGOnVq7%9iJIQ&JaTLou.'o^VU<IOMLRM\IB1gK;*-m)olpe*UqciSgYN2QOD^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/Mek7V,h%jbV-2C"N'2(HBF+b)lJa@Z5Y\!dV<6-XaqXFfV9tq)LK**0h2;nCN2;=Z%72K9.QlBUGYh640de-!k86=FGH^RL.Qd9p1a3WLF\*&f7s:L05le@_'S*c<>J[Xr[1=JgtaA^7==4I]H(hnXZZe#Y+[Gd'mcYV%RG3i5Go)'e7K_5NPINNUm;<P6((ZnRZ&.LbZXcF]IL9,nB32aD;n^S,TmpsIWboY(G4"LNf+8r&n*YOL-h0>,ki3T-rO!]Xk_PoekNLAV/u=7R\a<4@+m.B#doB;*Y-n^&RA.dW4K+/qX\;gg+3>OR*"GQ<k=:&5QJL&""a+FpF\k;;^oHD/Y+D6rT#/?Jjq.ZRkqmi(N2?/;?:+;o]/%"T'oKH:DmM0GXs?W'PkQA-s"8T5TVqo(jB;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-_VJscQXbWrCoBJ:sUL!]u53L!@;nC)km+.aMLY.k?+LD4Z#+1BQeu*>!<.nK$n%;RYa[gJK%)g]lhH(sS<2>&\lD*Jde*^9\5jb^O2AIngZfP5-m[.J)o_nLFq>r[7'iYqJ3/"Wj?t(YED&C!L,s[V.Wj=HR"Bu>#@g!Eks5QrgL')%.L>jfPCd">9br,'-j>o7Yf7OY5ICD0)Qi)JDV2E/TEsZOJ0UEJ#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@b4RV2FD5fT+!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#*GaE1f5Zr\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~> endstream endobj 72 0 obj @@ -424,10 +424,10 @@ >> endobj 75 0 obj -<< /Length 2661 /Filter [ /ASCII85Decode /FlateDecode ] +<< /Length 2655 /Filter [ /ASCII85Decode /FlateDecode ] >> stream -Gatm>gQL;L&q-CU@-,M5>%%[<i5J]AYiD:mXsD;=-E4-$aTFsu,MJB\OH_*pC#iI,"M]Gm'80?NFqoNT7[OAmc!<c%l]!o@-^D^qsc#;O_qY3.m>D_^2FkYOirQGF)--oT::&I#2#e$\2LgY90JbI2Y&QlSEbT"gp*sYadW8"o8f3u!Am%qSD1Zk_UT/-],SABaqfK3Ke]]511,:6*Y-d$?>Ykcl!1s22Qg?=^H0#TW,B7Dnm]-)q"WS>dsCe6m>(PZB<@fm>[BGe<8S:Ze;a['6-qYRKVoIgD6j'GKr6WYF0lJ</3>"On0EdaVK;\q6<W9QXB#IF7,S!@FD_'/^G%$J%JF8\'L0t8/rbmCV>,;[S_5'JTRBK)XjU5Mm(+o:@%*:Nk"KHDC)bFJ2D?Z"7i@F'WhVs[@UJG.:4"1k+gj7'a8T#,>f!LNQn8M"9NT.mOA=)ce[*OKqk5s;%cet-*8C27@j]BOR=YfN(].?IWM'S4jKe)G^CN3F$m8:rFcp$T'R%tjVC^u.*S>S%O&%in$?Z?"A%At@_*Dt'@iaCjB^51!#Squ@;(Q1P[(he3MYbQ'SuqmEK5Kq3b[#7A(Q!&e=2io_K/nTI<eB\](%=FVCZU=+p#!Se+fSlTcoIm,'AFhrV:QXnrh&/i%8XZ%0rV/>4dCnWbX\qiE?7e/<5cjY7f(gC^b$7"l.g"gnpcEOrgY&!UiWj;JY#)6^7_aAHl)YGp@*EPlGjiJ:t+9K4@Eoc!7O2.Le<[5I4Ada;-LgZpQ(SL:?rKA[)G?M)5V)&eD:^h4VaT4i74,nTs/fhLDVqJ"7#8"!SuVkI0$@1RsXY!iF'@CK7OhC2(OE7?\FL!f_fGS0bN7"LPoK'?!:C'!nA%3G_L$@u;rms0PX86%TNI4+4akA;_ArHdIZGd*Gi*O:YAgR]s$[(@lL/]f?Q=L<]q0JQf=.5P.D*ueRXTFrYI(^^HiN0B.jR
)V#%GRp08<iDAEk]kFucLf(1CT3so<:^lh^%$8$DNY>(W+"&)^FogGShZoT,Jn<'!9$6OD9Y>(?$"0*oNIO6hPVYfPPN:oUjD0bs$q/Np,Al47gGPP0#Dn2=N[=2C.#*%2PG7DIfo^mp:q>E#Y.;^N+Y1+Y2ku1P0t.:QS&eiEYp%X\Kg%&\-e/I,3:P\j+V%DnK=61A:1q;fR11d%%beIMGK#*p4tFc7eJ(giIG:s3WaPt&R\;5t+f:o2>ngMbJ1t_/L']hSHEKr-R=_DD@UrYPT.W7PP8LO4?#__<n*f\"Me_XE4Iu'TN943E*G:J.*A#O!f6VU)a7W:N>$PFU>fLpGP?s,h\?9aWLXV_C\SaK]^2CZLrts9\&6(H$,ppPEF/fUW96H&b#1ZG;)<!!ZHO"Vm0Y)e&lVX*A%$g,_rrVchYq4oOT:"GHR@@Mf3,'31Z%%eViuE"Jh:&I_XZ?&_:6%^MWc<qciaFOVLN/h@'jDhbD3tn<EHdX?!%E#!N.9q=sSnYel3HtL?g)Re6FrM8'S0DkqZa6[;1[oMsDF%#ra.FK'M?7E7pWfnq71a+Fa^h,i#9d.1&h(&:FNH00]Q<85^Q@C%>9<:*A%."K^Eh/Wu9l^CTSDi$62B,)jP[akRJH&@$<(DE5.@QZH=W-Q!TNl^Zs6^78e%G2/c)^4WThL=Q7sQS:Son)bp9eE&TTVWip.AGk7L^!X=+FX,JSDIMMLGjch+buF,0/BUE<6tau[Gn:3SsZ6FFl@']&E9N0JL9<Rj^r)0bS3b<=sDF)qCO5uF[p!h6jjPd"0+>nM3'FG&YHR7G6W2*om&jMfIB1**u6:b$i<dO[P,Fg@e6#S[jWqNX%I2Gs.1pMM8FQ.Z*dW;QPU&+_nA_FmUmPm@q"KW-S7%?F#HWHi:_Ng_jVP@^V!C=a,e(=<P)K@Nj):'KLPIKKLq35K"bi>t)N8Q<+L@3IcjemDLA<,oL&< Q2W@]iQ!=C:)D;7Ka2-&5<[XAfaB<Gc+Fl6q=1&Yr1m?<G_fhESfF)*'-"Za^Mcrbs#b)%O9u'VICLsfq'MRnW,1Dua,5W09C7?tcccrhi>d020HUaj&,W0L$7RFb%s;]m!]^Sm3>A@[>\45GoSULB"Xq/4<?7XSZQ0J6'g9Snb8-ILFoH&\eOD^#V.pBd/lOW$4X3tU\$*^6buLcuI35CkI?[K#"(V*up1&=RIn7P;o%1j)ZUU=]<FdB_"Zd_$X4ik,MY+dblf#oMQBL;R=_DD;e0'2GAq&6)b+2,_TP0@L[;iAD\_J;SKf+Z5S)H+B$2<Q;5#/<Ac_\;$cc?4k:#ijsaj4j%tIA32j.WRG;Q=(mru#m/mJS>ngq?dC4J(hBaI>"ef<Poe!5hl^[adP>L_"Ou*TJ7844r9f/ZXQ4/bcjr#H>Tt+(f%(=:Fe13+191WiM.amg2r;T\AKpVY0ON=$Acgg[j4f8Q<b$&Y5HdoWVHk3:4iTmQcTti1[r-*UD8SeZMFVEDu,=M="<=dh^Tp,KPH4JM2!,')QK\p^"p5'i_(_X3E!,@;u/R0AU-$:P8+B),EEhO[aG+ZmBuajV;Ed\F_LE95\&*Is5WOMQZo\oX1gQg).4O.u6SW@d(/IpoqDc:VBVLE[h'tE2tKu[j,mf+U-Lq<~>
+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)efTQmNNCKL55%PR:O)t/s&(iDN$^:+$J*^3j+Tg&$MlR+c\=,oJqGD%?O,CsJ=[#PXTl,5lW/:U"F.?*s?mDCp,:.SLJ4@X%j7IO8/<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!3sRq6p&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]SO*,5tSXN_r4Nd^[&FDG%P>^7Jr\M$Y(gb$HMR!F\_M-rg$t;s.\LD&-P97Y)H;X=Upm2HnA'lmpFeT@puS'e3Nk8R:!Sr/e+nOQeSh$2;BZ:.ssMj:6uTF%R'QNT-
CI9IM8/dcPV$]3;Q;)T?Yq3@Nl"YXFpaXUDHQFcA5VGE-OVCKB-,16d$*=ZTTa@]HdO1N!UVTXo!<>JOu':DnMrGtk+qk9=a]R8l>38@'2W'[]"r-pkJ\XL7?IU+9)NRi#mN/'mUOb4$<\_Y3,\]X^k/%OFoUPO(J[fi(faBW5[+k804tN?SeH?=nD!@S%T:K&[XAfaB>2\%5*;Dg:<&aIR)7/'9g$'Mo9fgTRr@03-kTdrDPVP$jn'O/\00PX.5#rl[GY"Y.LJuN$bA6NIb00IRE(pLGSEOGB,md=CV@)j-QVco<2:ZjiVLAA"B%bBgaD*>S),Prl$/[@%*/gEIJ8[$)oACn;o_s,F2A@J*q?oO_$s,?7j#cal3&ee33Rn;<jZ5e,KBjlBW2[0[=_8#<G(l&mM(,t6+ko3A@J#7\n,G5I8:\O<rEh=/SBf-Nl;dWm!I0N^L-K?Y/[KsTKs5fB<NLBnLtg=_1D[MQIGlG"+]WiKEg/h@1MJ5[+s/J>u=CT<:u_t=UdC9F&bUZU.]FI=kVg9jAHH;^cKU\,36$70,\Ent==4ENb!=OXert=Hc\4tp\&tfLRq#:/O56.ZR;BQKanjU8h+OhJ9XPID=P*2TT&*a,P,K1!6N5lgXg_"H9Z#e=\3OXj4F'9n<(_t]iSDmM^S7Y*2gn>CqK'r\ojo*et0Ko$2js>#sjZ8TuV';$NU>rkA"o=E*IJZ'qhH[%82M6?"LR9/:19;6jcibl,iiL@qR%d5riG'YMih[fL-K(iaAnA9l'MRmt,1C#t3@k/Q7qEu7$P5<#W]7YKO>,E$T=l(1g#3Jj7uu=ES*;l?:n2>@E//+7#St:p.[N;\Ve:b#Bk/H;>$7LDC"\9f*4qr9L9To/nqJ921n@#S9pfW@h]jO%5S:H#*VDRPl[[AYrjMf+XPfeG\kXEAEFicQXKq\)@8]P\+@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.4pfPcL[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*,CSX2Q*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'_8oViD&7u-'^b->e*cK,%(DsPm:_tAGd/"]1RT&hRd+6.ZO*6\ZFVVj:*rTjS8E5D,RO3ms_5D:hK!r~> endstream endobj 76 0 obj @@ -456,10 +456,10 @@ >> endobj 79 0 obj -<< /Length 2195 /Filter [ /ASCII85Decode /FlateDecode ] +<< /Length 2197 /Filter [ /ASCII85Decode /FlateDecode ] >> stream -GauHMBlDa)#g+6+U%\h!"H(-(mY5;Rl8q<,YO(:R"p9Zka8ItHBK8gqt5:^;:/$@XOX!MRMO;hT&"[p%7HWHM#gOAN[ccpIC?;9Z-UQpt,3(mo.uHLIB;1Zh1l+2.[MrKDGs@G.kA>o]9W0baOg7XNXkM/TuF1c,,U0bl'T^*3*Bh!ce"p>\062N6br,R89RND2:QS]:eW4F9oE1431ar4h9GD0:@%!s\Sn=LqbDI$G5I2uip/AMN@f0q6J)&H$M29o#qEn"6p58Ji?Z5i1KIuCKX^:]Wb=7Fh\Nlal<26>G=Rq@:m(uqXbR*8l>n3m]c*XbdWau"FmSjh"M@8L;%8RT9Qn!jemdg;Cc->XrbF@gU8M'GO6qT'@UW?aJ*!WD]rJ9VZ2QcWj&Cg?.3>?&pP3*:2A;*b*";k<P)2a*#(G)^WYuTl\??0t)$E&9R%@L^iBLgr]boN_^HQ7rSlX[UWk8A$AdMLPnanKTdl@/@/'N:0#K=Zciecg1s\Or?UO5F[8LSCrK_F,bYr!+TL,jW\nMo_!1tcLY=NL-l9Y@PM44okBTY3Wu\37[]@Eo"QuTkL\6T>-UggpRi8=qAa=Z*1[g#\gehV)XX+J3K_H6i?tVX&[?rjeB0?GE7U4ga2@Nl**he0^"V+%[FXsTHu1oP+6i*8qC7o;MXhHA%Hi-mNgs5!!chJHRO-_YE[+!42@"p)D&7l1M%.=4L2/[fV41#lc(Ppj)rn[*U-)Zc7&NdU"DP5A7@.$*H#'T8\REZs5O)C*95jjTnjd#B4C^D*n43p^k:+;K$6;WIX+JXk7=LJM(DS?q_ue/2fS(npknpr*qQ$S75FMp/-3H]aLh67r;--)Q,GhGA!,9aOl//d;5)R8]'Mb2Uoi4H&feXYhUBCNWgKt>:(EV<7aHR@hdO4af<9;;IGAt42_O*B:ol_,QbcBb8?'&dT].NP\F5$]4K[\u!LChhple2Y&@e72#@
#qc1d9Y^G@h/qc@-H[fMZaY,JV,J(@K(OBY#a>M[3b<_8O3//B*U"RV19I_B8>$ra&IM#tMj1OLTp3e7j"nXY:m*/%PL_IW>L[4m,DseaIaOr29TYM%b#+:830dJff#Xk#TbhFnLqaH:*5JmXB*.FoZM%D"+fL9s\drNG)*I_nH?'1\*/t+:Sl"Ver+UhmWc2b'Ks@#fOTgCSd_2CH6!JUE#s)8kS183RTLZ.@(YD"U@[1fQTO?juf;d!=TJ?MG:%T=WW.lF'X2F:7KGKOp#;N.:fT:X30UH7d*gL9hMD[lD-ui^!;%t6_!P/Kdchspl[ZAk@K3=)U?F%.@=1IW*d'^Yu:gJ\=U'(7Lo7cCqWDo[*Z]gEd*Q!6:Jlgb?7dm1FRI[^s(u22%nI)Z)/BbN49H?RrP#oSji]>CfF@(RZ_=/*J0".MhUQp_Sp%BrN>9A[]CE?u/9V^c%9p9J+=(AT#-umT7BB=;H0+0KkIJ6MK&DsNJs]?@kRif[]t7Qo@#ZR=B<tmFhLHP,Y_Ze5<sbJ%RdSZkp$GaBn[@]CLC!\U6MuiT1q=W!2pDbm3_[Z%Li7I$g.'^:'#asH.iL&YBb_uNFbe;b'bt*=53&36TRuF709sYe09FHATbJ/9#mu%NM6'kep=H15[)p)VZ)_@KK(33=kJ7llpE>p[DE+\W+Au#\VG'12H0q1PL\VaQ]cGC*qt4=WgUo*Hag3klD(hq[[JZ^o4,G9/MFE-m+4BNZC>'&UY.mE>)5L4&k#20WKFmDonP2PUN*5&X:*f7'X^FGBD(5!Y/<$lFkK55t(XrBA;M)UKOLQ'&*62MS9O#dZ+&9YiS]M(m^tCDdinb<Z\X!Jkr^m<$IW=c-0oZ%).6]j8Vh<ur-_<J@AIfb8Q,r"Fu=m,=1Yek+Q-JIS)&A6g:.Y]FH>k@*6GKr+H+L;m)&0J6B5lb^%!.M(^pH7Ibg_dMq+L(E;X=n1&5LJ#fqhs3=NE6 Z_=c[DE,VC^iXricSn-o@B9JC+qO[kATO,%b'&UIZi9.1s(:%%S5QX_*()+nsj-<&g=0,])*\_Z.KgdU#"3L.85&rc,%$AmWhD%T8#HiiRYq43GOma0]$f]@-_Dbr3/bm5h$()iO!X>ko56:s%p*9CF5W^rDg2oQn(Q3#QIoU/phMHBHd/'#_TOVhp[tBEZM8lW-?T_YZNo7"4nc/(B~>
+GauHMBlDa)#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;*5cnV]C!RoNc/&A-+8.jD2(-WO\ZAt)bjWg6e#R2<If;a/j8^(r8JrIFsMENUa67YYnrpt,0CXWKP>j9-kI\Y@LD"^N@Qm<Idj3mp#[j,BAO=\bs3?Fl?WSIdB"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#+:V76acAHFM&)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]DHOonq3@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,ifl%BdrB1p5$&FZ"?d(=DbtULTNJZ)f@2&[27@"7'TKf+Qh.C"U6Q7:n2Uh5Mp[p''Y?nnT4_&Ft(]jJjdhuR:3i4AAWS-q9V'\%k<ngPP+e2UAbS6UpFl%UPf]<4Jp!*]LH]uW^FucXq(?iG!gT.D!7fM?jF?WGI9Ui:V59JX61>h=t1u(-;kmL+QV5&<\_0#-umT7BB=;H0+0Kj12gIK&DsNJs]?@kRif[]t7Qo@#ZR=VpeqQhLHP,Y_Ze5<sbHOS*nclp!%VBn[@]CLC!\U6MuiT1q=W!\'5>C3_[Z%Li7Ig5ac,'#c)h9,]H#Bb_uNFbe;a2#t@J=.>\M6TRuF709sY<&=m=CK]K^Tm//;.HQ<ZaF,?)3EEmUoAiSRh4cD0FJg2PC86U^/ETK!k#,PF8+#jb_GCjHEoS:lVnk7p>75a\tD!r-_K_jmaXf\JCV]kBCWhY&.Jn86MX9KVen?s<K]]#UO9C\C7quQfFoC9Wi93/M,?=tc(5gg9'kd3uCSo!)qfR%sBL,&ac=m4_&fT+<GEjCQgMIANo-;Jf^bH#E3lF\T<2[(,cmbL^ik7n?"?&19D?:eQV<Hqbh@!@u)WGe_gPe0jT#4+?m[>/)cb!53fCu2r4jCV,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.oPpqfjWWhi)rg7XiE04.p;D\[VtkI]70gh-Y1g~> endstream endobj 80 0 obj @@ -488,10 +488,10 @@ >> endobj 83 0 obj -<< /Length 2048 /Filter [ /ASCII85Decode /FlateDecode ] +<< /Length 2060 /Filter [ /ASCII85Decode /FlateDecode ] >> stream -GatU5gMYb*&:O:S#fT!75Vj0)l;f#<]qt*K]'6Zkdq5kHD9>m09<'Ufo(P5O/86M2[Za/,<0YJ7n][CEo4Bn+5F_S>0Ooh:5"p>;9Z(iir%7:3q9-.i5.3hC!7rS:#;CG?jRBTp@Q?_(rm/nE+85ORJ=[YAtdJc0nh@:(k4b'b5,i8?*-[Ejt>UfEg_-%qD>Qc8Wihj>P@9i?9Rce8958T_m7,\7D\<d(9.G+N+08lor=cl"ReO"[UjimNa#H\IbVU:fqo>*&54Hhf6+"?%[F2cO-DG(pRCWiEV[1.?fkt5:V(O=Wo!D1f?]E%lZciu6-V2G&&.oYG.PEP_ni]n"5j7blp<SWYM"F1lM;4:bp"MGSLm*&Hfcj.V5u,WUd_'rf@dmAeV&m\3p2(ALhjBkp.gWFgZ'MU(Q>)f(-HL->+HGURLO?V2@IPTljAKc/Ral?E?6&SW,Mr-!&ADg4O*\V_6bR62/&:ejla?hdsAE;M?3s.o3@.U5gN+e<AZf!ZdLN!t&mm*>?*:nnPDh+iWUk814VI/<1K3Xg9/>RB<5ni"0)a6@Im,LEj_0V?3EfZ7?es3q]M#G&2(CC:rKek=M7,%]q[4NVdk*+L'[pQA4IKRk"52_RbG&PmW:1fcE%7du/P>i#^T/=*If@SLfpCYFLL0!eehs6nqd_oPp!prBQ[N!%(^^q:KN-SfN"lm>59HD,5a)!^hhesTD^Uq2Xo'aWRcgRe'.%.5BcnfS-:&bgTIQ5S;RGLWNC'm=mX?2"G;n/>^HpLo?Qq;g974R2mGnH2(@RGSfJ\GsNc4,&[WBgJ9-Omba\9Z]]u[!HVF9LoO.3744;ndo%Luh1s=/7:VcKpf#>W#[T=B/^X2]7l(5R.'<Hc)Ih[(2bUY)iemWS@q3la8op8\[O"DUgQ#j<c&24RV>N#'n.dC&gW58CJHPLO,K<W.47Q'DJ50a8s_b>,NIVjCL0-Ga 3[tE<1]Q>cVM,W!W]6n;Pb+SN4>Vk4o)^DafQl[rjXc5*&0=qtEd0dm@YaD1<,*oSV?en/29QUZLnTu[:GlmRKk7P:^Ce)<.ur^!nCred!,L(fmWd[D>a6/eUk6tm6Jc?pJ5%UE@?Fa1[S^3C7jUX(iC%k",691jA@UlV7)Sl4GLgEB4%K7eG7"+0c%6[f>EY0eHo#&q.lG\Ke^d>!]IVVu17>)o(f\!G>E:!'V>:^d#SZU;2o5o>VcTrPuZa5IVaR%]#?3sU<lDr]5Xu';Z%,&kBDN0IK4K*rRdT6[cq-F8;qj\9K,GuX.>&gTm&e*(1PCI259;0Joam;3=_fN#oioXKDmFVHosrV(id#N-hSo@i@F!fAd;%id.5tnseYK8Xr'.kEg@NuFu('fUID3a^%L)9lcDV+-a%SG"3'L_I+84AdGL;&hfX=BI#PZ%5T9hBRkA,-MX!juW1YS*0.g/t0RoYulfc9PJYJVP51]s2/K0k07ugRh92\9MWX";+'i)QJ&V9>HeT3D",5Nk.:bKn(.k*-o?WDa[u:X)+,:6"j1Ke4Qq+?#Z96hha7p%GC(bfq72s9^e.^8o9^;%RiAlLRj3X\-n:I?lYqIWIX-djMfaSAB^O,H<01Fl)EW\.sF\gF"if0(c9[ZDrt_V<>/>?.hp9!6KtW:^BjuBNJh\iq"m4WNNdP"TID=27LYFs6h%%#Z6-n!jmZ,sd]aFY/(CQbD(l.Ng_=@&_IEB/hI:(p?LGHjLj33&>r+>YGK<GY*%^JNlp[=6An&RWVOctG1,7.YTBS&6]Rfd_V]TO(@,IMqJt?oWB=r:&SNo1JHPK&-[9+5)5e1C-Ak";42ag2\D_uune]])1%^5[Tl,i!LE"RSoc67_T!<#a9Ks1+!>(q[qbtt/V'3h,M"!p"KJMUnZ-^k-jKSiT:K:r7-DP2?M&[49Pt'NMs=#p5heFofg<s\).1%>l# &lf'>g2H>NkipQm-'pfeZ&]>H6XDf3u1Br^Jq%a1:Jhj"gSn%bdVipmK<2*A%uG]~> +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<"cRKAtNA=(?>2K2EnB)Mer<"<kH;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?.LDk(VVTN;[kn.Ff2?48"[=7=7QLHVEI=],@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,fgWOmpMoN@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)DsSU"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;qCUMUa5*u%I(rtrG[15oC(f6e]5"!P+=1OcnfQX9H0AIX'[6RGLYm2A?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#CLtk78X:)VgrJ<tU3F#R:FWW'Mg)Goe(=ZYcK8f(@? r_"nL-#1**Rl!+3%qlF_B]VTUj<;ic@)'?qSTf3<?!9Xh;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*#\:OCsLh/\Sc>rik:'rW/Z/MfjVtI/:TXpEtCj+30Yq(9#Tt*6j:MS6X8sXZuI=#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]lqedhYSg]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(WiGW(9NK:jrlD./9Km4=jHlg[Wlh)X_!,?%'K4M,Oq.[1r4i!';]qA>:VqN1?OkKtZD5lL2)b\*JE%CcA[nl9I37>;0b,RUnmUMAS93&N;._.aDP*T/]c"YlShjLuMmAZEIRXA:Jq0o(J%X5s>F?O%Y'@&BDmWPXH56-<0,?P=0b2+?Jf!Eqj;_ap:_[5%qU\#gHkZq9ADQkM873&oW[a@2LkAn&XYVOctH1,71ZTBS(LJr02RV]Y'2i4@ZJh<^:I[E^fp"gg3E)O@DSiU:,j0XK<)b%Nl#K3-<E%:pnj"I,/@i.sZ6N%Z=*k,I)*>q(-T!dc97duPDBWNmG?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~> endstream endobj 84 0 obj @@ -550,10 +550,10 @@ >> endobj 91 0 obj -<< /Length 2193 /Filter [ /ASCII85Decode /FlateDecode ] +<< /Length 2195 /Filter [ /ASCII85Decode /FlateDecode ] >> stream -Gau0DD/\/e&H;*)+nSD@@,XN=4i8t\=d*F4g9'mA%.c[0&oA;E7#dAhAAeED:2eNWOjXr]:t-(knTafF)QN>?G0RHri<9&-&h6O\KZ8pO2gY^#o.7F"-Xld*febY'sNe?*CuVnU\ZGO+)-DU7#*O':@Bf-(;eiL-d5Of%+Vq)-(Xt,NoM<\j7Ds==I0(0i/(@N\A"rLi0hgj&UlPkW0e%*'bkX>JN>j&RV/EM7QRefWK>a,))n,,#fqQ>GJI-I4TJ1/C:]i1_n.ULttht9<Jn77c:OZO]N#/iIYoIS-G3)'SCOLS0?.I^bI"VJ:WopY2("+TK,!fBR&@T239ug8-N^B4c%*q.XjFN@9WFPJK\?W.jNd:K*GkmMtZ9#*uOWr=d?<01L760NG0CfAf5f%abes/?bXWl#k1R7a2EhHS#I3Ma[7'G+65uLK\?<u"TF:u:??+3>.EN/V'claTT>c</3"gBBE2[OHaog\jU!&)l?Mlj6")Z,NNZONiK]^,UD*\pKAigE.%5qng8P4pK"LfBd#t9'h-L1BP0Nj2H'*HEKo.98D/BC^67ZM-eN58a(Jk4?Ek(h%F11Z1Gp1KJcM'<IeA&MS9qMJSl8J'"E=*3oTb=ePj4f\W,B*M1B+#(Yo.X;/aa<GR>@'XHJp0kh+33>h]hi#Rrj+A%i_IO8@VIA_Q0K'"H',^l0TT\mDOcX\JMqn]h@_m?pSknV,jOfGGHguKdDBsh*b,1>AHjLkNg?r97<Ld[]Xuf*"5m^>nV/b/N"N]+V[]FqQRDhhiYMq;r,C6n2I"-Eo'2+ON5+<9u?JmZk1(9<(*VeE?^oXags/A%RVHC(2BaJR%p80-C?,(J/^KEpbKGaZA0,k8V0N.ZPe@k4=U%VB'2p5l"e@mr7*TGd#L7]mQ's6\bE6-OoZeg.kYlObcDk[oaNh0[F<\h?PZ*!TmAdk7'%7oXs;U/b["YN>8; >\AqEgA]RR'laThehtMMs].=phSUE]OS+e!lI>r@^pTglZ&=R3_bGGCaQ+gN0B'LrPo:*\bk"6kEZOG24kM6L4U/CD6VRnmM/#i)\>Q\j4?sn>I9jS_XSEgNNb.Ig[J].,.r3[VJ5SW<asM8#ZKXf2RQYQlp.h:R)uH03l>8pNq_*L_+'PRK.\6*e5d@oa.pBF><4I>-:t2s9X*!PVr(1Qm::u)ELgQGO+2lV(Y_QQB,+k:u-\Eis!+aV>#WZOM_4c6PCfjE#'60qjT7)U?gV(V#r]7=WLZ+5,/X4)-2nm:E:74KetS\SFa=4d7]:L8t(FGT-m.YYRFnP'4LtS<Nj6>Y*E*PlLE1Wnu[)BLn9"j56AtJN"!lW(PJIFbFnK3r"Z\#G<V>2:WqN%;,Ae(WKbTV2bce_<".oe5*X#K4aC9dGas[?sjl<PWWkk^s*A%"q='2Nt#\l:UAJOPMWK:>)_6Kq+8UUo>sqnXFj%U'mrEIIfEh0gi3]:B<B/"#/6^7R5I3iXdA-!qS&8[oK&.GZa)e_naibhKr*/8f]BJGh*bBsNNmKNU]=c,*Wgi4s^/pTI=Rr:T3NX\sc!;g0q6qZW>0eI&g'bIu,>3?GARI[4G",S>0R=ism9V4_:jJR,a!5U1Eo6e?"rbZcb?/e:Yb+tRcP@;',7Ya:;B1^XMIJXtLR@L9b_7K"KM-,Kr6g51?G2D*/VdpC[=N92_LFl?d0#qjLGGp)ZO#nedR*Z5BUNP7hk+eLd@g@b"f^D@<'B9@-U4"r+8VhS_:M-]&(\@DiAKi6Gf+^;JC<[aR/bXY_0^omb6(-QI62,VMd_VmOI#ESopSV&gAW3!^Q6j.;9oe8pFa#Q:hDl?q!fR""onaO2%UTXtN#e&].g4I(skpt5]AS+lm"(/AfB!qe5h<fXgCH7db(Cb^<\MS%RrB,2B[I!5(!-Z&0[^<'HK:0H4Pm!83oXb?RsE qZcZ@3ub5:'Pn?ecmHa>X'E0i*0m"_M+=q6/H>@n;f3-=o.)si(X?LJ&e5jJnTfF:TKdn;j&#]QI@]k&&QGQ,h\_RP^V"N(Y5kMA_g@6n.WTTDbpFPMS.I4%^Kdn,d=W^fh"ASQ?MW<*(G@UU=8g(a/*iTj1)g#]B[Hpg::1*T('aB"<Hfqd4O(a9=0H5i7EON8XXB+]PMc~> +Gau0DD/\/e&H;*)+m_i8@,XN=4i8t\=d*I5g9'mA%.c[0&oA;E7#dAhAAeED:2eNWOjXr]:t-(knTafF)QN6?G0XJri<9&-&h6O\KZ8pO2gY^#o.7F"-Xld*febY'sNe=g,QMnU\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*fOWZ4d#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+,]pFT%?LfN3KhT)/p[s)6:E7!,C1#ai.s75iK-^LU1Y%bZBBXO)J*Ci<(2%aSZP"grRedCHlW\m.0JB8Mq_6u&SCT!jmmZ<tnNio@Bp/[e/I9(n6)5MsE(: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>fT4qgV>,jo5H))3sB"d_pm4t:um&C&^/N98Kg!5jPpgtD:>L'hqqF.1=@8(lf*l8kI:fOi5*5&/=Qdl!?dXJ/uh]HYH#O&so4k5_?/&CaG>2KdK,#W8+.#je*IlSnN!&JX#VG4o8EGs8T1]i7&Q'nL+Bd?h4X^F=0uY+_e4G?45Ceha9@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*unhFG5*ju^_4+Ak$)YD?bo"]0^?YT!"rP,60uAs$QjRj826eS=@_\S;nbKP,bm[";$p49bGfg-;bqiuUH\<CO-?c*S9;N7SR!8C4q6p5c)oqA<GX:04>*:$/DqM_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,FohHcj5N!B,R,\.&H?[*Bg'*~> endstream endobj 92 0 obj @@ -1064,139 +1064,139 @@ xref 0 134 0000000000 65535 f -0000047288 00000 n -0000047438 00000 n -0000047530 00000 n +0000047308 00000 n +0000047458 00000 n +0000047550 00000 n 0000000015 00000 n 0000000071 00000 n 0000002129 00000 n 0000002249 00000 n 0000002421 00000 n -0000047682 00000 n +0000047702 00000 n 0000002556 00000 n -0000047745 00000 n +0000047765 00000 n 0000002693 00000 n -0000047811 00000 n +0000047831 00000 n 0000002830 00000 n -0000047876 00000 n +0000047896 00000 n 0000002967 00000 n -0000047942 00000 n +0000047962 00000 n 0000003104 00000 n -0000048008 00000 n +0000048028 00000 n 0000003240 00000 n -0000048072 00000 n +0000048092 00000 n 0000003376 00000 n -0000048138 00000 n +0000048158 00000 n 0000003513 00000 n -0000048203 00000 n +0000048223 00000 n 0000003649 00000 n -0000048267 00000 n +0000048287 00000 n 0000003785 00000 n -0000048332 00000 n +0000048352 00000 n 0000003920 00000 n -0000048398 00000 n +0000048418 00000 n 0000004059 00000 n 0000004194 00000 n -0000048462 00000 n +0000048482 00000 n 0000004331 00000 n -0000048527 00000 n +0000048547 00000 n 0000004468 00000 n -0000048592 00000 n +0000048612 00000 n 0000004605 00000 n -0000048658 00000 n +0000048678 00000 n 0000004744 00000 n -0000048722 00000 n +0000048742 00000 n 0000004880 00000 n -0000048788 00000 n +0000048808 00000 n 0000005016 00000 n -0000048854 00000 n +0000048874 00000 n 0000005155 00000 n 0000005289 00000 n -0000048920 00000 n +0000048940 00000 n 0000005425 00000 n 0000006310 00000 n 0000006433 00000 n 0000006502 00000 n -0000048985 00000 n +0000049005 00000 n 0000006634 00000 n -0000049051 00000 n +0000049071 00000 n 0000006766 00000 n -0000049117 00000 n +0000049137 00000 n 0000006899 00000 n -0000049183 00000 n +0000049203 00000 n 0000007032 00000 n -0000049247 00000 n +0000049267 00000 n 0000007165 00000 n -0000049313 00000 n +0000049333 00000 n 0000007297 00000 n -0000049379 00000 n +0000049399 00000 n 0000007429 00000 n -0000009588 00000 n -0000009696 00000 n -0000011812 00000 n -0000011920 00000 n -0000014110 00000 n -0000014218 00000 n -0000015947 00000 n -0000016055 00000 n -0000018809 00000 n -0000018932 00000 n -0000018959 00000 n -0000019171 00000 n -0000021459 00000 n -0000021582 00000 n -0000021609 00000 n -0000021822 00000 n -0000023963 00000 n -0000024071 00000 n -0000025960 00000 n -0000026083 00000 n -0000026110 00000 n -0000026361 00000 n -0000028500 00000 n -0000028608 00000 n -0000030894 00000 n -0000031017 00000 n -0000031044 00000 n -0000031226 00000 n -0000033135 00000 n -0000033243 00000 n -0000034913 00000 n -0000049445 00000 n -0000035021 00000 n -0000035209 00000 n -0000035453 00000 n -0000035762 00000 n -0000036072 00000 n -0000036271 00000 n -0000036585 00000 n -0000036963 00000 n -0000037402 00000 n -0000037643 00000 n -0000037906 00000 n -0000038332 00000 n -0000039166 00000 n -0000039706 00000 n -0000040088 00000 n -0000040379 00000 n -0000040959 00000 n -0000041286 00000 n -0000041586 00000 n -0000042437 00000 n -0000043018 00000 n -0000044063 00000 n -0000044440 00000 n -0000044839 00000 n -0000045302 00000 n -0000045689 00000 n -0000046112 00000 n -0000046508 00000 n -0000046622 00000 n -0000046733 00000 n -0000046845 00000 n -0000046954 00000 n -0000047061 00000 n -0000047178 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 trailer << /Size 134 @@ -1204,5 +1204,5 @@ /Info 4 0 R >> startxref -49498 +49518 %%EOF Modified: hadoop/core/trunk/src/docs/src/documentation/content/xdocs/mapred_tutorial.xml URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/docs/src/documentation/content/xdocs/mapred_tutorial.xml?rev=674834&r1=674833&r2=674834&view=diff ============================================================================== --- hadoop/core/trunk/src/docs/src/documentation/content/xdocs/mapred_tutorial.xml (original) +++ hadoop/core/trunk/src/docs/src/documentation/content/xdocs/mapred_tutorial.xml Tue Jul 8 07:11:58 2008 @@ -20,7 +20,7 @@ <document> <header> - <title>Hadoop Map-Reduce Tutorial</title> + <title>Hadoop Map/Reduce Tutorial</title> </header> <body> @@ -29,7 +29,7 @@ <title>Purpose</title> <p>This document comprehensively describes all user-facing facets of the - Hadoop Map-Reduce framework and serves as a tutorial. + Hadoop Map/Reduce framework and serves as a tutorial. </p> </section> @@ -52,12 +52,12 @@ <section> <title>Overview</title> - <p>Hadoop Map-Reduce is a software framework for easily writing + <p>Hadoop Map/Reduce is a software framework for easily writing applications which process vast amounts of data (multi-terabyte data-sets) in-parallel on large clusters (thousands of nodes) of commodity hardware in a reliable, fault-tolerant manner.</p> - <p>A Map-Reduce <em>job</em> usually splits the input data-set into + <p>A Map/Reduce <em>job</em> usually splits the input data-set into independent chunks which are processed by the <em>map tasks</em> in a completely parallel manner. The framework sorts the outputs of the maps, which are then input to the <em>reduce tasks</em>. Typically both the @@ -66,13 +66,13 @@ tasks.</p> <p>Typically the compute nodes and the storage nodes are the same, that is, - the Map-Reduce framework and the <a href="hdfs_design.html">Distributed + the Map/Reduce framework and the <a href="hdfs_design.html">Distributed FileSystem</a> are running on the same set of nodes. This configuration allows the framework to effectively schedule tasks on the nodes where data is already present, resulting in very high aggregate bandwidth across the cluster.</p> - <p>The Map-Reduce framework consists of a single master + <p>The Map/Reduce framework consists of a single master <code>JobTracker</code> and one slave <code>TaskTracker</code> per cluster-node. The master is responsible for scheduling the jobs' component tasks on the slaves, monitoring them and re-executing the failed tasks. The @@ -89,7 +89,7 @@ information to the job-client.</p> <p>Although the Hadoop framework is implemented in Java<sup>TM</sup>, - Map-Reduce applications need not be written in Java.</p> + Map/Reduce applications need not be written in Java.</p> <ul> <li> <a href="ext:api/org/apache/hadoop/streaming/package-summary"> @@ -100,7 +100,7 @@ <li> <a href="ext:api/org/apache/hadoop/mapred/pipes/package-summary"> Hadoop Pipes</a> is a <a href="http://www.swig.org/">SWIG</a>- - compatible <em>C++ API</em> to implement Map-Reduce applications (non + compatible <em>C++ API</em> to implement Map/Reduce applications (non JNI<sup>TM</sup> based). </li> </ul> @@ -109,7 +109,7 @@ <section> <title>Inputs and Outputs</title> - <p>The Map-Reduce framework operates exclusively on + <p>The Map/Reduce framework operates exclusively on <code>&lt;key, value&gt;</code> pairs, that is, the framework views the input to the job as a set of <code>&lt;key, value&gt;</code> pairs and produces a set of <code>&lt;key, value&gt;</code> pairs as the output of @@ -123,7 +123,7 @@ WritableComparable</a> interface to facilitate sorting by the framework. </p> - <p>Input and Output types of a Map-Reduce job:</p> + <p>Input and Output types of a Map/Reduce job:</p> <p> (input) <code>&lt;k1, v1&gt;</code> -&gt; @@ -144,7 +144,7 @@ <section> <title>Example: WordCount v1.0</title> - <p>Before we jump into the details, lets walk through an example Map-Reduce + <p>Before we jump into the details, lets walk through an example Map/Reduce application to get a flavour for how they work.</p> <p><code>WordCount</code> is a simple application that counts the number of @@ -683,10 +683,10 @@ </section> <section> - <title>Map-Reduce - User Interfaces</title> + <title>Map/Reduce - User Interfaces</title> <p>This section provides a reasonable amount of detail on every user-facing - aspect of the Map-Reduce framwork. This should help users implement, + aspect of the Map/Reduce framwork. This should help users implement, configure and tune their jobs in a fine-grained manner. However, please note that the javadoc for each class/interface remains the most comprehensive documentation available; this is only meant to be a tutorial. @@ -724,7 +724,7 @@ to be of the same type as the input records. A given input pair may map to zero or many output pairs.</p> - <p>The Hadoop Map-Reduce framework spawns one map task for each + <p>The Hadoop Map/Reduce framework spawns one map task for each <code>InputSplit</code> generated by the <code>InputFormat</code> for the job.</p> @@ -935,7 +935,7 @@ <title>Reporter</title> <p><a href="ext:api/org/apache/hadoop/mapred/reporter"> - Reporter</a> is a facility for Map-Reduce applications to report + Reporter</a> is a facility for Map/Reduce applications to report progress, set application-level status messages and update <code>Counters</code>.</p> @@ -958,12 +958,12 @@ <p><a href="ext:api/org/apache/hadoop/mapred/outputcollector"> OutputCollector</a> is a generalization of the facility provided by - the Map-Reduce framework to collect data output by the + the Map/Reduce framework to collect data output by the <code>Mapper</code> or the <code>Reducer</code> (either the intermediate outputs or the output of the job).</p> </section> - <p>Hadoop Map-Reduce comes bundled with a + <p>Hadoop Map/Reduce comes bundled with a <a href="ext:api/org/apache/hadoop/mapred/lib/package-summary"> library</a> of generally useful mappers, reducers, and partitioners.</p> </section> @@ -972,10 +972,10 @@ <title>Job Configuration</title> <p><a href="ext:api/org/apache/hadoop/mapred/jobconf"> - JobConf</a> represents a Map-Reduce job configuration.</p> + JobConf</a> represents a Map/Reduce job configuration.</p> <p><code>JobConf</code> is the primary interface for a user to describe - a map-reduce job to the Hadoop framework for execution. The framework + a Map/Reduce job to the Hadoop framework for execution. The framework tries to faithfully execute the job as described by <code>JobConf</code>, however:</p> <ul> @@ -1204,7 +1204,7 @@ with the <code>JobTracker</code>.</p> <p><code>JobClient</code> provides facilities to submit jobs, track their - progress, access component-tasks' reports/logs, get the Map-Reduce + progress, access component-tasks' reports and logs, get the Map/Reduce cluster's status information and so on.</p> <p>The job submission process involves:</p> @@ -1216,7 +1216,7 @@ <code>DistributedCache</code> of the job, if necessary. </li> <li> - Copying the job's jar and configuration to the map-reduce system + Copying the job's jar and configuration to the Map/Reduce system directory on the <code>FileSystem</code>. </li> <li> @@ -1253,8 +1253,8 @@ <section> <title>Job Control</title> - <p>Users may need to chain map-reduce jobs to accomplish complex - tasks which cannot be done via a single map-reduce job. This is fairly + <p>Users may need to chain Map/Reduce jobs to accomplish complex + tasks which cannot be done via a single Map/Reduce job. This is fairly easy since the output of the job typically goes to distributed file-system, and the output, in turn, can be used as the input for the next job.</p> @@ -1288,10 +1288,10 @@ <title>Job Input</title> <p><a href="ext:api/org/apache/hadoop/mapred/inputformat"> - InputFormat</a> describes the input-specification for a Map-Reduce job. + InputFormat</a> describes the input-specification for a Map/Reduce job. </p> - <p>The Map-Reduce framework relies on the <code>InputFormat</code> of + <p>The Map/Reduce framework relies on the <code>InputFormat</code> of the job to:</p> <ol> <li>Validate the input-specification of the job.</li> @@ -1370,10 +1370,10 @@ <title>Job Output</title> <p><a href="ext:api/org/apache/hadoop/mapred/outputformat"> - OutputFormat</a> describes the output-specification for a Map-Reduce + OutputFormat</a> describes the output-specification for a Map/Reduce job.</p> - <p>The Map-Reduce framework relies on the <code>OutputFormat</code> of + <p>The Map/Reduce framework relies on the <code>OutputFormat</code> of the job to:</p> <ol> <li> @@ -1404,7 +1404,7 @@ (using the attemptid, say <code>attempt_200709221812_0001_m_000000_0</code>), not just per task.</p> - <p>To avoid these issues the Map-Reduce framework maintains a special + <p>To avoid these issues the Map/Reduce framework maintains a special <code>${mapred.output.dir}/_temporary/_${taskid}</code> sub-directory accessible via <code>${mapred.work.output.dir}</code>
for each task-attempt on the <code>FileSystem</code> where the output
@@ -1426,7 +1426,7 @@
<p>Note: The value of <code>${mapred.work.output.dir}</code> during execution of a particular task-attempt is actually <code>${mapred.output.dir}/_temporary/_{$taskid}</code>, and this value is - set by the map-reduce framework. So, just create any side-files in the + set by the Map/Reduce framework. So, just create any side-files in the path returned by <a href="ext:api/org/apache/hadoop/mapred/fileoutputformat/getworkoutputpath"> FileOutputFormat.getWorkOutputPath() </a>from map/reduce @@ -1456,7 +1456,7 @@ <title>Counters</title> <p><code>Counters</code> represent global counters, defined either by - the Map-Reduce framework or applications. Each <code>Counter</code> can + the Map/Reduce framework or applications. Each <code>Counter</code> can be of any <code>Enum</code> type. Counters of a particular <code>Enum</code> are bunched into groups of type <code>Counters.Group</code>.</p> @@ -1480,7 +1480,7 @@ files efficiently.</p> <p><code>DistributedCache</code> is a facility provided by the - Map-Reduce framework to cache files (text, archives, jars and so on) + Map/Reduce framework to cache files (text, archives, jars and so on) needed by applications.</p> <p>Applications specify the files to be cached via urls (hdfs://) @@ -1558,7 +1558,7 @@ interface supports the handling of generic Hadoop command-line options. </p> - <p><code>Tool</code> is the standard for any Map-Reduce tool or + <p><code>Tool</code> is the standard for any Map/Reduce tool or application. The application should delegate the handling of standard command-line options to <a href="ext:api/org/apache/hadoop/util/genericoptionsparser"> @@ -1591,7 +1591,7 @@ <title>IsolationRunner</title> <p><a href="ext:api/org/apache/hadoop/mapred/isolationrunner"> - IsolationRunner</a> is a utility to help debug Map-Reduce programs.</p> + IsolationRunner</a> is a utility to help debug Map/Reduce programs.</p> <p>To use the <code>IsolationRunner</code>, first set <code>keep.failed.tasks.files</code> to <code>true</code> @@ -1703,14 +1703,14 @@ <title>JobControl</title> <p><a href="ext:api/org/apache/hadoop/mapred/jobcontrol/package-summary"> - JobControl</a> is a utility which encapsulates a set of Map-Reduce jobs + JobControl</a> is a utility which encapsulates a set of Map/Reduce jobs and their dependencies.</p> </section> <section> <title>Data Compression</title> - <p>Hadoop Map-Reduce provides facilities for the application-writer to + <p>Hadoop Map/Reduce provides facilities for the application-writer to specify compression for both intermediate map-outputs and the job-outputs i.e. output of the reduces. It also comes bundled with <a href="ext:api/org/apache/hadoop/io/compress/compressioncodec"> @@ -1765,7 +1765,7 @@ <title>Example: WordCount v2.0</title> <p>Here is a more complete <code>WordCount</code> which uses many of the - features provided by the Map-Reduce framework we discussed so far.</p> + features provided by the Map/Reduce framework we discussed so far.</p> <p>This needs the HDFS to be up and running, especially for the <code>DistributedCache</code>-related features. Hence it only works with a @@ -2717,7 +2717,7 @@ <title>Highlights</title> <p>The second version of <code>WordCount</code> improves upon the - previous one by using some features offered by the Map-Reduce framework: + previous one by using some features offered by the Map/Reduce framework: </p> <ul> <li> 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=674834&r1=674833&r2=674834&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 Tue Jul 8 07:11:58 2008 @@ -31,7 +31,7 @@ <title>Hadoop Streaming</title> <p> -Hadoop streaming is a utility that comes with the Hadoop distribution. The utility allows you to create and run map/reduce jobs with any executable or script as the mapper and/or the reducer. For example: +Hadoop streaming is a utility that comes with the Hadoop distribution. The utility allows you to create and run Map/Reduce jobs with any executable or script as the mapper and/or the reducer. For example: </p> <source>$HADOOP_HOME/bin/hadoop  jar $HADOOP_HOME/hadoop-streaming.jar \ @@ -45,7 +45,7 @@ <section> <title>How Does Streaming Work </title> <p> -In the above example, both the mapper and the reducer are executables that read the input from stdin (line by line) and emit the output to stdout. The utility will create a map/reduce job, submit the job to an appropriate cluster, and monitor the progress of the job until it completes. +In the above example, both the mapper and the reducer are executables that read the input from stdin (line by line) and emit the output to stdout. The utility will create a Map/Reduce job, submit the job to an appropriate cluster, and monitor the progress of the job until it completes. </p><p> When an executable is specified for mappers, each mapper task will launch the executable as a separate process when the mapper is initialized. As the mapper task runs, it converts its inputs into lines and feed the lines to the stdin of the process. In the meantime, the mapper collects the line oriented outputs from the stdout of the process and converts each line into a key/value pair, which is collected as the output of the mapper. By default, the <em>prefix of a line up to the first tab character</em> is the <strong>key</strong> and the the rest of the line (excluding the tab character) will be the <strong>value</strong>. @@ -54,7 +54,7 @@ <p> When an executable is specified for reducers, each reducer task will launch the executable as a separate process then the reducer is initialized. As the reducer task runs, it converts its input key/values pairs into lines and feeds the lines to the stdin of the process. In the meantime, the reducer collects the line oriented outputs from the stdout of the process, converts each line into a key/value pair, which is collected as the output of the reducer. By default, the prefix of a line up to the first tab character is the key and the the rest of the line (excluding the tab character) is the value. However, this can be customized, as discussed later. </p><p> -This is the basis for the communication protocol between the map/reduce framework and the streaming mapper/reducer. +This is the basis for the communication protocol between the Map/Reduce framework and the streaming mapper/reducer. </p><p> You can supply a Java class as the mapper and/or the reducer. The above example is equivalent to: </p> @@ -109,7 +109,7 @@ <section> <title>Mapper-Only Jobs </title> <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. +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". </p> @@ -118,7 +118,7 @@ <section> <title>Specifying Other Plugins for Jobs </title> <p> -Just as with a normal map/reduce job, you can specify other plugins for a streaming job: +Just as with a normal Map/Reduce job, you can specify other plugins for a streaming job: </p> <source> -inputformat JavaClassName @@ -235,7 +235,7 @@ <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 DFS configuration for the job </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> @@ -282,7 +282,7 @@ <section> <title>Customizing the Way to Split Lines into Key/Value Pairs </title> <p> -As noted earlier, when the map/reduce framework reads a line from the stdout of the mapper, it splits the line into a key/value pair. By default, the prefix of the line up to the first tab character is the key and the the rest of the line (excluding the tab character) is the value. +As noted earlier, when the Map/Reduce framework reads a line from the stdout of the mapper, it splits the line into a key/value pair. By default, the prefix of the line up to the first tab character is the key and the the rest of the line (excluding the tab character) is the value. </p> <p> However, you can customize this default. You can specify a field separator other than the tab character (the default), and you can specify the nth (n >= 1) character rather than the first character in a line (the default) as the separator between the key and value. For example: @@ -308,7 +308,7 @@ <section> <title>A Useful Partitioner Class (secondary sort, the -partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner option) </title> <p> -Hadoop has a library class, org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner, that is useful for many applications. This class allows the map/reduce framework to partition the map outputs based on prefixes of keys, not the whole keys. For example: +Hadoop has a library class, org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner, that is useful for many applications. This class allows the Map/Reduce framework to partition the map outputs based on prefixes of keys, not the whole keys. For example: </p> <source>$HADOOP_HOME/bin/hadoop  jar \$HADOOP_HOME/hadoop-streaming.jar \
@@ -326,7 +326,7 @@
<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.
</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>-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.
</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>
@@ -456,7 +456,7 @@
As an example, consider the problem of zipping (compressing) a set of files across the hadoop cluster. You can achieve this using either of these methods:
</p><ol>
<li> Hadoop Streaming and custom mapper script:<ul>
-  <li> Generate a file containing the full DFS path of the input files. Each map task would get one file name as input.</li>
+  <li> Generate a file containing the full HDFS path of the input files. Each map task would get one file name as input.</li>
<li> Create a mapper script which, given a filename, will get the file to local disk, gzip the file and put it back in the desired output directory</li>
</ul></li>
`