You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2013/04/06 08:06:09 UTC

svn commit: r1465198 [21/41] - in /hbase/hbase.apache.org/trunk: ./ css/ hbase-assembly/ images/ xref-test/ xref-test/org/apache/hadoop/hbase/ xref-test/org/apache/hadoop/hbase/client/ xref-test/org/apache/hadoop/hbase/client/replication/ xref-test/org...

Modified: hbase/hbase.apache.org/trunk/xref/org/apache/hadoop/hbase/client/package-frame.html
URL: http://svn.apache.org/viewvc/hbase/hbase.apache.org/trunk/xref/org/apache/hadoop/hbase/client/package-frame.html?rev=1465198&r1=1465197&r2=1465198&view=diff
==============================================================================
--- hbase/hbase.apache.org/trunk/xref/org/apache/hadoop/hbase/client/package-frame.html (original)
+++ hbase/hbase.apache.org/trunk/xref/org/apache/hadoop/hbase/client/package-frame.html Sat Apr  6 06:06:07 2013
@@ -217,6 +217,12 @@
             	<a href="ServerCallable.html" target="classFrame">ServerCallable</a>
           	</li>
           	          	<li>
+            	<a href="HConnectionManager.html" target="classFrame">ServerErrorTracker</a>
+          	</li>
+          	          	<li>
+            	<a href="HConnectionManager.html" target="classFrame">ServerErrors</a>
+          	</li>
+          	          	<li>
             	<a href="HTable.html" target="classFrame">SortedGet</a>
           	</li>
           	          	<li>

Modified: hbase/hbase.apache.org/trunk/xref/org/apache/hadoop/hbase/client/package-summary.html
URL: http://svn.apache.org/viewvc/hbase/hbase.apache.org/trunk/xref/org/apache/hadoop/hbase/client/package-summary.html?rev=1465198&r1=1465197&r2=1465198&view=diff
==============================================================================
--- hbase/hbase.apache.org/trunk/xref/org/apache/hadoop/hbase/client/package-summary.html (original)
+++ hbase/hbase.apache.org/trunk/xref/org/apache/hadoop/hbase/client/package-summary.html Sat Apr  6 06:06:07 2013
@@ -372,6 +372,16 @@
             	</tr>
 				            	<tr>
               		<td>
+                		<a href="HConnectionManager.html" target="classFrame">ServerErrorTracker</a>
+              		</td>
+            	</tr>
+				            	<tr>
+              		<td>
+                		<a href="HConnectionManager.html" target="classFrame">ServerErrors</a>
+              		</td>
+            	</tr>
+				            	<tr>
+              		<td>
                 		<a href="HTable.html" target="classFrame">SortedGet</a>
               		</td>
             	</tr>

