You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by mi...@apache.org on 2016/02/06 02:34:15 UTC

[04/17] hbase-site git commit: Published site at 9c832109458ced70d0db701e7f58ef41b1df0fc7.

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9bc06f81/xref-test/org/apache/hadoop/hbase/mapreduce/TestImportTsv.html
----------------------------------------------------------------------
diff --git a/xref-test/org/apache/hadoop/hbase/mapreduce/TestImportTsv.html b/xref-test/org/apache/hadoop/hbase/mapreduce/TestImportTsv.html
index 4b3da36..c39d096 100644
--- a/xref-test/org/apache/hadoop/hbase/mapreduce/TestImportTsv.html
+++ b/xref-test/org/apache/hadoop/hbase/mapreduce/TestImportTsv.html
@@ -373,199 +373,212 @@
 <a class="jxr_linenumber" name="363" href="#363">363</a>     doMROnTableTest(util, tn, FAMILY, data, args, 1, 4);
 <a class="jxr_linenumber" name="364" href="#364">364</a>     util.deleteTable(tn);
 <a class="jxr_linenumber" name="365" href="#365">365</a>   }
-<a class="jxr_linenumber" name="366" href="#366">366</a> 
-<a class="jxr_linenumber" name="367" href="#367">367</a>   <strong class="jxr_keyword">private</strong> Tool doMROnTableTest(String data, <strong class="jxr_keyword">int</strong> valueMultiplier) <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="368" href="#368">368</a>     <strong class="jxr_keyword">return</strong> doMROnTableTest(util, tn, FAMILY, data, args, valueMultiplier,-1);
-<a class="jxr_linenumber" name="369" href="#369">369</a>   }
-<a class="jxr_linenumber" name="370" href="#370">370</a> 
-<a class="jxr_linenumber" name="371" href="#371">371</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">static</strong> Tool doMROnTableTest(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html">HBaseTestingUtility</a> util, TableName table,
-<a class="jxr_linenumber" name="372" href="#372">372</a>       String family, String data, Map&lt;String, String&gt; args) <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="373" href="#373">373</a>     <strong class="jxr_keyword">return</strong> doMROnTableTest(util, table, family, data, args, 1,-1);
-<a class="jxr_linenumber" name="374" href="#374">374</a>   }
-<a class="jxr_linenumber" name="375" href="#375">375</a> 
-<a class="jxr_linenumber" name="376" href="#376">376</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="377" href="#377">377</a> <em class="jxr_javadoccomment">   * Run an ImportTsv job and perform basic validation on the results.</em>
-<a class="jxr_linenumber" name="378" href="#378">378</a> <em class="jxr_javadoccomment">   * Returns the ImportTsv &lt;code&gt;Tool&lt;/code&gt; instance so that other tests can</em>
-<a class="jxr_linenumber" name="379" href="#379">379</a> <em class="jxr_javadoccomment">   * inspect it for further validation as necessary. This method is static to</em>
-<a class="jxr_linenumber" name="380" href="#380">380</a> <em class="jxr_javadoccomment">   * insure non-reliance on instance's util/conf facilities.</em>
-<a class="jxr_linenumber" name="381" href="#381">381</a> <em class="jxr_javadoccomment">   * @param args Any arguments to pass BEFORE inputFile path is appended.</em>
-<a class="jxr_linenumber" name="382" href="#382">382</a> <em class="jxr_javadoccomment">   * @return The Tool instance used to run the test.</em>
-<a class="jxr_linenumber" name="383" href="#383">383</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="366" href="#366">366</a>   
+<a class="jxr_linenumber" name="367" href="#367">367</a>   @Test
+<a class="jxr_linenumber" name="368" href="#368">368</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testSkipEmptyColumns() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="369" href="#369">369</a>     Path bulkOutputPath = <strong class="jxr_keyword">new</strong> Path(util.getDataTestDirOnTestFS(tn.getNameAsString()), <span class="jxr_string">"hfiles"</span>);
+<a class="jxr_linenumber" name="370" href="#370">370</a>     args.put(ImportTsv.BULK_OUTPUT_CONF_KEY, bulkOutputPath.toString());
+<a class="jxr_linenumber" name="371" href="#371">371</a>     args.put(ImportTsv.COLUMNS_CONF_KEY, <span class="jxr_string">"HBASE_ROW_KEY,HBASE_TS_KEY,FAM:A,FAM:B"</span>);
+<a class="jxr_linenumber" name="372" href="#372">372</a>     args.put(ImportTsv.SEPARATOR_CONF_KEY, <span class="jxr_string">","</span>);
+<a class="jxr_linenumber" name="373" href="#373">373</a>     args.put(ImportTsv.SKIP_EMPTY_COLUMNS, <span class="jxr_string">"true"</span>);
+<a class="jxr_linenumber" name="374" href="#374">374</a>     <em class="jxr_comment">// 2 Rows of data as input. Both rows are valid and only 3 columns are no-empty among 4</em>
+<a class="jxr_linenumber" name="375" href="#375">375</a>     String data = <span class="jxr_string">"KEY,1234,VALUE1,VALUE2\nKEY,1235,,VALUE2\n"</span>;
+<a class="jxr_linenumber" name="376" href="#376">376</a>     doMROnTableTest(util, tn, FAMILY, data, args, 1, 3);
+<a class="jxr_linenumber" name="377" href="#377">377</a>     util.deleteTable(tn);
+<a class="jxr_linenumber" name="378" href="#378">378</a>   }
+<a class="jxr_linenumber" name="379" href="#379">379</a> 
+<a class="jxr_linenumber" name="380" href="#380">380</a>   <strong class="jxr_keyword">private</strong> Tool doMROnTableTest(String data, <strong class="jxr_keyword">int</strong> valueMultiplier) <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="381" href="#381">381</a>     <strong class="jxr_keyword">return</strong> doMROnTableTest(util, tn, FAMILY, data, args, valueMultiplier,-1);
+<a class="jxr_linenumber" name="382" href="#382">382</a>   }
+<a class="jxr_linenumber" name="383" href="#383">383</a> 
 <a class="jxr_linenumber" name="384" href="#384">384</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">static</strong> Tool doMROnTableTest(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html">HBaseTestingUtility</a> util, TableName table,
