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<byte[], byte[]> 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<byte[], byte[]> createCfRenameMap(Configuration conf) {
-<a class="jxr_linenumber" name="293" href="#293">293</a> Map<byte[], byte[]> 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<byte[],byte[]>(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"> * <p>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"> * <p>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"> * <pre>srcCf1:destCf1,srcCf2:destCf2,....</pre>. 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<String, String> 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<String,String> 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<? <strong class="jxr_keyword">extends</strong> Filter> clazz,
-<a class="jxr_linenumber" name="353" href="#353">353</a> List<String> 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 < 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<? <strong class="jxr_keyword">extends</strong> Filter> 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> && errorMsg.length() > 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] <tablename> <inputdir>"</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">"=<name of filter class>"</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">"=<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 < 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<byte[], byte[]> 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<byte[], byte[]> createCfRenameMap(Configuration conf) {
+<a class="jxr_linenumber" name="291" href="#291">291</a> Map<byte[], byte[]> 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<byte[],byte[]>(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"> * <p>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"> * <p>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"> * <pre>srcCf1:destCf1,srcCf2:destCf2,....</pre>. 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<String, String> 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<String,String> 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<? <strong class="jxr_keyword">extends</strong> Filter> clazz,
+<a class="jxr_linenumber" name="351" href="#351">351</a> List<String> 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 < 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<? <strong class="jxr_keyword">extends</strong> Filter> 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> && errorMsg.length() > 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] <tablename> <inputdir>"</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">"=<name of filter class>"</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">"=<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 < 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>