Modified: hbase/hbase.apache.org/trunk/xref/org/apache/hadoop/hbase/mapreduce/Import.html
URL: http://svn.apache.org/viewvc/hbase/hbase.apache.org/trunk/xref/org/apache/hadoop/hbase/mapreduce/Import.html?rev=1465198&r1=1465197&r2=1465198&view=diff
==============================================================================
--- hbase/hbase.apache.org/trunk/xref/org/apache/hadoop/hbase/mapreduce/Import.html (original)
+++ hbase/hbase.apache.org/trunk/xref/org/apache/hadoop/hbase/mapreduce/Import.html Sat Apr  6 06:06:07 2013
@@ -260,211 +260,209 @@
 <a class="jxr_linenumber" name="250" href="#250">250</a>     <em class="jxr_comment">// apply the filter and skip this kv if the filter doesn't apply</em>
 <a class="jxr_linenumber" name="251" href="#251">251</a>     <strong class="jxr_keyword">if</strong> (filter != <strong class="jxr_keyword">null</strong>) {
 <a class="jxr_linenumber" name="252" href="#252">252</a>       Filter.ReturnCode code = filter.filterKeyValue(kv);
-<a class="jxr_linenumber" name="253" href="#253">253</a>       System.out.println(<span class="jxr_string">"Filter returned:"</span> + code);
+<a class="jxr_linenumber" name="253" href="#253">253</a>       LOG.debug(<span class="jxr_string">"Filter returned:"</span> + code);
 <a class="jxr_linenumber" name="254" href="#254">254</a>       <em class="jxr_comment">// if its not an accept type, then skip this kv</em>
 <a class="jxr_linenumber" name="255" href="#255">255</a>       <strong class="jxr_keyword">if</strong> (!(code.equals(Filter.ReturnCode.INCLUDE) || code
 <a class="jxr_linenumber" name="256" href="#256">256</a>           .equals(Filter.ReturnCode.INCLUDE_AND_NEXT_COL))) {
-<a class="jxr_linenumber" name="257" href="#257">257</a>         <strong class="jxr_keyword">if</strong> (LOG.isDebugEnabled()) {
-<a class="jxr_linenumber" name="258" href="#258">258</a>           System.out.println(<span class="jxr_string">"Skipping key: "</span> + kv + <span class="jxr_string">" from filter decision: "</span> + code);
-<a class="jxr_linenumber" name="259" href="#259">259</a>         }
-<a class="jxr_linenumber" name="260" href="#260">260</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="261" href="#261">261</a>       }
-<a class="jxr_linenumber" name="262" href="#262">262</a>     }
-<a class="jxr_linenumber" name="263" href="#263">263</a>     <strong class="jxr_keyword">return</strong> kv;
-<a class="jxr_linenumber" name="264" href="#264">264</a>   }
-<a class="jxr_linenumber" name="265" href="#265">265</a> 
-<a class="jxr_linenumber" name="266" href="#266">266</a>   <em class="jxr_comment">// helper: create a new KeyValue based on CF rename map</em>
-<a class="jxr_linenumber" name="267" href="#267">267</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <a href="../../../../../org/apache/hadoop/hbase/KeyValue.html">KeyValue</a> convertKv(<a href="../../../../../org/apache/hadoop/hbase/KeyValue.html">KeyValue</a> kv, Map&lt;byte[], byte[]&gt; cfRenameMap) {
-<a class="jxr_linenumber" name="268" href="#268">268</a>     <strong class="jxr_keyword">if</strong>(cfRenameMap != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="269" href="#269">269</a>       <em class="jxr_comment">// If there's a rename mapping for this CF, create a new KeyValue</em>
-<a class="jxr_linenumber" name="270" href="#270">270</a>       byte[] newCfName = cfRenameMap.get(kv.getFamily());
-<a class="jxr_linenumber" name="271" href="#271">271</a>       <strong class="jxr_keyword">if</strong>(newCfName != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="272" href="#272">272</a>           kv = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/KeyValue.html">KeyValue</a>(kv.getBuffer(), <em class="jxr_comment">// row buffer </em>
-<a class="jxr_linenumber" name="273" href="#273">273</a>                   kv.getRowOffset(),        <em class="jxr_comment">// row offset</em>
-<a class="jxr_linenumber" name="274" href="#274">274</a>                   kv.getRowLength(),        <em class="jxr_comment">// row length</em>
-<a class="jxr_linenumber" name="275" href="#275">275</a>                   newCfName,                <em class="jxr_comment">// CF buffer</em>
-<a class="jxr_linenumber" name="276" href="#276">276</a>                   0,                        <em class="jxr_comment">// CF offset </em>
-<a class="jxr_linenumber" name="277" href="#277">277</a>                   newCfName.length,         <em class="jxr_comment">// CF length </em>
-<a class="jxr_linenumber" name="278" href="#278">278</a>                   kv.getBuffer(),           <em class="jxr_comment">// qualifier buffer</em>
-<a class="jxr_linenumber" name="279" href="#279">279</a>                   kv.getQualifierOffset(),  <em class="jxr_comment">// qualifier offset</em>
-<a class="jxr_linenumber" name="280" href="#280">280</a>                   kv.getQualifierLength(),  <em class="jxr_comment">// qualifier length</em>
-<a class="jxr_linenumber" name="281" href="#281">281</a>                   kv.getTimestamp(),        <em class="jxr_comment">// timestamp</em>
-<a class="jxr_linenumber" name="282" href="#282">282</a>                   KeyValue.Type.codeToType(kv.getType()), <em class="jxr_comment">// KV Type</em>
-<a class="jxr_linenumber" name="283" href="#283">283</a>                   kv.getBuffer(),           <em class="jxr_comment">// value buffer </em>
-<a class="jxr_linenumber" name="284" href="#284">284</a>                   kv.getValueOffset(),      <em class="jxr_comment">// value offset</em>
-<a class="jxr_linenumber" name="285" href="#285">285</a>                   kv.getValueLength());     <em class="jxr_comment">// value length</em>
-<a class="jxr_linenumber" name="286" href="#286">286</a>       }
-<a class="jxr_linenumber" name="287" href="#287">287</a>     }
-<a class="jxr_linenumber" name="288" href="#288">288</a>     <strong class="jxr_keyword">return</strong> kv;
-<a class="jxr_linenumber" name="289" href="#289">289</a>   }
-<a class="jxr_linenumber" name="290" href="#290">290</a> 
-<a class="jxr_linenumber" name="291" href="#291">291</a>   <em class="jxr_comment">// helper: make a map from sourceCfName to destCfName by parsing a config key</em>
-<a class="jxr_linenumber" name="292" href="#292">292</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> Map&lt;byte[], byte[]&gt; createCfRenameMap(Configuration conf) {
-<a class="jxr_linenumber" name="293" href="#293">293</a>     Map&lt;byte[], byte[]&gt; cfRenameMap = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="294" href="#294">294</a>     String allMappingsPropVal = conf.get(CF_RENAME_PROP);
-<a class="jxr_linenumber" name="295" href="#295">295</a>     <strong class="jxr_keyword">if</strong>(allMappingsPropVal != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="296" href="#296">296</a>       <em class="jxr_comment">// The conf value format should be sourceCf1:destCf1,sourceCf2:destCf2,...</em>
-<a class="jxr_linenumber" name="297" href="#297">297</a>       String[] allMappings = allMappingsPropVal.split(<span class="jxr_string">","</span>);
-<a class="jxr_linenumber" name="298" href="#298">298</a>       <strong class="jxr_keyword">for</strong> (String mapping: allMappings) {
-<a class="jxr_linenumber" name="299" href="#299">299</a>         <strong class="jxr_keyword">if</strong>(cfRenameMap == <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="300" href="#300">300</a>             cfRenameMap = <strong class="jxr_keyword">new</strong> TreeMap&lt;byte[],byte[]&gt;(Bytes.BYTES_COMPARATOR);
-<a class="jxr_linenumber" name="301" href="#301">301</a>         }
-<a class="jxr_linenumber" name="302" href="#302">302</a>         String [] srcAndDest = mapping.split(<span class="jxr_string">":"</span>);
-<a class="jxr_linenumber" name="303" href="#303">303</a>         <strong class="jxr_keyword">if</strong>(srcAndDest.length != 2) {
-<a class="jxr_linenumber" name="304" href="#304">304</a>             <strong class="jxr_keyword">continue</strong>;
-<a class="jxr_linenumber" name="305" href="#305">305</a>         }
-<a class="jxr_linenumber" name="306" href="#306">306</a>         cfRenameMap.put(srcAndDest[0].getBytes(), srcAndDest[1].getBytes());
-<a class="jxr_linenumber" name="307" href="#307">307</a>       }
-<a class="jxr_linenumber" name="308" href="#308">308</a>     }
-<a class="jxr_linenumber" name="309" href="#309">309</a>     <strong class="jxr_keyword">return</strong> cfRenameMap;
-<a class="jxr_linenumber" name="310" href="#310">310</a>   }
-<a class="jxr_linenumber" name="311" href="#311">311</a> 
-<a class="jxr_linenumber" name="312" href="#312">312</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="313" href="#313">313</a> <em class="jxr_javadoccomment">   * &lt;p&gt;Sets a configuration property with key {@link #CF_RENAME_PROP} in conf that tells</em>
-<a class="jxr_linenumber" name="314" href="#314">314</a> <em class="jxr_javadoccomment">   * the mapper how to rename column families.</em>
-<a class="jxr_linenumber" name="315" href="#315">315</a> <em class="jxr_javadoccomment">   * </em>
-<a class="jxr_linenumber" name="316" href="#316">316</a> <em class="jxr_javadoccomment">   * &lt;p&gt;Alternately, instead of calling this function, you could set the configuration key </em>
-<a class="jxr_linenumber" name="317" href="#317">317</a> <em class="jxr_javadoccomment">   * {@link #CF_RENAME_PROP} yourself. The value should look like </em>
-<a class="jxr_linenumber" name="318" href="#318">318</a> <em class="jxr_javadoccomment">   * &lt;pre&gt;srcCf1:destCf1,srcCf2:destCf2,....&lt;/pre&gt;. This would have the same effect on</em>
-<a class="jxr_linenumber" name="319" href="#319">319</a> <em class="jxr_javadoccomment">   * the mapper behavior.</em>
-<a class="jxr_linenumber" name="320" href="#320">320</a> <em class="jxr_javadoccomment">   * </em>
-<a class="jxr_linenumber" name="321" href="#321">321</a> <em class="jxr_javadoccomment">   * @param conf the Configuration in which the {@link #CF_RENAME_PROP} key will be</em>
-<a class="jxr_linenumber" name="322" href="#322">322</a> <em class="jxr_javadoccomment">   *  set</em>
-<a class="jxr_linenumber" name="323" href="#323">323</a> <em class="jxr_javadoccomment">   * @param renameMap a mapping from source CF names to destination CF names</em>
-<a class="jxr_linenumber" name="324" href="#324">324</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="325" href="#325">325</a>   <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> configureCfRenaming(Configuration conf, 
-<a class="jxr_linenumber" name="326" href="#326">326</a>           Map&lt;String, String&gt; renameMap) {
-<a class="jxr_linenumber" name="327" href="#327">327</a>     StringBuilder sb = <strong class="jxr_keyword">new</strong> StringBuilder();
-<a class="jxr_linenumber" name="328" href="#328">328</a>     <strong class="jxr_keyword">for</strong>(Map.Entry&lt;String,String&gt; entry: renameMap.entrySet()) {
-<a class="jxr_linenumber" name="329" href="#329">329</a>       String sourceCf = entry.getKey();
-<a class="jxr_linenumber" name="330" href="#330">330</a>       String destCf = entry.getValue();
-<a class="jxr_linenumber" name="331" href="#331">331</a> 
-<a class="jxr_linenumber" name="332" href="#332">332</a>       <strong class="jxr_keyword">if</strong>(sourceCf.contains(<span class="jxr_string">":"</span>) || sourceCf.contains(<span class="jxr_string">","</span>) || 
-<a class="jxr_linenumber" name="333" href="#333">333</a>               destCf.contains(<span class="jxr_string">":"</span>) || destCf.contains(<span class="jxr_string">","</span>)) {
-<a class="jxr_linenumber" name="334" href="#334">334</a>         <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalArgumentException(<span class="jxr_string">"Illegal character in CF names: "</span> 
-<a class="jxr_linenumber" name="335" href="#335">335</a>               + sourceCf + <span class="jxr_string">", "</span> + destCf);
-<a class="jxr_linenumber" name="336" href="#336">336</a>       }
-<a class="jxr_linenumber" name="337" href="#337">337</a> 
-<a class="jxr_linenumber" name="338" href="#338">338</a>       <strong class="jxr_keyword">if</strong>(sb.length() != 0) {
-<a class="jxr_linenumber" name="339" href="#339">339</a>         sb.append(<span class="jxr_string">","</span>);
-<a class="jxr_linenumber" name="340" href="#340">340</a>       }
-<a class="jxr_linenumber" name="341" href="#341">341</a>       sb.append(sourceCf + <span class="jxr_string">":"</span> + destCf);
-<a class="jxr_linenumber" name="342" href="#342">342</a>     }
-<a class="jxr_linenumber" name="343" href="#343">343</a>     conf.set(CF_RENAME_PROP, sb.toString());
-<a class="jxr_linenumber" name="344" href="#344">344</a>   }
-<a class="jxr_linenumber" name="345" href="#345">345</a> 
-<a class="jxr_linenumber" name="346" href="#346">346</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="347" href="#347">347</a> <em class="jxr_javadoccomment">   * Add a Filter to be instantiated on import</em>
-<a class="jxr_linenumber" name="348" href="#348">348</a> <em class="jxr_javadoccomment">   * @param conf Configuration to update (will be passed to the job)</em>
-<a class="jxr_linenumber" name="349" href="#349">349</a> <em class="jxr_javadoccomment">   * @param clazz {@link Filter} subclass to instantiate on the server.</em>
-<a class="jxr_linenumber" name="350" href="#350">350</a> <em class="jxr_javadoccomment">   * @param args List of arguments to pass to the filter on instantiation</em>
-<a class="jxr_linenumber" name="351" href="#351">351</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="352" href="#352">352</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> addFilterAndArguments(Configuration conf, Class&lt;? <strong class="jxr_keyword">extends</strong> Filter&gt; clazz,
-<a class="jxr_linenumber" name="353" href="#353">353</a>       List&lt;String&gt; args) {
-<a class="jxr_linenumber" name="354" href="#354">354</a>     conf.set(Import.FILTER_CLASS_CONF_KEY, clazz.getName());
-<a class="jxr_linenumber" name="355" href="#355">355</a> 
-<a class="jxr_linenumber" name="356" href="#356">356</a>     <em class="jxr_comment">// build the param string for the key</em>
-<a class="jxr_linenumber" name="357" href="#357">357</a>     StringBuilder builder = <strong class="jxr_keyword">new</strong> StringBuilder();
-<a class="jxr_linenumber" name="358" href="#358">358</a>     <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; args.size(); i++) {
-<a class="jxr_linenumber" name="359" href="#359">359</a>       String arg = args.get(i);
-<a class="jxr_linenumber" name="360" href="#360">360</a>       builder.append(arg);
-<a class="jxr_linenumber" name="361" href="#361">361</a>       <strong class="jxr_keyword">if</strong> (i != args.size() - 1) {
-<a class="jxr_linenumber" name="362" href="#362">362</a>         builder.append(<span class="jxr_string">","</span>);
-<a class="jxr_linenumber" name="363" href="#363">363</a>       }
-<a class="jxr_linenumber" name="364" href="#364">364</a>     }
-<a class="jxr_linenumber" name="365" href="#365">365</a>     conf.set(Import.FILTER_ARGS_CONF_KEY, builder.toString());
-<a class="jxr_linenumber" name="366" href="#366">366</a>   }
-<a class="jxr_linenumber" name="367" href="#367">367</a> 
-<a class="jxr_linenumber" name="368" href="#368">368</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="369" href="#369">369</a> <em class="jxr_javadoccomment">   * Sets up the actual job.</em>
-<a class="jxr_linenumber" name="370" href="#370">370</a> <em class="jxr_javadoccomment">   * @param conf The current configuration.</em>
-<a class="jxr_linenumber" name="371" href="#371">371</a> <em class="jxr_javadoccomment">   * @param args The command line parameters.</em>
-<a class="jxr_linenumber" name="372" href="#372">372</a> <em class="jxr_javadoccomment">   * @return The newly created job.</em>
-<a class="jxr_linenumber" name="373" href="#373">373</a> <em class="jxr_javadoccomment">   * @throws IOException When setting up the job fails.</em>
-<a class="jxr_linenumber" name="374" href="#374">374</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="375" href="#375">375</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> Job createSubmittableJob(Configuration conf, String[] args)
-<a class="jxr_linenumber" name="376" href="#376">376</a>   <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="377" href="#377">377</a>     String tableName = args[0];
-<a class="jxr_linenumber" name="378" href="#378">378</a>     Path inputDir = <strong class="jxr_keyword">new</strong> Path(args[1]);
-<a class="jxr_linenumber" name="379" href="#379">379</a>     Job job = <strong class="jxr_keyword">new</strong> Job(conf, NAME + <span class="jxr_string">"_"</span> + tableName);
-<a class="jxr_linenumber" name="380" href="#380">380</a>     job.setJarByClass(Importer.<strong class="jxr_keyword">class</strong>);
-<a class="jxr_linenumber" name="381" href="#381">381</a>     FileInputFormat.setInputPaths(job, inputDir);
-<a class="jxr_linenumber" name="382" href="#382">382</a>     job.setInputFormatClass(SequenceFileInputFormat.<strong class="jxr_keyword">class</strong>);
-<a class="jxr_linenumber" name="383" href="#383">383</a>     String hfileOutPath = conf.get(BULK_OUTPUT_CONF_KEY);
-<a class="jxr_linenumber" name="384" href="#384">384</a> 
-<a class="jxr_linenumber" name="385" href="#385">385</a>     <em class="jxr_comment">// make sure we get the filter in the jars</em>
-<a class="jxr_linenumber" name="386" href="#386">386</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="387" href="#387">387</a>       Class&lt;? <strong class="jxr_keyword">extends</strong> Filter&gt; filter = conf.getClass(FILTER_CLASS_CONF_KEY, <strong class="jxr_keyword">null</strong>, Filter.<strong class="jxr_keyword">class</strong>);
-<a class="jxr_linenumber" name="388" href="#388">388</a>       <strong class="jxr_keyword">if</strong> (filter != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="389" href="#389">389</a>         TableMapReduceUtil.addDependencyJars(conf, filter);
-<a class="jxr_linenumber" name="390" href="#390">390</a>       }
-<a class="jxr_linenumber" name="391" href="#391">391</a>     } <strong class="jxr_keyword">catch</strong> (Exception e) {
-<a class="jxr_linenumber" name="392" href="#392">392</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(e);
-<a class="jxr_linenumber" name="393" href="#393">393</a>     }
-<a class="jxr_linenumber" name="394" href="#394">394</a> 
-<a class="jxr_linenumber" name="395" href="#395">395</a>     <strong class="jxr_keyword">if</strong> (hfileOutPath != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="396" href="#396">396</a>       job.setMapperClass(KeyValueImporter.<strong class="jxr_keyword">class</strong>);
-<a class="jxr_linenumber" name="397" href="#397">397</a>       <a href="../../../../../org/apache/hadoop/hbase/client/HTable.html">HTable</a> table = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/client/HTable.html">HTable</a>(conf, tableName);
-<a class="jxr_linenumber" name="398" href="#398">398</a>       job.setReducerClass(KeyValueSortReducer.<strong class="jxr_keyword">class</strong>);
-<a class="jxr_linenumber" name="399" href="#399">399</a>       Path outputDir = <strong class="jxr_keyword">new</strong> Path(hfileOutPath);
-<a class="jxr_linenumber" name="400" href="#400">400</a>       FileOutputFormat.setOutputPath(job, outputDir);
-<a class="jxr_linenumber" name="401" href="#401">401</a>       job.setMapOutputKeyClass(ImmutableBytesWritable.<strong class="jxr_keyword">class</strong>);
-<a class="jxr_linenumber" name="402" href="#402">402</a>       job.setMapOutputValueClass(KeyValue.<strong class="jxr_keyword">class</strong>);
-<a class="jxr_linenumber" name="403" href="#403">403</a>       HFileOutputFormat.configureIncrementalLoad(job, table);
-<a class="jxr_linenumber" name="404" href="#404">404</a>       TableMapReduceUtil.addDependencyJars(job.getConfiguration(),
-<a class="jxr_linenumber" name="405" href="#405">405</a>           com.google.common.base.Preconditions.<strong class="jxr_keyword">class</strong>);
-<a class="jxr_linenumber" name="406" href="#406">406</a>     } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="407" href="#407">407</a>       <em class="jxr_comment">// No reducers.  Just write straight to table.  Call initTableReducerJob</em>
-<a class="jxr_linenumber" name="408" href="#408">408</a>       <em class="jxr_comment">// because it sets up the TableOutputFormat.</em>
-<a class="jxr_linenumber" name="409" href="#409">409</a>       job.setMapperClass(Importer.<strong class="jxr_keyword">class</strong>);
-<a class="jxr_linenumber" name="410" href="#410">410</a>       TableMapReduceUtil.initTableReducerJob(tableName, <strong class="jxr_keyword">null</strong>, job);
-<a class="jxr_linenumber" name="411" href="#411">411</a>       job.setNumReduceTasks(0);
-<a class="jxr_linenumber" name="412" href="#412">412</a>     }
-<a class="jxr_linenumber" name="413" href="#413">413</a>     <strong class="jxr_keyword">return</strong> job;
-<a class="jxr_linenumber" name="414" href="#414">414</a>   }
-<a class="jxr_linenumber" name="415" href="#415">415</a> 
-<a class="jxr_linenumber" name="416" href="#416">416</a>   <em class="jxr_comment">/*</em>
-<a class="jxr_linenumber" name="417" href="#417">417</a> <em class="jxr_comment">   * @param errorMsg Error message.  Can be null.</em>
-<a class="jxr_linenumber" name="418" href="#418">418</a> <em class="jxr_comment">   */</em>
-<a class="jxr_linenumber" name="419" href="#419">419</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> usage(<strong class="jxr_keyword">final</strong> String errorMsg) {
-<a class="jxr_linenumber" name="420" href="#420">420</a>     <strong class="jxr_keyword">if</strong> (errorMsg != <strong class="jxr_keyword">null</strong> &amp;&amp; errorMsg.length() &gt; 0) {
-<a class="jxr_linenumber" name="421" href="#421">421</a>       System.err.println(<span class="jxr_string">"ERROR: "</span> + errorMsg);
-<a class="jxr_linenumber" name="422" href="#422">422</a>     }
-<a class="jxr_linenumber" name="423" href="#423">423</a>     System.err.println(<span class="jxr_string">"Usage: Import [options] &lt;tablename&gt; &lt;inputdir&gt;"</span>);
-<a class="jxr_linenumber" name="424" href="#424">424</a>     System.err.println(<span class="jxr_string">"By default Import will load data directly into HBase. To instead generate"</span>);
-<a class="jxr_linenumber" name="425" href="#425">425</a>     System.err.println(<span class="jxr_string">"HFiles of data to prepare for a bulk data load, pass the option:"</span>);
-<a class="jxr_linenumber" name="426" href="#426">426</a>     System.err.println(<span class="jxr_string">"  -D"</span> + BULK_OUTPUT_CONF_KEY + <span class="jxr_string">"=/path/for/output"</span>);
-<a class="jxr_linenumber" name="427" href="#427">427</a>     System.err
-<a class="jxr_linenumber" name="428" href="#428">428</a>         .println(<span class="jxr_string">" To apply a generic org.apache.hadoop.hbase.filter.Filter to the input, use"</span>);
-<a class="jxr_linenumber" name="429" href="#429">429</a>     System.err.println(<span class="jxr_string">"  -D"</span> + FILTER_CLASS_CONF_KEY + <span class="jxr_string">"=&lt;name of filter class&gt;"</span>);
-<a class="jxr_linenumber" name="430" href="#430">430</a>     System.err.println(<span class="jxr_string">"  -D"</span> + FILTER_ARGS_CONF_KEY + <span class="jxr_string">"=&lt;comma separated list of args for filter"</span>);
-<a class="jxr_linenumber" name="431" href="#431">431</a>     System.err.println(<span class="jxr_string">" NOTE: The filter will be applied BEFORE doing key renames via the "</span>
-<a class="jxr_linenumber" name="432" href="#432">432</a>         + CF_RENAME_PROP + <span class="jxr_string">" property. Futher, filters will only use the"</span>
-<a class="jxr_linenumber" name="433" href="#433">433</a>         + <span class="jxr_string">"Filter#filterKeyValue(KeyValue) method to determine if the KeyValue should be added;"</span>
-<a class="jxr_linenumber" name="434" href="#434">434</a>         + <span class="jxr_string">" Filter.ReturnCode#INCLUDE and #INCLUDE_AND_NEXT_COL will be considered as including "</span>
-<a class="jxr_linenumber" name="435" href="#435">435</a>         + <span class="jxr_string">"the KeyValue."</span>);
-<a class="jxr_linenumber" name="436" href="#436">436</a>     System.err.println(<span class="jxr_string">"For performance consider the following options:\n"</span>
-<a class="jxr_linenumber" name="437" href="#437">437</a>         + <span class="jxr_string">"  -Dmapred.map.tasks.speculative.execution=false\n"</span>
-<a class="jxr_linenumber" name="438" href="#438">438</a>         + <span class="jxr_string">"  -Dmapred.reduce.tasks.speculative.execution=false"</span>);
-<a class="jxr_linenumber" name="439" href="#439">439</a>   }
-<a class="jxr_linenumber" name="440" href="#440">440</a> 
-<a class="jxr_linenumber" name="441" href="#441">441</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="442" href="#442">442</a> <em class="jxr_javadoccomment">   * Main entry point.</em>
-<a class="jxr_linenumber" name="443" href="#443">443</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="444" href="#444">444</a> <em class="jxr_javadoccomment">   * @param args  The command line parameters.</em>
-<a class="jxr_linenumber" name="445" href="#445">445</a> <em class="jxr_javadoccomment">   * @throws Exception When running the job fails.</em>
-<a class="jxr_linenumber" name="446" href="#446">446</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="447" href="#447">447</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> main(String[] args) <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="448" href="#448">448</a>     Configuration conf = HBaseConfiguration.create();
-<a class="jxr_linenumber" name="449" href="#449">449</a>     String[] otherArgs = <strong class="jxr_keyword">new</strong> GenericOptionsParser(conf, args).getRemainingArgs();
-<a class="jxr_linenumber" name="450" href="#450">450</a>     <strong class="jxr_keyword">if</strong> (otherArgs.length &lt; 2) {
-<a class="jxr_linenumber" name="451" href="#451">451</a>       usage(<span class="jxr_string">"Wrong number of arguments: "</span> + otherArgs.length);
-<a class="jxr_linenumber" name="452" href="#452">452</a>       System.exit(-1);
-<a class="jxr_linenumber" name="453" href="#453">453</a>     }
-<a class="jxr_linenumber" name="454" href="#454">454</a>     Job job = createSubmittableJob(conf, otherArgs);
-<a class="jxr_linenumber" name="455" href="#455">455</a>     System.exit(job.waitForCompletion(<strong class="jxr_keyword">true</strong>) ? 0 : 1);
-<a class="jxr_linenumber" name="456" href="#456">456</a>   }
-<a class="jxr_linenumber" name="457" href="#457">457</a> }
+<a class="jxr_linenumber" name="257" href="#257">257</a>         LOG.debug(<span class="jxr_string">"Skipping key: "</span> + kv + <span class="jxr_string">" from filter decision: "</span> + code);
+<a class="jxr_linenumber" name="258" href="#258">258</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="259" href="#259">259</a>       }
+<a class="jxr_linenumber" name="260" href="#260">260</a>     }
+<a class="jxr_linenumber" name="261" href="#261">261</a>     <strong class="jxr_keyword">return</strong> kv;
+<a class="jxr_linenumber" name="262" href="#262">262</a>   }
+<a class="jxr_linenumber" name="263" href="#263">263</a> 
+<a class="jxr_linenumber" name="264" href="#264">264</a>   <em class="jxr_comment">// helper: create a new KeyValue based on CF rename map</em>
+<a class="jxr_linenumber" name="265" href="#265">265</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <a href="../../../../../org/apache/hadoop/hbase/KeyValue.html">KeyValue</a> convertKv(<a href="../../../../../org/apache/hadoop/hbase/KeyValue.html">KeyValue</a> kv, Map&lt;byte[], byte[]&gt; cfRenameMap) {
+<a class="jxr_linenumber" name="266" href="#266">266</a>     <strong class="jxr_keyword">if</strong>(cfRenameMap != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="267" href="#267">267</a>       <em class="jxr_comment">// If there's a rename mapping for this CF, create a new KeyValue</em>
+<a class="jxr_linenumber" name="268" href="#268">268</a>       byte[] newCfName = cfRenameMap.get(kv.getFamily());
+<a class="jxr_linenumber" name="269" href="#269">269</a>       <strong class="jxr_keyword">if</strong>(newCfName != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="270" href="#270">270</a>           kv = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/KeyValue.html">KeyValue</a>(kv.getBuffer(), <em class="jxr_comment">// row buffer </em>
+<a class="jxr_linenumber" name="271" href="#271">271</a>                   kv.getRowOffset(),        <em class="jxr_comment">// row offset</em>
+<a class="jxr_linenumber" name="272" href="#272">272</a>                   kv.getRowLength(),        <em class="jxr_comment">// row length</em>
+<a class="jxr_linenumber" name="273" href="#273">273</a>                   newCfName,                <em class="jxr_comment">// CF buffer</em>
+<a class="jxr_linenumber" name="274" href="#274">274</a>                   0,                        <em class="jxr_comment">// CF offset </em>
+<a class="jxr_linenumber" name="275" href="#275">275</a>                   newCfName.length,         <em class="jxr_comment">// CF length </em>
+<a class="jxr_linenumber" name="276" href="#276">276</a>                   kv.getBuffer(),           <em class="jxr_comment">// qualifier buffer</em>
+<a class="jxr_linenumber" name="277" href="#277">277</a>                   kv.getQualifierOffset(),  <em class="jxr_comment">// qualifier offset</em>
+<a class="jxr_linenumber" name="278" href="#278">278</a>                   kv.getQualifierLength(),  <em class="jxr_comment">// qualifier length</em>
+<a class="jxr_linenumber" name="279" href="#279">279</a>                   kv.getTimestamp(),        <em class="jxr_comment">// timestamp</em>
+<a class="jxr_linenumber" name="280" href="#280">280</a>                   KeyValue.Type.codeToType(kv.getType()), <em class="jxr_comment">// KV Type</em>
+<a class="jxr_linenumber" name="281" href="#281">281</a>                   kv.getBuffer(),           <em class="jxr_comment">// value buffer </em>
+<a class="jxr_linenumber" name="282" href="#282">282</a>                   kv.getValueOffset(),      <em class="jxr_comment">// value offset</em>
+<a class="jxr_linenumber" name="283" href="#283">283</a>                   kv.getValueLength());     <em class="jxr_comment">// value length</em>
+<a class="jxr_linenumber" name="284" href="#284">284</a>       }
+<a class="jxr_linenumber" name="285" href="#285">285</a>     }
+<a class="jxr_linenumber" name="286" href="#286">286</a>     <strong class="jxr_keyword">return</strong> kv;
+<a class="jxr_linenumber" name="287" href="#287">287</a>   }
+<a class="jxr_linenumber" name="288" href="#288">288</a> 
+<a class="jxr_linenumber" name="289" href="#289">289</a>   <em class="jxr_comment">// helper: make a map from sourceCfName to destCfName by parsing a config key</em>
+<a class="jxr_linenumber" name="290" href="#290">290</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> Map&lt;byte[], byte[]&gt; createCfRenameMap(Configuration conf) {
+<a class="jxr_linenumber" name="291" href="#291">291</a>     Map&lt;byte[], byte[]&gt; cfRenameMap = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="292" href="#292">292</a>     String allMappingsPropVal = conf.get(CF_RENAME_PROP);
+<a class="jxr_linenumber" name="293" href="#293">293</a>     <strong class="jxr_keyword">if</strong>(allMappingsPropVal != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="294" href="#294">294</a>       <em class="jxr_comment">// The conf value format should be sourceCf1:destCf1,sourceCf2:destCf2,...</em>
+<a class="jxr_linenumber" name="295" href="#295">295</a>       String[] allMappings = allMappingsPropVal.split(<span class="jxr_string">","</span>);
+<a class="jxr_linenumber" name="296" href="#296">296</a>       <strong class="jxr_keyword">for</strong> (String mapping: allMappings) {
+<a class="jxr_linenumber" name="297" href="#297">297</a>         <strong class="jxr_keyword">if</strong>(cfRenameMap == <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="298" href="#298">298</a>             cfRenameMap = <strong class="jxr_keyword">new</strong> TreeMap&lt;byte[],byte[]&gt;(Bytes.BYTES_COMPARATOR);
+<a class="jxr_linenumber" name="299" href="#299">299</a>         }
+<a class="jxr_linenumber" name="300" href="#300">300</a>         String [] srcAndDest = mapping.split(<span class="jxr_string">":"</span>);
+<a class="jxr_linenumber" name="301" href="#301">301</a>         <strong class="jxr_keyword">if</strong>(srcAndDest.length != 2) {
+<a class="jxr_linenumber" name="302" href="#302">302</a>             <strong class="jxr_keyword">continue</strong>;
+<a class="jxr_linenumber" name="303" href="#303">303</a>         }
+<a class="jxr_linenumber" name="304" href="#304">304</a>         cfRenameMap.put(srcAndDest[0].getBytes(), srcAndDest[1].getBytes());
+<a class="jxr_linenumber" name="305" href="#305">305</a>       }
+<a class="jxr_linenumber" name="306" href="#306">306</a>     }
+<a class="jxr_linenumber" name="307" href="#307">307</a>     <strong class="jxr_keyword">return</strong> cfRenameMap;
+<a class="jxr_linenumber" name="308" href="#308">308</a>   }
+<a class="jxr_linenumber" name="309" href="#309">309</a> 
+<a class="jxr_linenumber" name="310" href="#310">310</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="311" href="#311">311</a> <em class="jxr_javadoccomment">   * &lt;p&gt;Sets a configuration property with key {@link #CF_RENAME_PROP} in conf that tells</em>
+<a class="jxr_linenumber" name="312" href="#312">312</a> <em class="jxr_javadoccomment">   * the mapper how to rename column families.</em>
+<a class="jxr_linenumber" name="313" href="#313">313</a> <em class="jxr_javadoccomment">   * </em>
+<a class="jxr_linenumber" name="314" href="#314">314</a> <em class="jxr_javadoccomment">   * &lt;p&gt;Alternately, instead of calling this function, you could set the configuration key </em>
+<a class="jxr_linenumber" name="315" href="#315">315</a> <em class="jxr_javadoccomment">   * {@link #CF_RENAME_PROP} yourself. The value should look like </em>
+<a class="jxr_linenumber" name="316" href="#316">316</a> <em class="jxr_javadoccomment">   * &lt;pre&gt;srcCf1:destCf1,srcCf2:destCf2,....&lt;/pre&gt;. This would have the same effect on</em>
+<a class="jxr_linenumber" name="317" href="#317">317</a> <em class="jxr_javadoccomment">   * the mapper behavior.</em>
+<a class="jxr_linenumber" name="318" href="#318">318</a> <em class="jxr_javadoccomment">   * </em>
+<a class="jxr_linenumber" name="319" href="#319">319</a> <em class="jxr_javadoccomment">   * @param conf the Configuration in which the {@link #CF_RENAME_PROP} key will be</em>
+<a class="jxr_linenumber" name="320" href="#320">320</a> <em class="jxr_javadoccomment">   *  set</em>
+<a class="jxr_linenumber" name="321" href="#321">321</a> <em class="jxr_javadoccomment">   * @param renameMap a mapping from source CF names to destination CF names</em>
+<a class="jxr_linenumber" name="322" href="#322">322</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="323" href="#323">323</a>   <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> configureCfRenaming(Configuration conf, 
+<a class="jxr_linenumber" name="324" href="#324">324</a>           Map&lt;String, String&gt; renameMap) {
+<a class="jxr_linenumber" name="325" href="#325">325</a>     StringBuilder sb = <strong class="jxr_keyword">new</strong> StringBuilder();
+<a class="jxr_linenumber" name="326" href="#326">326</a>     <strong class="jxr_keyword">for</strong>(Map.Entry&lt;String,String&gt; entry: renameMap.entrySet()) {
+<a class="jxr_linenumber" name="327" href="#327">327</a>       String sourceCf = entry.getKey();
+<a class="jxr_linenumber" name="328" href="#328">328</a>       String destCf = entry.getValue();
+<a class="jxr_linenumber" name="329" href="#329">329</a> 
+<a class="jxr_linenumber" name="330" href="#330">330</a>       <strong class="jxr_keyword">if</strong>(sourceCf.contains(<span class="jxr_string">":"</span>) || sourceCf.contains(<span class="jxr_string">","</span>) || 
+<a class="jxr_linenumber" name="331" href="#331">331</a>               destCf.contains(<span class="jxr_string">":"</span>) || destCf.contains(<span class="jxr_string">","</span>)) {
+<a class="jxr_linenumber" name="332" href="#332">332</a>         <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalArgumentException(<span class="jxr_string">"Illegal character in CF names: "</span> 
+<a class="jxr_linenumber" name="333" href="#333">333</a>               + sourceCf + <span class="jxr_string">", "</span> + destCf);
+<a class="jxr_linenumber" name="334" href="#334">334</a>       }
+<a class="jxr_linenumber" name="335" href="#335">335</a> 
+<a class="jxr_linenumber" name="336" href="#336">336</a>       <strong class="jxr_keyword">if</strong>(sb.length() != 0) {
+<a class="jxr_linenumber" name="337" href="#337">337</a>         sb.append(<span class="jxr_string">","</span>);
+<a class="jxr_linenumber" name="338" href="#338">338</a>       }
+<a class="jxr_linenumber" name="339" href="#339">339</a>       sb.append(sourceCf + <span class="jxr_string">":"</span> + destCf);
+<a class="jxr_linenumber" name="340" href="#340">340</a>     }
+<a class="jxr_linenumber" name="341" href="#341">341</a>     conf.set(CF_RENAME_PROP, sb.toString());
+<a class="jxr_linenumber" name="342" href="#342">342</a>   }
+<a class="jxr_linenumber" name="343" href="#343">343</a> 
+<a class="jxr_linenumber" name="344" href="#344">344</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="345" href="#345">345</a> <em class="jxr_javadoccomment">   * Add a Filter to be instantiated on import</em>
+<a class="jxr_linenumber" name="346" href="#346">346</a> <em class="jxr_javadoccomment">   * @param conf Configuration to update (will be passed to the job)</em>
+<a class="jxr_linenumber" name="347" href="#347">347</a> <em class="jxr_javadoccomment">   * @param clazz {@link Filter} subclass to instantiate on the server.</em>
+<a class="jxr_linenumber" name="348" href="#348">348</a> <em class="jxr_javadoccomment">   * @param args List of arguments to pass to the filter on instantiation</em>
+<a class="jxr_linenumber" name="349" href="#349">349</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="350" href="#350">350</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> addFilterAndArguments(Configuration conf, Class&lt;? <strong class="jxr_keyword">extends</strong> Filter&gt; clazz,
+<a class="jxr_linenumber" name="351" href="#351">351</a>       List&lt;String&gt; args) {
+<a class="jxr_linenumber" name="352" href="#352">352</a>     conf.set(Import.FILTER_CLASS_CONF_KEY, clazz.getName());
+<a class="jxr_linenumber" name="353" href="#353">353</a> 
+<a class="jxr_linenumber" name="354" href="#354">354</a>     <em class="jxr_comment">// build the param string for the key</em>
+<a class="jxr_linenumber" name="355" href="#355">355</a>     StringBuilder builder = <strong class="jxr_keyword">new</strong> StringBuilder();
+<a class="jxr_linenumber" name="356" href="#356">356</a>     <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; args.size(); i++) {
+<a class="jxr_linenumber" name="357" href="#357">357</a>       String arg = args.get(i);
+<a class="jxr_linenumber" name="358" href="#358">358</a>       builder.append(arg);
+<a class="jxr_linenumber" name="359" href="#359">359</a>       <strong class="jxr_keyword">if</strong> (i != args.size() - 1) {
+<a class="jxr_linenumber" name="360" href="#360">360</a>         builder.append(<span class="jxr_string">","</span>);
+<a class="jxr_linenumber" name="361" href="#361">361</a>       }
+<a class="jxr_linenumber" name="362" href="#362">362</a>     }
+<a class="jxr_linenumber" name="363" href="#363">363</a>     conf.set(Import.FILTER_ARGS_CONF_KEY, builder.toString());
+<a class="jxr_linenumber" name="364" href="#364">364</a>   }
+<a class="jxr_linenumber" name="365" href="#365">365</a> 
+<a class="jxr_linenumber" name="366" href="#366">366</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="367" href="#367">367</a> <em class="jxr_javadoccomment">   * Sets up the actual job.</em>
+<a class="jxr_linenumber" name="368" href="#368">368</a> <em class="jxr_javadoccomment">   * @param conf The current configuration.</em>
+<a class="jxr_linenumber" name="369" href="#369">369</a> <em class="jxr_javadoccomment">   * @param args The command line parameters.</em>
+<a class="jxr_linenumber" name="370" href="#370">370</a> <em class="jxr_javadoccomment">   * @return The newly created job.</em>
+<a class="jxr_linenumber" name="371" href="#371">371</a> <em class="jxr_javadoccomment">   * @throws IOException When setting up the job fails.</em>
+<a class="jxr_linenumber" name="372" href="#372">372</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="373" href="#373">373</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> Job createSubmittableJob(Configuration conf, String[] args)
+<a class="jxr_linenumber" name="374" href="#374">374</a>   <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="375" href="#375">375</a>     String tableName = args[0];
+<a class="jxr_linenumber" name="376" href="#376">376</a>     Path inputDir = <strong class="jxr_keyword">new</strong> Path(args[1]);
+<a class="jxr_linenumber" name="377" href="#377">377</a>     Job job = <strong class="jxr_keyword">new</strong> Job(conf, NAME + <span class="jxr_string">"_"</span> + tableName);
+<a class="jxr_linenumber" name="378" href="#378">378</a>     job.setJarByClass(Importer.<strong class="jxr_keyword">class</strong>);
+<a class="jxr_linenumber" name="379" href="#379">379</a>     FileInputFormat.setInputPaths(job, inputDir);
+<a class="jxr_linenumber" name="380" href="#380">380</a>     job.setInputFormatClass(SequenceFileInputFormat.<strong class="jxr_keyword">class</strong>);
+<a class="jxr_linenumber" name="381" href="#381">381</a>     String hfileOutPath = conf.get(BULK_OUTPUT_CONF_KEY);
+<a class="jxr_linenumber" name="382" href="#382">382</a> 
+<a class="jxr_linenumber" name="383" href="#383">383</a>     <em class="jxr_comment">// make sure we get the filter in the jars</em>
+<a class="jxr_linenumber" name="384" href="#384">384</a>     <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="385" href="#385">385</a>       Class&lt;? <strong class="jxr_keyword">extends</strong> Filter&gt; filter = conf.getClass(FILTER_CLASS_CONF_KEY, <strong class="jxr_keyword">null</strong>, Filter.<strong class="jxr_keyword">class</strong>);
+<a class="jxr_linenumber" name="386" href="#386">386</a>       <strong class="jxr_keyword">if</strong> (filter != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="387" href="#387">387</a>         TableMapReduceUtil.addDependencyJars(conf, filter);
+<a class="jxr_linenumber" name="388" href="#388">388</a>       }
+<a class="jxr_linenumber" name="389" href="#389">389</a>     } <strong class="jxr_keyword">catch</strong> (Exception e) {
+<a class="jxr_linenumber" name="390" href="#390">390</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(e);
+<a class="jxr_linenumber" name="391" href="#391">391</a>     }
+<a class="jxr_linenumber" name="392" href="#392">392</a> 
+<a class="jxr_linenumber" name="393" href="#393">393</a>     <strong class="jxr_keyword">if</strong> (hfileOutPath != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="394" href="#394">394</a>       job.setMapperClass(KeyValueImporter.<strong class="jxr_keyword">class</strong>);
+<a class="jxr_linenumber" name="395" href="#395">395</a>       <a href="../../../../../org/apache/hadoop/hbase/client/HTable.html">HTable</a> table = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/client/HTable.html">HTable</a>(conf, tableName);
+<a class="jxr_linenumber" name="396" href="#396">396</a>       job.setReducerClass(KeyValueSortReducer.<strong class="jxr_keyword">class</strong>);
+<a class="jxr_linenumber" name="397" href="#397">397</a>       Path outputDir = <strong class="jxr_keyword">new</strong> Path(hfileOutPath);
+<a class="jxr_linenumber" name="398" href="#398">398</a>       FileOutputFormat.setOutputPath(job, outputDir);
+<a class="jxr_linenumber" name="399" href="#399">399</a>       job.setMapOutputKeyClass(ImmutableBytesWritable.<strong class="jxr_keyword">class</strong>);
+<a class="jxr_linenumber" name="400" href="#400">400</a>       job.setMapOutputValueClass(KeyValue.<strong class="jxr_keyword">class</strong>);
+<a class="jxr_linenumber" name="401" href="#401">401</a>       HFileOutputFormat.configureIncrementalLoad(job, table);
+<a class="jxr_linenumber" name="402" href="#402">402</a>       TableMapReduceUtil.addDependencyJars(job.getConfiguration(),
+<a class="jxr_linenumber" name="403" href="#403">403</a>           com.google.common.base.Preconditions.<strong class="jxr_keyword">class</strong>);
+<a class="jxr_linenumber" name="404" href="#404">404</a>     } <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="405" href="#405">405</a>       <em class="jxr_comment">// No reducers.  Just write straight to table.  Call initTableReducerJob</em>
+<a class="jxr_linenumber" name="406" href="#406">406</a>       <em class="jxr_comment">// because it sets up the TableOutputFormat.</em>
+<a class="jxr_linenumber" name="407" href="#407">407</a>       job.setMapperClass(Importer.<strong class="jxr_keyword">class</strong>);
+<a class="jxr_linenumber" name="408" href="#408">408</a>       TableMapReduceUtil.initTableReducerJob(tableName, <strong class="jxr_keyword">null</strong>, job);
+<a class="jxr_linenumber" name="409" href="#409">409</a>       job.setNumReduceTasks(0);
+<a class="jxr_linenumber" name="410" href="#410">410</a>     }
+<a class="jxr_linenumber" name="411" href="#411">411</a>     <strong class="jxr_keyword">return</strong> job;
+<a class="jxr_linenumber" name="412" href="#412">412</a>   }
+<a class="jxr_linenumber" name="413" href="#413">413</a> 
+<a class="jxr_linenumber" name="414" href="#414">414</a>   <em class="jxr_comment">/*</em>
+<a class="jxr_linenumber" name="415" href="#415">415</a> <em class="jxr_comment">   * @param errorMsg Error message.  Can be null.</em>
+<a class="jxr_linenumber" name="416" href="#416">416</a> <em class="jxr_comment">   */</em>
+<a class="jxr_linenumber" name="417" href="#417">417</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> usage(<strong class="jxr_keyword">final</strong> String errorMsg) {
+<a class="jxr_linenumber" name="418" href="#418">418</a>     <strong class="jxr_keyword">if</strong> (errorMsg != <strong class="jxr_keyword">null</strong> &amp;&amp; errorMsg.length() &gt; 0) {
+<a class="jxr_linenumber" name="419" href="#419">419</a>       System.err.println(<span class="jxr_string">"ERROR: "</span> + errorMsg);
+<a class="jxr_linenumber" name="420" href="#420">420</a>     }
+<a class="jxr_linenumber" name="421" href="#421">421</a>     System.err.println(<span class="jxr_string">"Usage: Import [options] &lt;tablename&gt; &lt;inputdir&gt;"</span>);
+<a class="jxr_linenumber" name="422" href="#422">422</a>     System.err.println(<span class="jxr_string">"By default Import will load data directly into HBase. To instead generate"</span>);
+<a class="jxr_linenumber" name="423" href="#423">423</a>     System.err.println(<span class="jxr_string">"HFiles of data to prepare for a bulk data load, pass the option:"</span>);
+<a class="jxr_linenumber" name="424" href="#424">424</a>     System.err.println(<span class="jxr_string">"  -D"</span> + BULK_OUTPUT_CONF_KEY + <span class="jxr_string">"=/path/for/output"</span>);
+<a class="jxr_linenumber" name="425" href="#425">425</a>     System.err
+<a class="jxr_linenumber" name="426" href="#426">426</a>         .println(<span class="jxr_string">" To apply a generic org.apache.hadoop.hbase.filter.Filter to the input, use"</span>);
+<a class="jxr_linenumber" name="427" href="#427">427</a>     System.err.println(<span class="jxr_string">"  -D"</span> + FILTER_CLASS_CONF_KEY + <span class="jxr_string">"=&lt;name of filter class&gt;"</span>);
+<a class="jxr_linenumber" name="428" href="#428">428</a>     System.err.println(<span class="jxr_string">"  -D"</span> + FILTER_ARGS_CONF_KEY + <span class="jxr_string">"=&lt;comma separated list of args for filter"</span>);
+<a class="jxr_linenumber" name="429" href="#429">429</a>     System.err.println(<span class="jxr_string">" NOTE: The filter will be applied BEFORE doing key renames via the "</span>
+<a class="jxr_linenumber" name="430" href="#430">430</a>         + CF_RENAME_PROP + <span class="jxr_string">" property. Futher, filters will only use the"</span>
+<a class="jxr_linenumber" name="431" href="#431">431</a>         + <span class="jxr_string">"Filter#filterKeyValue(KeyValue) method to determine if the KeyValue should be added;"</span>
+<a class="jxr_linenumber" name="432" href="#432">432</a>         + <span class="jxr_string">" Filter.ReturnCode#INCLUDE and #INCLUDE_AND_NEXT_COL will be considered as including "</span>
+<a class="jxr_linenumber" name="433" href="#433">433</a>         + <span class="jxr_string">"the KeyValue."</span>);
+<a class="jxr_linenumber" name="434" href="#434">434</a>     System.err.println(<span class="jxr_string">"For performance consider the following options:\n"</span>
+<a class="jxr_linenumber" name="435" href="#435">435</a>         + <span class="jxr_string">"  -Dmapred.map.tasks.speculative.execution=false\n"</span>
+<a class="jxr_linenumber" name="436" href="#436">436</a>         + <span class="jxr_string">"  -Dmapred.reduce.tasks.speculative.execution=false"</span>);
+<a class="jxr_linenumber" name="437" href="#437">437</a>   }
+<a class="jxr_linenumber" name="438" href="#438">438</a> 
+<a class="jxr_linenumber" name="439" href="#439">439</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="440" href="#440">440</a> <em class="jxr_javadoccomment">   * Main entry point.</em>
+<a class="jxr_linenumber" name="441" href="#441">441</a> <em class="jxr_javadoccomment">   *</em>
+<a class="jxr_linenumber" name="442" href="#442">442</a> <em class="jxr_javadoccomment">   * @param args  The command line parameters.</em>
+<a class="jxr_linenumber" name="443" href="#443">443</a> <em class="jxr_javadoccomment">   * @throws Exception When running the job fails.</em>
+<a class="jxr_linenumber" name="444" href="#444">444</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="445" href="#445">445</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> main(String[] args) <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="446" href="#446">446</a>     Configuration conf = HBaseConfiguration.create();
+<a class="jxr_linenumber" name="447" href="#447">447</a>     String[] otherArgs = <strong class="jxr_keyword">new</strong> GenericOptionsParser(conf, args).getRemainingArgs();
+<a class="jxr_linenumber" name="448" href="#448">448</a>     <strong class="jxr_keyword">if</strong> (otherArgs.length &lt; 2) {
+<a class="jxr_linenumber" name="449" href="#449">449</a>       usage(<span class="jxr_string">"Wrong number of arguments: "</span> + otherArgs.length);
+<a class="jxr_linenumber" name="450" href="#450">450</a>       System.exit(-1);
+<a class="jxr_linenumber" name="451" href="#451">451</a>     }
+<a class="jxr_linenumber" name="452" href="#452">452</a>     Job job = createSubmittableJob(conf, otherArgs);
+<a class="jxr_linenumber" name="453" href="#453">453</a>     System.exit(job.waitForCompletion(<strong class="jxr_keyword">true</strong>) ? 0 : 1);
+<a class="jxr_linenumber" name="454" href="#454">454</a>   }
+<a class="jxr_linenumber" name="455" href="#455">455</a> }
 </pre>
 <hr/><div id="footer">This page was automatically generated by <a href="http://maven.apache.org/">Maven</a></div></body>
 </html>