-<a class="jxr_linenumber" name="385" href="#385">385</a>       String family, String data, Map&lt;String, String&gt; args, <strong class="jxr_keyword">int</strong> valueMultiplier,<strong class="jxr_keyword">int</strong> expectedKVCount)
-<a class="jxr_linenumber" name="386" href="#386">386</a>   <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="387" href="#387">387</a>     Configuration conf = <strong class="jxr_keyword">new</strong> Configuration(util.getConfiguration());
+<a class="jxr_linenumber" name="385" href="#385">385</a>       String family, String data, Map&lt;String, String&gt; args) <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="386" href="#386">386</a>     <strong class="jxr_keyword">return</strong> doMROnTableTest(util, table, family, data, args, 1,-1);
+<a class="jxr_linenumber" name="387" href="#387">387</a>   }
 <a class="jxr_linenumber" name="388" href="#388">388</a> 
-<a class="jxr_linenumber" name="389" href="#389">389</a>     <em class="jxr_comment">// populate input file</em>
-<a class="jxr_linenumber" name="390" href="#390">390</a>     FileSystem fs = FileSystem.get(conf);
-<a class="jxr_linenumber" name="391" href="#391">391</a>     Path inputPath = fs.makeQualified(
-<a class="jxr_linenumber" name="392" href="#392">392</a>             <strong class="jxr_keyword">new</strong> Path(util.getDataTestDirOnTestFS(table.getNameAsString()), <span class="jxr_string">"input.dat"</span>));
-<a class="jxr_linenumber" name="393" href="#393">393</a>     FSDataOutputStream op = fs.create(inputPath, <strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="394" href="#394">394</a>     <strong class="jxr_keyword">if</strong> (data == <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="395" href="#395">395</a>       data = <span class="jxr_string">"KEY\u001bVALUE1\u001bVALUE2\n"</span>;
-<a class="jxr_linenumber" name="396" href="#396">396</a>     }
-<a class="jxr_linenumber" name="397" href="#397">397</a>     op.write(Bytes.toBytes(data));
-<a class="jxr_linenumber" name="398" href="#398">398</a>     op.close();
-<a class="jxr_linenumber" name="399" href="#399">399</a>     LOG.debug(String.format(<span class="jxr_string">"Wrote test data to file: %s"</span>, inputPath));
-<a class="jxr_linenumber" name="400" href="#400">400</a> 
-<a class="jxr_linenumber" name="401" href="#401">401</a>     <strong class="jxr_keyword">if</strong> (conf.getBoolean(FORCE_COMBINER_CONF, <strong class="jxr_keyword">true</strong>)) {
-<a class="jxr_linenumber" name="402" href="#402">402</a>       LOG.debug(<span class="jxr_string">"Forcing combiner."</span>);
-<a class="jxr_linenumber" name="403" href="#403">403</a>       conf.setInt(<span class="jxr_string">"mapreduce.map.combine.minspills"</span>, 1);
-<a class="jxr_linenumber" name="404" href="#404">404</a>     }
-<a class="jxr_linenumber" name="405" href="#405">405</a> 
-<a class="jxr_linenumber" name="406" href="#406">406</a>     <em class="jxr_comment">// Build args array.</em>
-<a class="jxr_linenumber" name="407" href="#407">407</a>     String[] argsArray = <strong class="jxr_keyword">new</strong> String[args.size() + 2];
-<a class="jxr_linenumber" name="408" href="#408">408</a>     Iterator it = args.entrySet().iterator();
-<a class="jxr_linenumber" name="409" href="#409">409</a>     <strong class="jxr_keyword">int</strong> i = 0;
-<a class="jxr_linenumber" name="410" href="#410">410</a>     <strong class="jxr_keyword">while</strong> (it.hasNext()) {
-<a class="jxr_linenumber" name="411" href="#411">411</a>       Map.Entry pair = (Map.Entry) it.next();
-<a class="jxr_linenumber" name="412" href="#412">412</a>       argsArray[i] = <span class="jxr_string">"-D"</span> + pair.getKey() + <span class="jxr_string">"="</span> + pair.getValue();
-<a class="jxr_linenumber" name="413" href="#413">413</a>       i++;
-<a class="jxr_linenumber" name="414" href="#414">414</a>     }
-<a class="jxr_linenumber" name="415" href="#415">415</a>     argsArray[i] = table.getNameAsString();
-<a class="jxr_linenumber" name="416" href="#416">416</a>     argsArray[i + 1] = inputPath.toString();
-<a class="jxr_linenumber" name="417" href="#417">417</a> 
-<a class="jxr_linenumber" name="418" href="#418">418</a>     <em class="jxr_comment">// run the import</em>
-<a class="jxr_linenumber" name="419" href="#419">419</a>     Tool tool = <strong class="jxr_keyword">new</strong> ImportTsv();
-<a class="jxr_linenumber" name="420" href="#420">420</a>     LOG.debug(<span class="jxr_string">"Running ImportTsv with arguments: "</span> + argsArray);
-<a class="jxr_linenumber" name="421" href="#421">421</a>     assertEquals(0, ToolRunner.run(conf, tool, argsArray));
-<a class="jxr_linenumber" name="422" href="#422">422</a> 
-<a class="jxr_linenumber" name="423" href="#423">423</a>     <em class="jxr_comment">// Perform basic validation. If the input args did not include</em>
-<a class="jxr_linenumber" name="424" href="#424">424</a>     <em class="jxr_comment">// ImportTsv.BULK_OUTPUT_CONF_KEY then validate data in the table.</em>
-<a class="jxr_linenumber" name="425" href="#425">425</a>     <em class="jxr_comment">// Otherwise, validate presence of hfiles.</em>
-<a class="jxr_linenumber" name="426" href="#426">426</a>     <strong class="jxr_keyword">boolean</strong> isDryRun = args.containsKey(ImportTsv.DRY_RUN_CONF_KEY) &amp;&amp;
-<a class="jxr_linenumber" name="427" href="#427">427</a>         <span class="jxr_string">"true"</span>.equalsIgnoreCase(args.get(ImportTsv.DRY_RUN_CONF_KEY));
-<a class="jxr_linenumber" name="428" href="#428">428</a>     <strong class="jxr_keyword">if</strong> (args.containsKey(ImportTsv.BULK_OUTPUT_CONF_KEY)) {
-<a class="jxr_linenumber" name="429" href="#429">429</a>       <strong class="jxr_keyword">if</strong> (isDryRun) {
-<a class="jxr_linenumber" name="430" href="#430">430</a>         assertFalse(String.format(<span class="jxr_string">"Dry run mode, %s should not have been created."</span>,
-<a class="jxr_linenumber" name="431" href="#431">431</a>                  ImportTsv.BULK_OUTPUT_CONF_KEY),
-<a class="jxr_linenumber" name="432" href="#432">432</a>             fs.exists(<strong class="jxr_keyword">new</strong> Path(ImportTsv.BULK_OUTPUT_CONF_KEY)));
-<a class="jxr_linenumber" name="433" href="#433">433</a>       } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="434" href="#434">434</a>         validateHFiles(fs, args.get(ImportTsv.BULK_OUTPUT_CONF_KEY), family,expectedKVCount);
-<a class="jxr_linenumber" name="435" href="#435">435</a>       }
-<a class="jxr_linenumber" name="436" href="#436">436</a>     } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="437" href="#437">437</a>       validateTable(conf, table, family, valueMultiplier, isDryRun);
-<a class="jxr_linenumber" name="438" href="#438">438</a>     }
-<a class="jxr_linenumber" name="439" href="#439">439</a> 
-<a class="jxr_linenumber" name="440" href="#440">440</a>     <strong class="jxr_keyword">if</strong> (conf.getBoolean(DELETE_AFTER_LOAD_CONF, <strong class="jxr_keyword">true</strong>)) {
-<a class="jxr_linenumber" name="441" href="#441">441</a>       LOG.debug(<span class="jxr_string">"Deleting test subdirectory"</span>);
-<a class="jxr_linenumber" name="442" href="#442">442</a>       util.cleanupDataTestDirOnTestFS(table.getNameAsString());
-<a class="jxr_linenumber" name="443" href="#443">443</a>     }
-<a class="jxr_linenumber" name="444" href="#444">444</a>     <strong class="jxr_keyword">return</strong> tool;
-<a class="jxr_linenumber" name="445" href="#445">445</a>   }
-<a class="jxr_linenumber" name="446" href="#446">446</a> 
-<a class="jxr_linenumber" name="447" href="#447">447</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="448" href="#448">448</a> <em class="jxr_javadoccomment">   * Confirm ImportTsv via data in online table.</em>
-<a class="jxr_linenumber" name="449" href="#449">449</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="450" href="#450">450</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> validateTable(Configuration conf, TableName tableName,
-<a class="jxr_linenumber" name="451" href="#451">451</a>       String family, <strong class="jxr_keyword">int</strong> valueMultiplier, <strong class="jxr_keyword">boolean</strong> isDryRun) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="389" href="#389">389</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="390" href="#390">390</a> <em class="jxr_javadoccomment">   * Run an ImportTsv job and perform basic validation on the results.</em>
+<a class="jxr_linenumber" name="391" href="#391">391</a> <em class="jxr_javadoccomment">   * Returns the ImportTsv &lt;code&gt;Tool&lt;/code&gt; instance so that other tests can</em>
+<a class="jxr_linenumber" name="392" href="#392">392</a> <em class="jxr_javadoccomment">   * inspect it for further validation as necessary. This method is static to</em>
+<a class="jxr_linenumber" name="393" href="#393">393</a> <em class="jxr_javadoccomment">   * insure non-reliance on instance's util/conf facilities.</em>
+<a class="jxr_linenumber" name="394" href="#394">394</a> <em class="jxr_javadoccomment">   * @param args Any arguments to pass BEFORE inputFile path is appended.</em>
+<a class="jxr_linenumber" name="395" href="#395">395</a> <em class="jxr_javadoccomment">   * @return The Tool instance used to run the test.</em>
+<a class="jxr_linenumber" name="396" href="#396">396</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="397" href="#397">397</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">static</strong> Tool doMROnTableTest(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html">HBaseTestingUtility</a> util, TableName table,
+<a class="jxr_linenumber" name="398" href="#398">398</a>       String family, String data, Map&lt;String, String&gt; args, <strong class="jxr_keyword">int</strong> valueMultiplier,<strong class="jxr_keyword">int</strong> expectedKVCount)
+<a class="jxr_linenumber" name="399" href="#399">399</a>   <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="400" href="#400">400</a>     Configuration conf = <strong class="jxr_keyword">new</strong> Configuration(util.getConfiguration());
+<a class="jxr_linenumber" name="401" href="#401">401</a> 
+<a class="jxr_linenumber" name="402" href="#402">402</a>     <em class="jxr_comment">// populate input file</em>
+<a class="jxr_linenumber" name="403" href="#403">403</a>     FileSystem fs = FileSystem.get(conf);
+<a class="jxr_linenumber" name="404" href="#404">404</a>     Path inputPath = fs.makeQualified(
+<a class="jxr_linenumber" name="405" href="#405">405</a>             <strong class="jxr_keyword">new</strong> Path(util.getDataTestDirOnTestFS(table.getNameAsString()), <span class="jxr_string">"input.dat"</span>));
+<a class="jxr_linenumber" name="406" href="#406">406</a>     FSDataOutputStream op = fs.create(inputPath, <strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="407" href="#407">407</a>     <strong class="jxr_keyword">if</strong> (data == <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="408" href="#408">408</a>       data = <span class="jxr_string">"KEY\u001bVALUE1\u001bVALUE2\n"</span>;
+<a class="jxr_linenumber" name="409" href="#409">409</a>     }
+<a class="jxr_linenumber" name="410" href="#410">410</a>     op.write(Bytes.toBytes(data));
+<a class="jxr_linenumber" name="411" href="#411">411</a>     op.close();
+<a class="jxr_linenumber" name="412" href="#412">412</a>     LOG.debug(String.format(<span class="jxr_string">"Wrote test data to file: %s"</span>, inputPath));
+<a class="jxr_linenumber" name="413" href="#413">413</a> 
+<a class="jxr_linenumber" name="414" href="#414">414</a>     <strong class="jxr_keyword">if</strong> (conf.getBoolean(FORCE_COMBINER_CONF, <strong class="jxr_keyword">true</strong>)) {
+<a class="jxr_linenumber" name="415" href="#415">415</a>       LOG.debug(<span class="jxr_string">"Forcing combiner."</span>);
+<a class="jxr_linenumber" name="416" href="#416">416</a>       conf.setInt(<span class="jxr_string">"mapreduce.map.combine.minspills"</span>, 1);
+<a class="jxr_linenumber" name="417" href="#417">417</a>     }
+<a class="jxr_linenumber" name="418" href="#418">418</a> 
+<a class="jxr_linenumber" name="419" href="#419">419</a>     <em class="jxr_comment">// Build args array.</em>
+<a class="jxr_linenumber" name="420" href="#420">420</a>     String[] argsArray = <strong class="jxr_keyword">new</strong> String[args.size() + 2];
+<a class="jxr_linenumber" name="421" href="#421">421</a>     Iterator it = args.entrySet().iterator();
+<a class="jxr_linenumber" name="422" href="#422">422</a>     <strong class="jxr_keyword">int</strong> i = 0;
+<a class="jxr_linenumber" name="423" href="#423">423</a>     <strong class="jxr_keyword">while</strong> (it.hasNext()) {
+<a class="jxr_linenumber" name="424" href="#424">424</a>       Map.Entry pair = (Map.Entry) it.next();
+<a class="jxr_linenumber" name="425" href="#425">425</a>       argsArray[i] = <span class="jxr_string">"-D"</span> + pair.getKey() + <span class="jxr_string">"="</span> + pair.getValue();
+<a class="jxr_linenumber" name="426" href="#426">426</a>       i++;
+<a class="jxr_linenumber" name="427" href="#427">427</a>     }
+<a class="jxr_linenumber" name="428" href="#428">428</a>     argsArray[i] = table.getNameAsString();
+<a class="jxr_linenumber" name="429" href="#429">429</a>     argsArray[i + 1] = inputPath.toString();
+<a class="jxr_linenumber" name="430" href="#430">430</a> 
+<a class="jxr_linenumber" name="431" href="#431">431</a>     <em class="jxr_comment">// run the import</em>
+<a class="jxr_linenumber" name="432" href="#432">432</a>     Tool tool = <strong class="jxr_keyword">new</strong> ImportTsv();
+<a class="jxr_linenumber" name="433" href="#433">433</a>     LOG.debug(<span class="jxr_string">"Running ImportTsv with arguments: "</span> + argsArray);
+<a class="jxr_linenumber" name="434" href="#434">434</a>     assertEquals(0, ToolRunner.run(conf, tool, argsArray));
+<a class="jxr_linenumber" name="435" href="#435">435</a> 
+<a class="jxr_linenumber" name="436" href="#436">436</a>     <em class="jxr_comment">// Perform basic validation. If the input args did not include</em>
+<a class="jxr_linenumber" name="437" href="#437">437</a>     <em class="jxr_comment">// ImportTsv.BULK_OUTPUT_CONF_KEY then validate data in the table.</em>
+<a class="jxr_linenumber" name="438" href="#438">438</a>     <em class="jxr_comment">// Otherwise, validate presence of hfiles.</em>
+<a class="jxr_linenumber" name="439" href="#439">439</a>     <strong class="jxr_keyword">boolean</strong> isDryRun = args.containsKey(ImportTsv.DRY_RUN_CONF_KEY) &amp;&amp;
+<a class="jxr_linenumber" name="440" href="#440">440</a>         <span class="jxr_string">"true"</span>.equalsIgnoreCase(args.get(ImportTsv.DRY_RUN_CONF_KEY));
+<a class="jxr_linenumber" name="441" href="#441">441</a>     <strong class="jxr_keyword">if</strong> (args.containsKey(ImportTsv.BULK_OUTPUT_CONF_KEY)) {
+<a class="jxr_linenumber" name="442" href="#442">442</a>       <strong class="jxr_keyword">if</strong> (isDryRun) {
+<a class="jxr_linenumber" name="443" href="#443">443</a>         assertFalse(String.format(<span class="jxr_string">"Dry run mode, %s should not have been created."</span>,
+<a class="jxr_linenumber" name="444" href="#444">444</a>                  ImportTsv.BULK_OUTPUT_CONF_KEY),
+<a class="jxr_linenumber" name="445" href="#445">445</a>             fs.exists(<strong class="jxr_keyword">new</strong> Path(ImportTsv.BULK_OUTPUT_CONF_KEY)));
+<a class="jxr_linenumber" name="446" href="#446">446</a>       } <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="447" href="#447">447</a>         validateHFiles(fs, args.get(ImportTsv.BULK_OUTPUT_CONF_KEY), family,expectedKVCount);
+<a class="jxr_linenumber" name="448" href="#448">448</a>       }
+<a class="jxr_linenumber" name="449" href="#449">449</a>     } <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="450" href="#450">450</a>       validateTable(conf, table, family, valueMultiplier, isDryRun);
+<a class="jxr_linenumber" name="451" href="#451">451</a>     }
 <a class="jxr_linenumber" name="452" href="#452">452</a> 
-<a class="jxr_linenumber" name="453" href="#453">453</a>     LOG.debug(<span class="jxr_string">"Validating table."</span>);
-<a class="jxr_linenumber" name="454" href="#454">454</a>     Connection connection = ConnectionFactory.createConnection(conf);
-<a class="jxr_linenumber" name="455" href="#455">455</a>     Table table = connection.getTable(tableName);
-<a class="jxr_linenumber" name="456" href="#456">456</a>     <strong class="jxr_keyword">boolean</strong> verified = false;
-<a class="jxr_linenumber" name="457" href="#457">457</a>     <strong class="jxr_keyword">long</strong> pause = conf.getLong(<span class="jxr_string">"hbase.client.pause"</span>, 5 * 1000);
-<a class="jxr_linenumber" name="458" href="#458">458</a>     <strong class="jxr_keyword">int</strong> numRetries = conf.getInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER, 5);
-<a class="jxr_linenumber" name="459" href="#459">459</a>     <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; numRetries; i++) {
-<a class="jxr_linenumber" name="460" href="#460">460</a>       <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="461" href="#461">461</a>         Scan scan = <strong class="jxr_keyword">new</strong> Scan();
-<a class="jxr_linenumber" name="462" href="#462">462</a>         <em class="jxr_comment">// Scan entire family.</em>
-<a class="jxr_linenumber" name="463" href="#463">463</a>         scan.addFamily(Bytes.toBytes(family));
-<a class="jxr_linenumber" name="464" href="#464">464</a>         ResultScanner resScanner = table.getScanner(scan);
-<a class="jxr_linenumber" name="465" href="#465">465</a>         <strong class="jxr_keyword">int</strong> numRows = 0;
-<a class="jxr_linenumber" name="466" href="#466">466</a>         <strong class="jxr_keyword">for</strong> (Result res : resScanner) {
-<a class="jxr_linenumber" name="467" href="#467">467</a>           numRows++;
-<a class="jxr_linenumber" name="468" href="#468">468</a>           assertEquals(2, res.size());
-<a class="jxr_linenumber" name="469" href="#469">469</a>           List&lt;Cell&gt; kvs = res.listCells();
-<a class="jxr_linenumber" name="470" href="#470">470</a>           assertTrue(CellUtil.matchingRow(kvs.get(0), Bytes.toBytes(<span class="jxr_string">"KEY"</span>)));
-<a class="jxr_linenumber" name="471" href="#471">471</a>           assertTrue(CellUtil.matchingRow(kvs.get(1), Bytes.toBytes(<span class="jxr_string">"KEY"</span>)));
-<a class="jxr_linenumber" name="472" href="#472">472</a>           assertTrue(CellUtil.matchingValue(kvs.get(0), Bytes.toBytes(<span class="jxr_string">"VALUE"</span> + valueMultiplier)));
-<a class="jxr_linenumber" name="473" href="#473">473</a>           assertTrue(CellUtil.matchingValue(kvs.get(1), Bytes.toBytes(<span class="jxr_string">"VALUE"</span> + 2 * valueMultiplier)));
-<a class="jxr_linenumber" name="474" href="#474">474</a>           <em class="jxr_comment">// Only one result set is expected, so let it loop.</em>
-<a class="jxr_linenumber" name="475" href="#475">475</a>         }
-<a class="jxr_linenumber" name="476" href="#476">476</a>         <strong class="jxr_keyword">if</strong> (isDryRun) {
-<a class="jxr_linenumber" name="477" href="#477">477</a>           assertEquals(0, numRows);
-<a class="jxr_linenumber" name="478" href="#478">478</a>         } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="479" href="#479">479</a>           assertEquals(1, numRows);
-<a class="jxr_linenumber" name="480" href="#480">480</a>         }
-<a class="jxr_linenumber" name="481" href="#481">481</a>         verified = <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="482" href="#482">482</a>         <strong class="jxr_keyword">break</strong>;
-<a class="jxr_linenumber" name="483" href="#483">483</a>       } <strong class="jxr_keyword">catch</strong> (NullPointerException e) {
-<a class="jxr_linenumber" name="484" href="#484">484</a>         <em class="jxr_comment">// If here, a cell was empty. Presume its because updates came in</em>
-<a class="jxr_linenumber" name="485" href="#485">485</a>         <em class="jxr_comment">// after the scanner had been opened. Wait a while and retry.</em>
-<a class="jxr_linenumber" name="486" href="#486">486</a>       }
-<a class="jxr_linenumber" name="487" href="#487">487</a>       <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="488" href="#488">488</a>         Thread.sleep(pause);
-<a class="jxr_linenumber" name="489" href="#489">489</a>       } <strong class="jxr_keyword">catch</strong> (InterruptedException e) {
-<a class="jxr_linenumber" name="490" href="#490">490</a>         <em class="jxr_comment">// continue</em>
-<a class="jxr_linenumber" name="491" href="#491">491</a>       }
-<a class="jxr_linenumber" name="492" href="#492">492</a>     }
-<a class="jxr_linenumber" name="493" href="#493">493</a>     table.close();
-<a class="jxr_linenumber" name="494" href="#494">494</a>     connection.close();
-<a class="jxr_linenumber" name="495" href="#495">495</a>     assertTrue(verified);
-<a class="jxr_linenumber" name="496" href="#496">496</a>   }
-<a class="jxr_linenumber" name="497" href="#497">497</a> 
-<a class="jxr_linenumber" name="498" href="#498">498</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="499" href="#499">499</a> <em class="jxr_javadoccomment">   * Confirm ImportTsv via HFiles on fs.</em>
-<a class="jxr_linenumber" name="500" href="#500">500</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="501" href="#501">501</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> validateHFiles(FileSystem fs, String outputPath, String family,
-<a class="jxr_linenumber" name="502" href="#502">502</a>       <strong class="jxr_keyword">int</strong> expectedKVCount) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="503" href="#503">503</a>     <em class="jxr_comment">// validate number and content of output columns</em>
-<a class="jxr_linenumber" name="504" href="#504">504</a>     LOG.debug(<span class="jxr_string">"Validating HFiles."</span>);
-<a class="jxr_linenumber" name="505" href="#505">505</a>     Set&lt;String&gt; configFamilies = <strong class="jxr_keyword">new</strong> HashSet&lt;String&gt;();
-<a class="jxr_linenumber" name="506" href="#506">506</a>     configFamilies.add(family);
-<a class="jxr_linenumber" name="507" href="#507">507</a>     Set&lt;String&gt; foundFamilies = <strong class="jxr_keyword">new</strong> HashSet&lt;String&gt;();
-<a class="jxr_linenumber" name="508" href="#508">508</a>     <strong class="jxr_keyword">int</strong> actualKVCount = 0;
-<a class="jxr_linenumber" name="509" href="#509">509</a>     <strong class="jxr_keyword">for</strong> (FileStatus cfStatus : fs.listStatus(<strong class="jxr_keyword">new</strong> Path(outputPath), <strong class="jxr_keyword">new</strong> OutputFilesFilter())) {
-<a class="jxr_linenumber" name="510" href="#510">510</a>       String[] elements = cfStatus.getPath().toString().split(Path.SEPARATOR);
-<a class="jxr_linenumber" name="511" href="#511">511</a>       String cf = elements[elements.length - 1];
-<a class="jxr_linenumber" name="512" href="#512">512</a>       foundFamilies.add(cf);
-<a class="jxr_linenumber" name="513" href="#513">513</a>       assertTrue(
-<a class="jxr_linenumber" name="514" href="#514">514</a>         String.format(
-<a class="jxr_linenumber" name="515" href="#515">515</a>           <span class="jxr_string">"HFile output contains a column family (%s) not present in input families (%s)"</span>,
-<a class="jxr_linenumber" name="516" href="#516">516</a>           cf, configFamilies),
-<a class="jxr_linenumber" name="517" href="#517">517</a>           configFamilies.contains(cf));
-<a class="jxr_linenumber" name="518" href="#518">518</a>       <strong class="jxr_keyword">for</strong> (FileStatus hfile : fs.listStatus(cfStatus.getPath())) {
-<a class="jxr_linenumber" name="519" href="#519">519</a>         assertTrue(
-<a class="jxr_linenumber" name="520" href="#520">520</a>           String.format(<span class="jxr_string">"HFile %s appears to contain no data."</span>, hfile.getPath()),
-<a class="jxr_linenumber" name="521" href="#521">521</a>           hfile.getLen() &gt; 0);
-<a class="jxr_linenumber" name="522" href="#522">522</a>         <em class="jxr_comment">// count the number of KVs from all the hfiles</em>
-<a class="jxr_linenumber" name="523" href="#523">523</a>         <strong class="jxr_keyword">if</strong> (expectedKVCount &gt; -1) {
-<a class="jxr_linenumber" name="524" href="#524">524</a>           actualKVCount += getKVCountFromHfile(fs, hfile.getPath());
-<a class="jxr_linenumber" name="525" href="#525">525</a>         }
-<a class="jxr_linenumber" name="526" href="#526">526</a>       }
-<a class="jxr_linenumber" name="527" href="#527">527</a>     }
-<a class="jxr_linenumber" name="528" href="#528">528</a>     assertTrue(String.format(<span class="jxr_string">"HFile output does not contain the input family '%s'."</span>, family),
-<a class="jxr_linenumber" name="529" href="#529">529</a>         foundFamilies.contains(family));
-<a class="jxr_linenumber" name="530" href="#530">530</a>     <strong class="jxr_keyword">if</strong> (expectedKVCount &gt; -1) {
-<a class="jxr_linenumber" name="531" href="#531">531</a>       assertTrue(String.format(
-<a class="jxr_linenumber" name="532" href="#532">532</a>         <span class="jxr_string">"KV count in ouput hfile=&lt;%d&gt; doesn't match with expected KV count=&lt;%d&gt;"</span>, actualKVCount,
-<a class="jxr_linenumber" name="533" href="#533">533</a>         expectedKVCount), actualKVCount == expectedKVCount);
-<a class="jxr_linenumber" name="534" href="#534">534</a>     }
-<a class="jxr_linenumber" name="535" href="#535">535</a>   }
-<a class="jxr_linenumber" name="536" href="#536">536</a> 
-<a class="jxr_linenumber" name="537" href="#537">537</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="538" href="#538">538</a> <em class="jxr_javadoccomment">   * Method returns the total KVs in given hfile</em>
-<a class="jxr_linenumber" name="539" href="#539">539</a> <em class="jxr_javadoccomment">   * @param fs File System</em>
-<a class="jxr_linenumber" name="540" href="#540">540</a> <em class="jxr_javadoccomment">   * @param p HFile path</em>
-<a class="jxr_linenumber" name="541" href="#541">541</a> <em class="jxr_javadoccomment">   * @return KV count in the given hfile</em>
-<a class="jxr_linenumber" name="542" href="#542">542</a> <em class="jxr_javadoccomment">   * @throws IOException</em>
-<a class="jxr_linenumber" name="543" href="#543">543</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="544" href="#544">544</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">int</strong> getKVCountFromHfile(FileSystem fs, Path p) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="545" href="#545">545</a>     Configuration conf = util.getConfiguration();
-<a class="jxr_linenumber" name="546" href="#546">546</a>     HFile.Reader reader = HFile.createReader(fs, p, <strong class="jxr_keyword">new</strong> CacheConfig(conf), conf);
-<a class="jxr_linenumber" name="547" href="#547">547</a>     reader.loadFileInfo();
-<a class="jxr_linenumber" name="548" href="#548">548</a>     HFileScanner scanner = reader.getScanner(false, false);
-<a class="jxr_linenumber" name="549" href="#549">549</a>     scanner.seekTo();
-<a class="jxr_linenumber" name="550" href="#550">550</a>     <strong class="jxr_keyword">int</strong> count = 0;
-<a class="jxr_linenumber" name="551" href="#551">551</a>     <strong class="jxr_keyword">do</strong> {
-<a class="jxr_linenumber" name="552" href="#552">552</a>       count++;
-<a class="jxr_linenumber" name="553" href="#553">553</a>     } <strong class="jxr_keyword">while</strong> (scanner.next());
-<a class="jxr_linenumber" name="554" href="#554">554</a>     reader.close();
-<a class="jxr_linenumber" name="555" href="#555">555</a>     <strong class="jxr_keyword">return</strong> count;
-<a class="jxr_linenumber" name="556" href="#556">556</a>   }
-<a class="jxr_linenumber" name="557" href="#557">557</a> }
-<a class="jxr_linenumber" name="558" href="#558">558</a> 
+<a class="jxr_linenumber" name="453" href="#453">453</a>     <strong class="jxr_keyword">if</strong> (conf.getBoolean(DELETE_AFTER_LOAD_CONF, <strong class="jxr_keyword">true</strong>)) {
+<a class="jxr_linenumber" name="454" href="#454">454</a>       LOG.debug(<span class="jxr_string">"Deleting test subdirectory"</span>);
+<a class="jxr_linenumber" name="455" href="#455">455</a>       util.cleanupDataTestDirOnTestFS(table.getNameAsString());
+<a class="jxr_linenumber" name="456" href="#456">456</a>     }
+<a class="jxr_linenumber" name="457" href="#457">457</a>     <strong class="jxr_keyword">return</strong> tool;
+<a class="jxr_linenumber" name="458" href="#458">458</a>   }
+<a class="jxr_linenumber" name="459" href="#459">459</a> 
+<a class="jxr_linenumber" name="460" href="#460">460</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="461" href="#461">461</a> <em class="jxr_javadoccomment">   * Confirm ImportTsv via data in online table.</em>
+<a class="jxr_linenumber" name="462" href="#462">462</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="463" href="#463">463</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> validateTable(Configuration conf, TableName tableName,
+<a class="jxr_linenumber" name="464" href="#464">464</a>       String family, <strong class="jxr_keyword">int</strong> valueMultiplier, <strong class="jxr_keyword">boolean</strong> isDryRun) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="465" href="#465">465</a> 
+<a class="jxr_linenumber" name="466" href="#466">466</a>     LOG.debug(<span class="jxr_string">"Validating table."</span>);
+<a class="jxr_linenumber" name="467" href="#467">467</a>     Connection connection = ConnectionFactory.createConnection(conf);
+<a class="jxr_linenumber" name="468" href="#468">468</a>     Table table = connection.getTable(tableName);
+<a class="jxr_linenumber" name="469" href="#469">469</a>     <strong class="jxr_keyword">boolean</strong> verified = false;
+<a class="jxr_linenumber" name="470" href="#470">470</a>     <strong class="jxr_keyword">long</strong> pause = conf.getLong(<span class="jxr_string">"hbase.client.pause"</span>, 5 * 1000);
+<a class="jxr_linenumber" name="471" href="#471">471</a>     <strong class="jxr_keyword">int</strong> numRetries = conf.getInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER, 5);
+<a class="jxr_linenumber" name="472" href="#472">472</a>     <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; numRetries; i++) {
+<a class="jxr_linenumber" name="473" href="#473">473</a>       <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="474" href="#474">474</a>         Scan scan = <strong class="jxr_keyword">new</strong> Scan();
+<a class="jxr_linenumber" name="475" href="#475">475</a>         <em class="jxr_comment">// Scan entire family.</em>
+<a class="jxr_linenumber" name="476" href="#476">476</a>         scan.addFamily(Bytes.toBytes(family));
+<a class="jxr_linenumber" name="477" href="#477">477</a>         ResultScanner resScanner = table.getScanner(scan);
+<a class="jxr_linenumber" name="478" href="#478">478</a>         <strong class="jxr_keyword">int</strong> numRows = 0;
+<a class="jxr_linenumber" name="479" href="#479">479</a>         <strong class="jxr_keyword">for</strong> (Result res : resScanner) {
+<a class="jxr_linenumber" name="480" href="#480">480</a>           numRows++;
+<a class="jxr_linenumber" name="481" href="#481">481</a>           assertEquals(2, res.size());
+<a class="jxr_linenumber" name="482" href="#482">482</a>           List&lt;Cell&gt; kvs = res.listCells();
+<a class="jxr_linenumber" name="483" href="#483">483</a>           assertTrue(CellUtil.matchingRow(kvs.get(0), Bytes.toBytes(<span class="jxr_string">"KEY"</span>)));
+<a class="jxr_linenumber" name="484" href="#484">484</a>           assertTrue(CellUtil.matchingRow(kvs.get(1), Bytes.toBytes(<span class="jxr_string">"KEY"</span>)));
+<a class="jxr_linenumber" name="485" href="#485">485</a>           assertTrue(CellUtil.matchingValue(kvs.get(0), Bytes.toBytes(<span class="jxr_string">"VALUE"</span> + valueMultiplier)));
+<a class="jxr_linenumber" name="486" href="#486">486</a>           assertTrue(CellUtil.matchingValue(kvs.get(1), Bytes.toBytes(<span class="jxr_string">"VALUE"</span> + 2 * valueMultiplier)));
+<a class="jxr_linenumber" name="487" href="#487">487</a>           <em class="jxr_comment">// Only one result set is expected, so let it loop.</em>
+<a class="jxr_linenumber" name="488" href="#488">488</a>         }
+<a class="jxr_linenumber" name="489" href="#489">489</a>         <strong class="jxr_keyword">if</strong> (isDryRun) {
+<a class="jxr_linenumber" name="490" href="#490">490</a>           assertEquals(0, numRows);
+<a class="jxr_linenumber" name="491" href="#491">491</a>         } <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="492" href="#492">492</a>           assertEquals(1, numRows);
+<a class="jxr_linenumber" name="493" href="#493">493</a>         }
+<a class="jxr_linenumber" name="494" href="#494">494</a>         verified = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="495" href="#495">495</a>         <strong class="jxr_keyword">break</strong>;
+<a class="jxr_linenumber" name="496" href="#496">496</a>       } <strong class="jxr_keyword">catch</strong> (NullPointerException e) {
+<a class="jxr_linenumber" name="497" href="#497">497</a>         <em class="jxr_comment">// If here, a cell was empty. Presume its because updates came in</em>
+<a class="jxr_linenumber" name="498" href="#498">498</a>         <em class="jxr_comment">// after the scanner had been opened. Wait a while and retry.</em>
+<a class="jxr_linenumber" name="499" href="#499">499</a>       }
+<a class="jxr_linenumber" name="500" href="#500">500</a>       <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="501" href="#501">501</a>         Thread.sleep(pause);
+<a class="jxr_linenumber" name="502" href="#502">502</a>       } <strong class="jxr_keyword">catch</strong> (InterruptedException e) {
+<a class="jxr_linenumber" name="503" href="#503">503</a>         <em class="jxr_comment">// continue</em>
+<a class="jxr_linenumber" name="504" href="#504">504</a>       }
+<a class="jxr_linenumber" name="505" href="#505">505</a>     }
+<a class="jxr_linenumber" name="506" href="#506">506</a>     table.close();
+<a class="jxr_linenumber" name="507" href="#507">507</a>     connection.close();
+<a class="jxr_linenumber" name="508" href="#508">508</a>     assertTrue(verified);
+<a class="jxr_linenumber" name="509" href="#509">509</a>   }
+<a class="jxr_linenumber" name="510" href="#510">510</a> 
+<a class="jxr_linenumber" name="511" href="#511">511</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="512" href="#512">512</a> <em class="jxr_javadoccomment">   * Confirm ImportTsv via HFiles on fs.</em>
+<a class="jxr_linenumber" name="513" href="#513">513</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="514" href="#514">514</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> validateHFiles(FileSystem fs, String outputPath, String family,
+<a class="jxr_linenumber" name="515" href="#515">515</a>       <strong class="jxr_keyword">int</strong> expectedKVCount) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="516" href="#516">516</a>     <em class="jxr_comment">// validate number and content of output columns</em>
+<a class="jxr_linenumber" name="517" href="#517">517</a>     LOG.debug(<span class="jxr_string">"Validating HFiles."</span>);
+<a class="jxr_linenumber" name="518" href="#518">518</a>     Set&lt;String&gt; configFamilies = <strong class="jxr_keyword">new</strong> HashSet&lt;String&gt;();
+<a class="jxr_linenumber" name="519" href="#519">519</a>     configFamilies.add(family);
+<a class="jxr_linenumber" name="520" href="#520">520</a>     Set&lt;String&gt; foundFamilies = <strong class="jxr_keyword">new</strong> HashSet&lt;String&gt;();
+<a class="jxr_linenumber" name="521" href="#521">521</a>     <strong class="jxr_keyword">int</strong> actualKVCount = 0;
+<a class="jxr_linenumber" name="522" href="#522">522</a>     <strong class="jxr_keyword">for</strong> (FileStatus cfStatus : fs.listStatus(<strong class="jxr_keyword">new</strong> Path(outputPath), <strong class="jxr_keyword">new</strong> OutputFilesFilter())) {
+<a class="jxr_linenumber" name="523" href="#523">523</a>       String[] elements = cfStatus.getPath().toString().split(Path.SEPARATOR);
+<a class="jxr_linenumber" name="524" href="#524">524</a>       String cf = elements[elements.length - 1];
+<a class="jxr_linenumber" name="525" href="#525">525</a>       foundFamilies.add(cf);
+<a class="jxr_linenumber" name="526" href="#526">526</a>       assertTrue(
+<a class="jxr_linenumber" name="527" href="#527">527</a>         String.format(
+<a class="jxr_linenumber" name="528" href="#528">528</a>           <span class="jxr_string">"HFile output contains a column family (%s) not present in input families (%s)"</span>,
+<a class="jxr_linenumber" name="529" href="#529">529</a>           cf, configFamilies),
+<a class="jxr_linenumber" name="530" href="#530">530</a>           configFamilies.contains(cf));
+<a class="jxr_linenumber" name="531" href="#531">531</a>       <strong class="jxr_keyword">for</strong> (FileStatus hfile : fs.listStatus(cfStatus.getPath())) {
+<a class="jxr_linenumber" name="532" href="#532">532</a>         assertTrue(
+<a class="jxr_linenumber" name="533" href="#533">533</a>           String.format(<span class="jxr_string">"HFile %s appears to contain no data."</span>, hfile.getPath()),
+<a class="jxr_linenumber" name="534" href="#534">534</a>           hfile.getLen() &gt; 0);
+<a class="jxr_linenumber" name="535" href="#535">535</a>         <em class="jxr_comment">// count the number of KVs from all the hfiles</em>
+<a class="jxr_linenumber" name="536" href="#536">536</a>         <strong class="jxr_keyword">if</strong> (expectedKVCount &gt; -1) {
+<a class="jxr_linenumber" name="537" href="#537">537</a>           actualKVCount += getKVCountFromHfile(fs, hfile.getPath());
+<a class="jxr_linenumber" name="538" href="#538">538</a>         }
+<a class="jxr_linenumber" name="539" href="#539">539</a>       }
+<a class="jxr_linenumber" name="540" href="#540">540</a>     }
+<a class="jxr_linenumber" name="541" href="#541">541</a>     assertTrue(String.format(<span class="jxr_string">"HFile output does not contain the input family '%s'."</span>, family),
+<a class="jxr_linenumber" name="542" href="#542">542</a>         foundFamilies.contains(family));
+<a class="jxr_linenumber" name="543" href="#543">543</a>     <strong class="jxr_keyword">if</strong> (expectedKVCount &gt; -1) {
+<a class="jxr_linenumber" name="544" href="#544">544</a>       assertTrue(String.format(
+<a class="jxr_linenumber" name="545" href="#545">545</a>         <span class="jxr_string">"KV count in ouput hfile=&lt;%d&gt; doesn't match with expected KV count=&lt;%d&gt;"</span>, actualKVCount,
+<a class="jxr_linenumber" name="546" href="#546">546</a>         expectedKVCount), actualKVCount == expectedKVCount);
+<a class="jxr_linenumber" name="547" href="#547">547</a>     }
+<a class="jxr_linenumber" name="548" href="#548">548</a>   }
+<a class="jxr_linenumber" name="549" href="#549">549</a> 
+<a class="jxr_linenumber" name="550" href="#550">550</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="551" href="#551">551</a> <em class="jxr_javadoccomment">   * Method returns the total KVs in given hfile</em>
+<a class="jxr_linenumber" name="552" href="#552">552</a> <em class="jxr_javadoccomment">   * @param fs File System</em>
+<a class="jxr_linenumber" name="553" href="#553">553</a> <em class="jxr_javadoccomment">   * @param p HFile path</em>
+<a class="jxr_linenumber" name="554" href="#554">554</a> <em class="jxr_javadoccomment">   * @return KV count in the given hfile</em>
+<a class="jxr_linenumber" name="555" href="#555">555</a> <em class="jxr_javadoccomment">   * @throws IOException</em>
+<a class="jxr_linenumber" name="556" href="#556">556</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="557" href="#557">557</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">int</strong> getKVCountFromHfile(FileSystem fs, Path p) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="558" href="#558">558</a>     Configuration conf = util.getConfiguration();
+<a class="jxr_linenumber" name="559" href="#559">559</a>     HFile.Reader reader = HFile.createReader(fs, p, <strong class="jxr_keyword">new</strong> CacheConfig(conf), conf);
+<a class="jxr_linenumber" name="560" href="#560">560</a>     reader.loadFileInfo();
+<a class="jxr_linenumber" name="561" href="#561">561</a>     HFileScanner scanner = reader.getScanner(false, false);
+<a class="jxr_linenumber" name="562" href="#562">562</a>     scanner.seekTo();
+<a class="jxr_linenumber" name="563" href="#563">563</a>     <strong class="jxr_keyword">int</strong> count = 0;
+<a class="jxr_linenumber" name="564" href="#564">564</a>     <strong class="jxr_keyword">do</strong> {
+<a class="jxr_linenumber" name="565" href="#565">565</a>       count++;
+<a class="jxr_linenumber" name="566" href="#566">566</a>     } <strong class="jxr_keyword">while</strong> (scanner.next());
+<a class="jxr_linenumber" name="567" href="#567">567</a>     reader.close();
+<a class="jxr_linenumber" name="568" href="#568">568</a>     <strong class="jxr_keyword">return</strong> count;
+<a class="jxr_linenumber" name="569" href="#569">569</a>   }
+<a class="jxr_linenumber" name="570" href="#570">570</a> }
+<a class="jxr_linenumber" name="571" href="#571">571</a> 
 </pre>
 <hr/><div id="footer">This page was automatically generated by <a href="http://maven.apache.org/">Maven</a></div></body>
 </html>