You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by bu...@apache.org on 2016/08/08 14:22:33 UTC

[37/52] [partial] hbase-site git commit: Published site at 30d7eeaefe431bc263519064662e6dc8ad8ff05a.

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/a5d8deaf/apidocs/src-html/org/apache/hadoop/hbase/io/TimeRange.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/io/TimeRange.html b/apidocs/src-html/org/apache/hadoop/hbase/io/TimeRange.html
index c42d354..a62d306 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/io/TimeRange.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/io/TimeRange.html
@@ -192,49 +192,48 @@
 <span class="sourceLineNo">184</span>  }<a name="line.184"></a>
 <span class="sourceLineNo">185</span><a name="line.185"></a>
 <span class="sourceLineNo">186</span>  /**<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   * Check if the specified timestamp is within this TimeRange.<a name="line.187"></a>
+<span class="sourceLineNo">187</span>   * Check if the specified timestamp is within or after this TimeRange.<a name="line.187"></a>
 <span class="sourceLineNo">188</span>   * &lt;p&gt;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   * Returns true if within interval [minStamp, maxStamp), false<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * if not.<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * @param timestamp timestamp to check<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   * @return true if within TimeRange, false if not<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   */<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  public boolean withinOrAfterTimeRange(long timestamp) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    assert timestamp &gt;= 0;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    if (allTime) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      return true;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    }<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    // check if &gt;= minStamp<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    return timestamp &gt;= minStamp;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>  }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>  /**<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * Compare the timestamp to timerange.<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * @return -1 if timestamp is less than timerange,<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * 0 if timestamp is within timerange,<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   * 1 if timestamp is greater than timerange<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  public int compare(long timestamp) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    assert timestamp &gt;= 0;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    if (this.allTime) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      return 0;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    }<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    if (timestamp &lt; minStamp) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      return -1;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    return timestamp &gt;= maxStamp? 1: 0;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  }<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>  @Override<a name="line.220"></a>
-<span class="sourceLineNo">221</span>  public String toString() {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    StringBuilder sb = new StringBuilder();<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    sb.append("maxStamp=");<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    sb.append(this.maxStamp);<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    sb.append(", minStamp=");<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    sb.append(this.minStamp);<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    return sb.toString();<a name="line.227"></a>
-<span class="sourceLineNo">228</span>  }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>}<a name="line.229"></a>
+<span class="sourceLineNo">189</span>   * Returns true if greater than minStamp, false if not.<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * @param timestamp timestamp to check<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * @return true if within or after TimeRange, false if not<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  public boolean withinOrAfterTimeRange(long timestamp) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    assert timestamp &gt;= 0;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    if (allTime) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      return true;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    }<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    // check if &gt;= minStamp<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    return timestamp &gt;= minStamp;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>  }<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>  /**<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   * Compare the timestamp to timerange.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>   * @return -1 if timestamp is less than timerange,<a name="line.204"></a>
+<span class="sourceLineNo">205</span>   * 0 if timestamp is within timerange,<a name="line.205"></a>
+<span class="sourceLineNo">206</span>   * 1 if timestamp is greater than timerange<a name="line.206"></a>
+<span class="sourceLineNo">207</span>   */<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  public int compare(long timestamp) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    assert timestamp &gt;= 0;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    if (this.allTime) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      return 0;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    if (timestamp &lt; minStamp) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      return -1;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    return timestamp &gt;= maxStamp? 1: 0;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  }<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>  @Override<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  public String toString() {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    StringBuilder sb = new StringBuilder();<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    sb.append("maxStamp=");<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    sb.append(this.maxStamp);<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    sb.append(", minStamp=");<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    sb.append(this.minStamp);<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    return sb.toString();<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  }<a name="line.227"></a>
+<span class="sourceLineNo">228</span>}<a name="line.228"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/a5d8deaf/apidocs/src-html/org/apache/hadoop/hbase/mapred/TableMapReduceUtil.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/mapred/TableMapReduceUtil.html b/apidocs/src-html/org/apache/hadoop/hbase/mapred/TableMapReduceUtil.html
index 3902739..f12bdac 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/mapred/TableMapReduceUtil.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/mapred/TableMapReduceUtil.html
@@ -370,7 +370,7 @@
 <span class="sourceLineNo">362</span>   */<a name="line.362"></a>
 <span class="sourceLineNo">363</span>  public static void addDependencyJars(JobConf job) throws IOException {<a name="line.363"></a>
 <span class="sourceLineNo">364</span>    org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil.addHBaseDependencyJars(job);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil.addDependencyJars(<a name="line.365"></a>
+<span class="sourceLineNo">365</span>    org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil.addDependencyJarsForClasses(<a name="line.365"></a>
 <span class="sourceLineNo">366</span>      job,<a name="line.366"></a>
 <span class="sourceLineNo">367</span>      // when making changes here, consider also mapreduce.TableMapReduceUtil<a name="line.367"></a>
 <span class="sourceLineNo">368</span>      // pull job classes<a name="line.368"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/a5d8deaf/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/Import.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/Import.html b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/Import.html
index c72a9ce..73df1db 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/Import.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/Import.html
@@ -624,7 +624,7 @@
 <span class="sourceLineNo">616</span>    try {<a name="line.616"></a>
 <span class="sourceLineNo">617</span>      Class&lt;? extends Filter&gt; filter = conf.getClass(FILTER_CLASS_CONF_KEY, null, Filter.class);<a name="line.617"></a>
 <span class="sourceLineNo">618</span>      if (filter != null) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>        TableMapReduceUtil.addDependencyJars(conf, filter);<a name="line.619"></a>
+<span class="sourceLineNo">619</span>        TableMapReduceUtil.addDependencyJarsForClasses(conf, filter);<a name="line.619"></a>
 <span class="sourceLineNo">620</span>      }<a name="line.620"></a>
 <span class="sourceLineNo">621</span>    } catch (Exception e) {<a name="line.621"></a>
 <span class="sourceLineNo">622</span>      throw new IOException(e);<a name="line.622"></a>
@@ -651,7 +651,7 @@
 <span class="sourceLineNo">643</span>        fs.deleteOnExit(partitionsPath);<a name="line.643"></a>
 <span class="sourceLineNo">644</span>        job.setPartitionerClass(KeyValueWritableComparablePartitioner.class);<a name="line.644"></a>
 <span class="sourceLineNo">645</span>        job.setNumReduceTasks(regionLocator.getStartKeys().length);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>        TableMapReduceUtil.addDependencyJars(job.getConfiguration(),<a name="line.646"></a>
+<span class="sourceLineNo">646</span>        TableMapReduceUtil.addDependencyJarsForClasses(job.getConfiguration(),<a name="line.646"></a>
 <span class="sourceLineNo">647</span>            com.google.common.base.Preconditions.class);<a name="line.647"></a>
 <span class="sourceLineNo">648</span>      }<a name="line.648"></a>
 <span class="sourceLineNo">649</span>    } else if (hfileOutPath != null) {<a name="line.649"></a>
@@ -666,7 +666,7 @@
 <span class="sourceLineNo">658</span>        job.setMapOutputKeyClass(ImmutableBytesWritable.class);<a name="line.658"></a>
 <span class="sourceLineNo">659</span>        job.setMapOutputValueClass(KeyValue.class);<a name="line.659"></a>
 <span class="sourceLineNo">660</span>        HFileOutputFormat2.configureIncrementalLoad(job, table.getTableDescriptor(), regionLocator);<a name="line.660"></a>
-<span class="sourceLineNo">661</span>        TableMapReduceUtil.addDependencyJars(job.getConfiguration(),<a name="line.661"></a>
+<span class="sourceLineNo">661</span>        TableMapReduceUtil.addDependencyJarsForClasses(job.getConfiguration(),<a name="line.661"></a>
 <span class="sourceLineNo">662</span>            com.google.common.base.Preconditions.class);<a name="line.662"></a>
 <span class="sourceLineNo">663</span>      }<a name="line.663"></a>
 <span class="sourceLineNo">664</span>    } else {<a name="line.664"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/a5d8deaf/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/ImportTsv.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/ImportTsv.html b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/ImportTsv.html
index f29d477..22656ce 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/ImportTsv.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/ImportTsv.html
@@ -595,7 +595,7 @@
 <span class="sourceLineNo">587</span>              KeyValueSerialization.class.getName());<a name="line.587"></a>
 <span class="sourceLineNo">588</span>        }<a name="line.588"></a>
 <span class="sourceLineNo">589</span>        TableMapReduceUtil.addDependencyJars(job);<a name="line.589"></a>
-<span class="sourceLineNo">590</span>        TableMapReduceUtil.addDependencyJars(job.getConfiguration(),<a name="line.590"></a>
+<span class="sourceLineNo">590</span>        TableMapReduceUtil.addDependencyJarsForClasses(job.getConfiguration(),<a name="line.590"></a>
 <span class="sourceLineNo">591</span>            com.google.common.base.Function.class /* Guava used by TsvParser */);<a name="line.591"></a>
 <span class="sourceLineNo">592</span>      }<a name="line.592"></a>
 <span class="sourceLineNo">593</span>    }<a name="line.593"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/a5d8deaf/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html
index a5703ad..d8cb594 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html
@@ -347,7 +347,7 @@
 <span class="sourceLineNo">339</span><a name="line.339"></a>
 <span class="sourceLineNo">340</span>    if (addDependencyJars) {<a name="line.340"></a>
 <span class="sourceLineNo">341</span>      addDependencyJars(job);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      addDependencyJars(job.getConfiguration(), MetricRegistry.class);<a name="line.342"></a>
+<span class="sourceLineNo">342</span>      addDependencyJarsForClasses(job.getConfiguration(), MetricRegistry.class);<a name="line.342"></a>
 <span class="sourceLineNo">343</span>    }<a name="line.343"></a>
 <span class="sourceLineNo">344</span><a name="line.344"></a>
 <span class="sourceLineNo">345</span>    resetCacheConfig(job.getConfiguration());<a name="line.345"></a>
@@ -795,7 +795,7 @@
 <span class="sourceLineNo">787</span>          "  Continuing without it.");<a name="line.787"></a>
 <span class="sourceLineNo">788</span>    }<a name="line.788"></a>
 <span class="sourceLineNo">789</span><a name="line.789"></a>
-<span class="sourceLineNo">790</span>    addDependencyJars(conf,<a name="line.790"></a>
+<span class="sourceLineNo">790</span>    addDependencyJarsForClasses(conf,<a name="line.790"></a>
 <span class="sourceLineNo">791</span>      // explicitly pull a class from each module<a name="line.791"></a>
 <span class="sourceLineNo">792</span>      org.apache.hadoop.hbase.HConstants.class,                      // hbase-common<a name="line.792"></a>
 <span class="sourceLineNo">793</span>      org.apache.hadoop.hbase.protobuf.generated.ClientProtos.class, // hbase-protocol<a name="line.793"></a>
@@ -843,7 +843,7 @@
 <span class="sourceLineNo">835</span>  public static void addDependencyJars(Job job) throws IOException {<a name="line.835"></a>
 <span class="sourceLineNo">836</span>    addHBaseDependencyJars(job.getConfiguration());<a name="line.836"></a>
 <span class="sourceLineNo">837</span>    try {<a name="line.837"></a>
-<span class="sourceLineNo">838</span>      addDependencyJars(job.getConfiguration(),<a name="line.838"></a>
+<span class="sourceLineNo">838</span>      addDependencyJarsForClasses(job.getConfiguration(),<a name="line.838"></a>
 <span class="sourceLineNo">839</span>          // when making changes here, consider also mapred.TableMapReduceUtil<a name="line.839"></a>
 <span class="sourceLineNo">840</span>          // pull job classes<a name="line.840"></a>
 <span class="sourceLineNo">841</span>          job.getMapOutputKeyClass(),<a name="line.841"></a>
@@ -863,157 +863,181 @@
 <span class="sourceLineNo">855</span>   * Add the jars containing the given classes to the job's configuration<a name="line.855"></a>
 <span class="sourceLineNo">856</span>   * such that JobClient will ship them to the cluster and add them to<a name="line.856"></a>
 <span class="sourceLineNo">857</span>   * the DistributedCache.<a name="line.857"></a>
-<span class="sourceLineNo">858</span>   */<a name="line.858"></a>
-<span class="sourceLineNo">859</span>  public static void addDependencyJars(Configuration conf,<a name="line.859"></a>
-<span class="sourceLineNo">860</span>      Class&lt;?&gt;... classes) throws IOException {<a name="line.860"></a>
-<span class="sourceLineNo">861</span><a name="line.861"></a>
-<span class="sourceLineNo">862</span>    FileSystem localFs = FileSystem.getLocal(conf);<a name="line.862"></a>
-<span class="sourceLineNo">863</span>    Set&lt;String&gt; jars = new HashSet&lt;String&gt;();<a name="line.863"></a>
-<span class="sourceLineNo">864</span>    // Add jars that are already in the tmpjars variable<a name="line.864"></a>
-<span class="sourceLineNo">865</span>    jars.addAll(conf.getStringCollection("tmpjars"));<a name="line.865"></a>
-<span class="sourceLineNo">866</span><a name="line.866"></a>
-<span class="sourceLineNo">867</span>    // add jars as we find them to a map of contents jar name so that we can avoid<a name="line.867"></a>
-<span class="sourceLineNo">868</span>    // creating new jars for classes that have already been packaged.<a name="line.868"></a>
-<span class="sourceLineNo">869</span>    Map&lt;String, String&gt; packagedClasses = new HashMap&lt;String, String&gt;();<a name="line.869"></a>
-<span class="sourceLineNo">870</span><a name="line.870"></a>
-<span class="sourceLineNo">871</span>    // Add jars containing the specified classes<a name="line.871"></a>
-<span class="sourceLineNo">872</span>    for (Class&lt;?&gt; clazz : classes) {<a name="line.872"></a>
-<span class="sourceLineNo">873</span>      if (clazz == null) continue;<a name="line.873"></a>
-<span class="sourceLineNo">874</span><a name="line.874"></a>
-<span class="sourceLineNo">875</span>      Path path = findOrCreateJar(clazz, localFs, packagedClasses);<a name="line.875"></a>
-<span class="sourceLineNo">876</span>      if (path == null) {<a name="line.876"></a>
-<span class="sourceLineNo">877</span>        LOG.warn("Could not find jar for class " + clazz +<a name="line.877"></a>
-<span class="sourceLineNo">878</span>                 " in order to ship it to the cluster.");<a name="line.878"></a>
-<span class="sourceLineNo">879</span>        continue;<a name="line.879"></a>
-<span class="sourceLineNo">880</span>      }<a name="line.880"></a>
-<span class="sourceLineNo">881</span>      if (!localFs.exists(path)) {<a name="line.881"></a>
-<span class="sourceLineNo">882</span>        LOG.warn("Could not validate jar file " + path + " for class "<a name="line.882"></a>
-<span class="sourceLineNo">883</span>                 + clazz);<a name="line.883"></a>
-<span class="sourceLineNo">884</span>        continue;<a name="line.884"></a>
-<span class="sourceLineNo">885</span>      }<a name="line.885"></a>
-<span class="sourceLineNo">886</span>      jars.add(path.toString());<a name="line.886"></a>
-<span class="sourceLineNo">887</span>    }<a name="line.887"></a>
-<span class="sourceLineNo">888</span>    if (jars.isEmpty()) return;<a name="line.888"></a>
-<span class="sourceLineNo">889</span><a name="line.889"></a>
-<span class="sourceLineNo">890</span>    conf.set("tmpjars", StringUtils.arrayToString(jars.toArray(new String[jars.size()])));<a name="line.890"></a>
-<span class="sourceLineNo">891</span>  }<a name="line.891"></a>
-<span class="sourceLineNo">892</span><a name="line.892"></a>
-<span class="sourceLineNo">893</span>  /**<a name="line.893"></a>
-<span class="sourceLineNo">894</span>   * Finds the Jar for a class or creates it if it doesn't exist. If the class is in<a name="line.894"></a>
-<span class="sourceLineNo">895</span>   * a directory in the classpath, it creates a Jar on the fly with the<a name="line.895"></a>
-<span class="sourceLineNo">896</span>   * contents of the directory and returns the path to that Jar. If a Jar is<a name="line.896"></a>
-<span class="sourceLineNo">897</span>   * created, it is created in the system temporary directory. Otherwise,<a name="line.897"></a>
-<span class="sourceLineNo">898</span>   * returns an existing jar that contains a class of the same name. Maintains<a name="line.898"></a>
-<span class="sourceLineNo">899</span>   * a mapping from jar contents to the tmp jar created.<a name="line.899"></a>
-<span class="sourceLineNo">900</span>   * @param my_class the class to find.<a name="line.900"></a>
-<span class="sourceLineNo">901</span>   * @param fs the FileSystem with which to qualify the returned path.<a name="line.901"></a>
-<span class="sourceLineNo">902</span>   * @param packagedClasses a map of class name to path.<a name="line.902"></a>
-<span class="sourceLineNo">903</span>   * @return a jar file that contains the class.<a name="line.903"></a>
-<span class="sourceLineNo">904</span>   * @throws IOException<a name="line.904"></a>
-<span class="sourceLineNo">905</span>   */<a name="line.905"></a>
-<span class="sourceLineNo">906</span>  private static Path findOrCreateJar(Class&lt;?&gt; my_class, FileSystem fs,<a name="line.906"></a>
-<span class="sourceLineNo">907</span>      Map&lt;String, String&gt; packagedClasses)<a name="line.907"></a>
-<span class="sourceLineNo">908</span>  throws IOException {<a name="line.908"></a>
-<span class="sourceLineNo">909</span>    // attempt to locate an existing jar for the class.<a name="line.909"></a>
-<span class="sourceLineNo">910</span>    String jar = findContainingJar(my_class, packagedClasses);<a name="line.910"></a>
-<span class="sourceLineNo">911</span>    if (null == jar || jar.isEmpty()) {<a name="line.911"></a>
-<span class="sourceLineNo">912</span>      jar = getJar(my_class);<a name="line.912"></a>
-<span class="sourceLineNo">913</span>      updateMap(jar, packagedClasses);<a name="line.913"></a>
-<span class="sourceLineNo">914</span>    }<a name="line.914"></a>
-<span class="sourceLineNo">915</span><a name="line.915"></a>
-<span class="sourceLineNo">916</span>    if (null == jar || jar.isEmpty()) {<a name="line.916"></a>
-<span class="sourceLineNo">917</span>      return null;<a name="line.917"></a>
-<span class="sourceLineNo">918</span>    }<a name="line.918"></a>
-<span class="sourceLineNo">919</span><a name="line.919"></a>
-<span class="sourceLineNo">920</span>    LOG.debug(String.format("For class %s, using jar %s", my_class.getName(), jar));<a name="line.920"></a>
-<span class="sourceLineNo">921</span>    return new Path(jar).makeQualified(fs);<a name="line.921"></a>
-<span class="sourceLineNo">922</span>  }<a name="line.922"></a>
-<span class="sourceLineNo">923</span><a name="line.923"></a>
-<span class="sourceLineNo">924</span>  /**<a name="line.924"></a>
-<span class="sourceLineNo">925</span>   * Add entries to &lt;code&gt;packagedClasses&lt;/code&gt; corresponding to class files<a name="line.925"></a>
-<span class="sourceLineNo">926</span>   * contained in &lt;code&gt;jar&lt;/code&gt;.<a name="line.926"></a>
-<span class="sourceLineNo">927</span>   * @param jar The jar who's content to list.<a name="line.927"></a>
-<span class="sourceLineNo">928</span>   * @param packagedClasses map[class -&gt; jar]<a name="line.928"></a>
+<span class="sourceLineNo">858</span>   * @deprecated rely on {@link #addDependencyJars(Job)} instead.<a name="line.858"></a>
+<span class="sourceLineNo">859</span>   */<a name="line.859"></a>
+<span class="sourceLineNo">860</span>  @Deprecated<a name="line.860"></a>
+<span class="sourceLineNo">861</span>  public static void addDependencyJars(Configuration conf,<a name="line.861"></a>
+<span class="sourceLineNo">862</span>      Class&lt;?&gt;... classes) throws IOException {<a name="line.862"></a>
+<span class="sourceLineNo">863</span>    LOG.warn("The addDependencyJars(Configuration, Class&lt;?&gt;...) method has been deprecated since it"<a name="line.863"></a>
+<span class="sourceLineNo">864</span>             + " is easy to use incorrectly. Most users should rely on addDependencyJars(Job) " +<a name="line.864"></a>
+<span class="sourceLineNo">865</span>             "instead. See HBASE-8386 for more details.");<a name="line.865"></a>
+<span class="sourceLineNo">866</span>    addDependencyJarsForClasses(conf, classes);<a name="line.866"></a>
+<span class="sourceLineNo">867</span>  }<a name="line.867"></a>
+<span class="sourceLineNo">868</span><a name="line.868"></a>
+<span class="sourceLineNo">869</span>  /**<a name="line.869"></a>
+<span class="sourceLineNo">870</span>   * Add the jars containing the given classes to the job's configuration<a name="line.870"></a>
+<span class="sourceLineNo">871</span>   * such that JobClient will ship them to the cluster and add them to<a name="line.871"></a>
+<span class="sourceLineNo">872</span>   * the DistributedCache.<a name="line.872"></a>
+<span class="sourceLineNo">873</span>   *<a name="line.873"></a>
+<span class="sourceLineNo">874</span>   * N.B. that this method at most adds one jar per class given. If there is more than one<a name="line.874"></a>
+<span class="sourceLineNo">875</span>   * jar available containing a class with the same name as a given class, we don't define<a name="line.875"></a>
+<span class="sourceLineNo">876</span>   * which of those jars might be chosen.<a name="line.876"></a>
+<span class="sourceLineNo">877</span>   *<a name="line.877"></a>
+<span class="sourceLineNo">878</span>   * @param conf The Hadoop Configuration to modify<a name="line.878"></a>
+<span class="sourceLineNo">879</span>   * @param classes will add just those dependencies needed to find the given classes<a name="line.879"></a>
+<span class="sourceLineNo">880</span>   * @throws IOException if an underlying library call fails.<a name="line.880"></a>
+<span class="sourceLineNo">881</span>   */<a name="line.881"></a>
+<span class="sourceLineNo">882</span>  @InterfaceAudience.Private<a name="line.882"></a>
+<span class="sourceLineNo">883</span>  public static void addDependencyJarsForClasses(Configuration conf,<a name="line.883"></a>
+<span class="sourceLineNo">884</span>      Class&lt;?&gt;... classes) throws IOException {<a name="line.884"></a>
+<span class="sourceLineNo">885</span><a name="line.885"></a>
+<span class="sourceLineNo">886</span>    FileSystem localFs = FileSystem.getLocal(conf);<a name="line.886"></a>
+<span class="sourceLineNo">887</span>    Set&lt;String&gt; jars = new HashSet&lt;String&gt;();<a name="line.887"></a>
+<span class="sourceLineNo">888</span>    // Add jars that are already in the tmpjars variable<a name="line.888"></a>
+<span class="sourceLineNo">889</span>    jars.addAll(conf.getStringCollection("tmpjars"));<a name="line.889"></a>
+<span class="sourceLineNo">890</span><a name="line.890"></a>
+<span class="sourceLineNo">891</span>    // add jars as we find them to a map of contents jar name so that we can avoid<a name="line.891"></a>
+<span class="sourceLineNo">892</span>    // creating new jars for classes that have already been packaged.<a name="line.892"></a>
+<span class="sourceLineNo">893</span>    Map&lt;String, String&gt; packagedClasses = new HashMap&lt;String, String&gt;();<a name="line.893"></a>
+<span class="sourceLineNo">894</span><a name="line.894"></a>
+<span class="sourceLineNo">895</span>    // Add jars containing the specified classes<a name="line.895"></a>
+<span class="sourceLineNo">896</span>    for (Class&lt;?&gt; clazz : classes) {<a name="line.896"></a>
+<span class="sourceLineNo">897</span>      if (clazz == null) continue;<a name="line.897"></a>
+<span class="sourceLineNo">898</span><a name="line.898"></a>
+<span class="sourceLineNo">899</span>      Path path = findOrCreateJar(clazz, localFs, packagedClasses);<a name="line.899"></a>
+<span class="sourceLineNo">900</span>      if (path == null) {<a name="line.900"></a>
+<span class="sourceLineNo">901</span>        LOG.warn("Could not find jar for class " + clazz +<a name="line.901"></a>
+<span class="sourceLineNo">902</span>                 " in order to ship it to the cluster.");<a name="line.902"></a>
+<span class="sourceLineNo">903</span>        continue;<a name="line.903"></a>
+<span class="sourceLineNo">904</span>      }<a name="line.904"></a>
+<span class="sourceLineNo">905</span>      if (!localFs.exists(path)) {<a name="line.905"></a>
+<span class="sourceLineNo">906</span>        LOG.warn("Could not validate jar file " + path + " for class "<a name="line.906"></a>
+<span class="sourceLineNo">907</span>                 + clazz);<a name="line.907"></a>
+<span class="sourceLineNo">908</span>        continue;<a name="line.908"></a>
+<span class="sourceLineNo">909</span>      }<a name="line.909"></a>
+<span class="sourceLineNo">910</span>      jars.add(path.toString());<a name="line.910"></a>
+<span class="sourceLineNo">911</span>    }<a name="line.911"></a>
+<span class="sourceLineNo">912</span>    if (jars.isEmpty()) return;<a name="line.912"></a>
+<span class="sourceLineNo">913</span><a name="line.913"></a>
+<span class="sourceLineNo">914</span>    conf.set("tmpjars", StringUtils.arrayToString(jars.toArray(new String[jars.size()])));<a name="line.914"></a>
+<span class="sourceLineNo">915</span>  }<a name="line.915"></a>
+<span class="sourceLineNo">916</span><a name="line.916"></a>
+<span class="sourceLineNo">917</span>  /**<a name="line.917"></a>
+<span class="sourceLineNo">918</span>   * Finds the Jar for a class or creates it if it doesn't exist. If the class is in<a name="line.918"></a>
+<span class="sourceLineNo">919</span>   * a directory in the classpath, it creates a Jar on the fly with the<a name="line.919"></a>
+<span class="sourceLineNo">920</span>   * contents of the directory and returns the path to that Jar. If a Jar is<a name="line.920"></a>
+<span class="sourceLineNo">921</span>   * created, it is created in the system temporary directory. Otherwise,<a name="line.921"></a>
+<span class="sourceLineNo">922</span>   * returns an existing jar that contains a class of the same name. Maintains<a name="line.922"></a>
+<span class="sourceLineNo">923</span>   * a mapping from jar contents to the tmp jar created.<a name="line.923"></a>
+<span class="sourceLineNo">924</span>   * @param my_class the class to find.<a name="line.924"></a>
+<span class="sourceLineNo">925</span>   * @param fs the FileSystem with which to qualify the returned path.<a name="line.925"></a>
+<span class="sourceLineNo">926</span>   * @param packagedClasses a map of class name to path.<a name="line.926"></a>
+<span class="sourceLineNo">927</span>   * @return a jar file that contains the class.<a name="line.927"></a>
+<span class="sourceLineNo">928</span>   * @throws IOException<a name="line.928"></a>
 <span class="sourceLineNo">929</span>   */<a name="line.929"></a>
-<span class="sourceLineNo">930</span>  private static void updateMap(String jar, Map&lt;String, String&gt; packagedClasses) throws IOException {<a name="line.930"></a>
-<span class="sourceLineNo">931</span>    if (null == jar || jar.isEmpty()) {<a name="line.931"></a>
-<span class="sourceLineNo">932</span>      return;<a name="line.932"></a>
-<span class="sourceLineNo">933</span>    }<a name="line.933"></a>
-<span class="sourceLineNo">934</span>    ZipFile zip = null;<a name="line.934"></a>
-<span class="sourceLineNo">935</span>    try {<a name="line.935"></a>
-<span class="sourceLineNo">936</span>      zip = new ZipFile(jar);<a name="line.936"></a>
-<span class="sourceLineNo">937</span>      for (Enumeration&lt;? extends ZipEntry&gt; iter = zip.entries(); iter.hasMoreElements();) {<a name="line.937"></a>
-<span class="sourceLineNo">938</span>        ZipEntry entry = iter.nextElement();<a name="line.938"></a>
-<span class="sourceLineNo">939</span>        if (entry.getName().endsWith("class")) {<a name="line.939"></a>
-<span class="sourceLineNo">940</span>          packagedClasses.put(entry.getName(), jar);<a name="line.940"></a>
-<span class="sourceLineNo">941</span>        }<a name="line.941"></a>
-<span class="sourceLineNo">942</span>      }<a name="line.942"></a>
-<span class="sourceLineNo">943</span>    } finally {<a name="line.943"></a>
-<span class="sourceLineNo">944</span>      if (null != zip) zip.close();<a name="line.944"></a>
-<span class="sourceLineNo">945</span>    }<a name="line.945"></a>
+<span class="sourceLineNo">930</span>  private static Path findOrCreateJar(Class&lt;?&gt; my_class, FileSystem fs,<a name="line.930"></a>
+<span class="sourceLineNo">931</span>      Map&lt;String, String&gt; packagedClasses)<a name="line.931"></a>
+<span class="sourceLineNo">932</span>  throws IOException {<a name="line.932"></a>
+<span class="sourceLineNo">933</span>    // attempt to locate an existing jar for the class.<a name="line.933"></a>
+<span class="sourceLineNo">934</span>    String jar = findContainingJar(my_class, packagedClasses);<a name="line.934"></a>
+<span class="sourceLineNo">935</span>    if (null == jar || jar.isEmpty()) {<a name="line.935"></a>
+<span class="sourceLineNo">936</span>      jar = getJar(my_class);<a name="line.936"></a>
+<span class="sourceLineNo">937</span>      updateMap(jar, packagedClasses);<a name="line.937"></a>
+<span class="sourceLineNo">938</span>    }<a name="line.938"></a>
+<span class="sourceLineNo">939</span><a name="line.939"></a>
+<span class="sourceLineNo">940</span>    if (null == jar || jar.isEmpty()) {<a name="line.940"></a>
+<span class="sourceLineNo">941</span>      return null;<a name="line.941"></a>
+<span class="sourceLineNo">942</span>    }<a name="line.942"></a>
+<span class="sourceLineNo">943</span><a name="line.943"></a>
+<span class="sourceLineNo">944</span>    LOG.debug(String.format("For class %s, using jar %s", my_class.getName(), jar));<a name="line.944"></a>
+<span class="sourceLineNo">945</span>    return new Path(jar).makeQualified(fs);<a name="line.945"></a>
 <span class="sourceLineNo">946</span>  }<a name="line.946"></a>
 <span class="sourceLineNo">947</span><a name="line.947"></a>
 <span class="sourceLineNo">948</span>  /**<a name="line.948"></a>
-<span class="sourceLineNo">949</span>   * Find a jar that contains a class of the same name, if any. It will return<a name="line.949"></a>
-<span class="sourceLineNo">950</span>   * a jar file, even if that is not the first thing on the class path that<a name="line.950"></a>
-<span class="sourceLineNo">951</span>   * has a class with the same name. Looks first on the classpath and then in<a name="line.951"></a>
-<span class="sourceLineNo">952</span>   * the &lt;code&gt;packagedClasses&lt;/code&gt; map.<a name="line.952"></a>
-<span class="sourceLineNo">953</span>   * @param my_class the class to find.<a name="line.953"></a>
-<span class="sourceLineNo">954</span>   * @return a jar file that contains the class, or null.<a name="line.954"></a>
-<span class="sourceLineNo">955</span>   * @throws IOException<a name="line.955"></a>
-<span class="sourceLineNo">956</span>   */<a name="line.956"></a>
-<span class="sourceLineNo">957</span>  private static String findContainingJar(Class&lt;?&gt; my_class, Map&lt;String, String&gt; packagedClasses)<a name="line.957"></a>
-<span class="sourceLineNo">958</span>      throws IOException {<a name="line.958"></a>
-<span class="sourceLineNo">959</span>    ClassLoader loader = my_class.getClassLoader();<a name="line.959"></a>
-<span class="sourceLineNo">960</span><a name="line.960"></a>
-<span class="sourceLineNo">961</span>    String class_file = my_class.getName().replaceAll("\\.", "/") + ".class";<a name="line.961"></a>
-<span class="sourceLineNo">962</span><a name="line.962"></a>
-<span class="sourceLineNo">963</span>    if (loader != null) {<a name="line.963"></a>
-<span class="sourceLineNo">964</span>      // first search the classpath<a name="line.964"></a>
-<span class="sourceLineNo">965</span>      for (Enumeration&lt;URL&gt; itr = loader.getResources(class_file); itr.hasMoreElements();) {<a name="line.965"></a>
-<span class="sourceLineNo">966</span>        URL url = itr.nextElement();<a name="line.966"></a>
-<span class="sourceLineNo">967</span>        if ("jar".equals(url.getProtocol())) {<a name="line.967"></a>
-<span class="sourceLineNo">968</span>          String toReturn = url.getPath();<a name="line.968"></a>
-<span class="sourceLineNo">969</span>          if (toReturn.startsWith("file:")) {<a name="line.969"></a>
-<span class="sourceLineNo">970</span>            toReturn = toReturn.substring("file:".length());<a name="line.970"></a>
-<span class="sourceLineNo">971</span>          }<a name="line.971"></a>
-<span class="sourceLineNo">972</span>          // URLDecoder is a misnamed class, since it actually decodes<a name="line.972"></a>
-<span class="sourceLineNo">973</span>          // x-www-form-urlencoded MIME type rather than actual<a name="line.973"></a>
-<span class="sourceLineNo">974</span>          // URL encoding (which the file path has). Therefore it would<a name="line.974"></a>
-<span class="sourceLineNo">975</span>          // decode +s to ' 's which is incorrect (spaces are actually<a name="line.975"></a>
-<span class="sourceLineNo">976</span>          // either unencoded or encoded as "%20"). Replace +s first, so<a name="line.976"></a>
-<span class="sourceLineNo">977</span>          // that they are kept sacred during the decoding process.<a name="line.977"></a>
-<span class="sourceLineNo">978</span>          toReturn = toReturn.replaceAll("\\+", "%2B");<a name="line.978"></a>
-<span class="sourceLineNo">979</span>          toReturn = URLDecoder.decode(toReturn, "UTF-8");<a name="line.979"></a>
-<span class="sourceLineNo">980</span>          return toReturn.replaceAll("!.*$", "");<a name="line.980"></a>
-<span class="sourceLineNo">981</span>        }<a name="line.981"></a>
-<span class="sourceLineNo">982</span>      }<a name="line.982"></a>
-<span class="sourceLineNo">983</span>    }<a name="line.983"></a>
+<span class="sourceLineNo">949</span>   * Add entries to &lt;code&gt;packagedClasses&lt;/code&gt; corresponding to class files<a name="line.949"></a>
+<span class="sourceLineNo">950</span>   * contained in &lt;code&gt;jar&lt;/code&gt;.<a name="line.950"></a>
+<span class="sourceLineNo">951</span>   * @param jar The jar who's content to list.<a name="line.951"></a>
+<span class="sourceLineNo">952</span>   * @param packagedClasses map[class -&gt; jar]<a name="line.952"></a>
+<span class="sourceLineNo">953</span>   */<a name="line.953"></a>
+<span class="sourceLineNo">954</span>  private static void updateMap(String jar, Map&lt;String, String&gt; packagedClasses) throws IOException {<a name="line.954"></a>
+<span class="sourceLineNo">955</span>    if (null == jar || jar.isEmpty()) {<a name="line.955"></a>
+<span class="sourceLineNo">956</span>      return;<a name="line.956"></a>
+<span class="sourceLineNo">957</span>    }<a name="line.957"></a>
+<span class="sourceLineNo">958</span>    ZipFile zip = null;<a name="line.958"></a>
+<span class="sourceLineNo">959</span>    try {<a name="line.959"></a>
+<span class="sourceLineNo">960</span>      zip = new ZipFile(jar);<a name="line.960"></a>
+<span class="sourceLineNo">961</span>      for (Enumeration&lt;? extends ZipEntry&gt; iter = zip.entries(); iter.hasMoreElements();) {<a name="line.961"></a>
+<span class="sourceLineNo">962</span>        ZipEntry entry = iter.nextElement();<a name="line.962"></a>
+<span class="sourceLineNo">963</span>        if (entry.getName().endsWith("class")) {<a name="line.963"></a>
+<span class="sourceLineNo">964</span>          packagedClasses.put(entry.getName(), jar);<a name="line.964"></a>
+<span class="sourceLineNo">965</span>        }<a name="line.965"></a>
+<span class="sourceLineNo">966</span>      }<a name="line.966"></a>
+<span class="sourceLineNo">967</span>    } finally {<a name="line.967"></a>
+<span class="sourceLineNo">968</span>      if (null != zip) zip.close();<a name="line.968"></a>
+<span class="sourceLineNo">969</span>    }<a name="line.969"></a>
+<span class="sourceLineNo">970</span>  }<a name="line.970"></a>
+<span class="sourceLineNo">971</span><a name="line.971"></a>
+<span class="sourceLineNo">972</span>  /**<a name="line.972"></a>
+<span class="sourceLineNo">973</span>   * Find a jar that contains a class of the same name, if any. It will return<a name="line.973"></a>
+<span class="sourceLineNo">974</span>   * a jar file, even if that is not the first thing on the class path that<a name="line.974"></a>
+<span class="sourceLineNo">975</span>   * has a class with the same name. Looks first on the classpath and then in<a name="line.975"></a>
+<span class="sourceLineNo">976</span>   * the &lt;code&gt;packagedClasses&lt;/code&gt; map.<a name="line.976"></a>
+<span class="sourceLineNo">977</span>   * @param my_class the class to find.<a name="line.977"></a>
+<span class="sourceLineNo">978</span>   * @return a jar file that contains the class, or null.<a name="line.978"></a>
+<span class="sourceLineNo">979</span>   * @throws IOException<a name="line.979"></a>
+<span class="sourceLineNo">980</span>   */<a name="line.980"></a>
+<span class="sourceLineNo">981</span>  private static String findContainingJar(Class&lt;?&gt; my_class, Map&lt;String, String&gt; packagedClasses)<a name="line.981"></a>
+<span class="sourceLineNo">982</span>      throws IOException {<a name="line.982"></a>
+<span class="sourceLineNo">983</span>    ClassLoader loader = my_class.getClassLoader();<a name="line.983"></a>
 <span class="sourceLineNo">984</span><a name="line.984"></a>
-<span class="sourceLineNo">985</span>    // now look in any jars we've packaged using JarFinder. Returns null when<a name="line.985"></a>
-<span class="sourceLineNo">986</span>    // no jar is found.<a name="line.986"></a>
-<span class="sourceLineNo">987</span>    return packagedClasses.get(class_file);<a name="line.987"></a>
-<span class="sourceLineNo">988</span>  }<a name="line.988"></a>
-<span class="sourceLineNo">989</span><a name="line.989"></a>
-<span class="sourceLineNo">990</span>  /**<a name="line.990"></a>
-<span class="sourceLineNo">991</span>   * Invoke 'getJar' on a custom JarFinder implementation. Useful for some job<a name="line.991"></a>
-<span class="sourceLineNo">992</span>   * configuration contexts (HBASE-8140) and also for testing on MRv2.<a name="line.992"></a>
-<span class="sourceLineNo">993</span>   * check if we have HADOOP-9426.<a name="line.993"></a>
-<span class="sourceLineNo">994</span>   * @param my_class the class to find.<a name="line.994"></a>
-<span class="sourceLineNo">995</span>   * @return a jar file that contains the class, or null.<a name="line.995"></a>
-<span class="sourceLineNo">996</span>   */<a name="line.996"></a>
-<span class="sourceLineNo">997</span>  private static String getJar(Class&lt;?&gt; my_class) {<a name="line.997"></a>
-<span class="sourceLineNo">998</span>    String ret = null;<a name="line.998"></a>
-<span class="sourceLineNo">999</span>    try {<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>      ret = JarFinder.getJar(my_class);<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>    } catch (Exception e) {<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>      // toss all other exceptions, related to reflection failure<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>      throw new RuntimeException("getJar invocation failed.", e);<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>    }<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span><a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>    return ret;<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>  }<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>}<a name="line.1008"></a>
+<span class="sourceLineNo">985</span>    String class_file = my_class.getName().replaceAll("\\.", "/") + ".class";<a name="line.985"></a>
+<span class="sourceLineNo">986</span><a name="line.986"></a>
+<span class="sourceLineNo">987</span>    if (loader != null) {<a name="line.987"></a>
+<span class="sourceLineNo">988</span>      // first search the classpath<a name="line.988"></a>
+<span class="sourceLineNo">989</span>      for (Enumeration&lt;URL&gt; itr = loader.getResources(class_file); itr.hasMoreElements();) {<a name="line.989"></a>
+<span class="sourceLineNo">990</span>        URL url = itr.nextElement();<a name="line.990"></a>
+<span class="sourceLineNo">991</span>        if ("jar".equals(url.getProtocol())) {<a name="line.991"></a>
+<span class="sourceLineNo">992</span>          String toReturn = url.getPath();<a name="line.992"></a>
+<span class="sourceLineNo">993</span>          if (toReturn.startsWith("file:")) {<a name="line.993"></a>
+<span class="sourceLineNo">994</span>            toReturn = toReturn.substring("file:".length());<a name="line.994"></a>
+<span class="sourceLineNo">995</span>          }<a name="line.995"></a>
+<span class="sourceLineNo">996</span>          // URLDecoder is a misnamed class, since it actually decodes<a name="line.996"></a>
+<span class="sourceLineNo">997</span>          // x-www-form-urlencoded MIME type rather than actual<a name="line.997"></a>
+<span class="sourceLineNo">998</span>          // URL encoding (which the file path has). Therefore it would<a name="line.998"></a>
+<span class="sourceLineNo">999</span>          // decode +s to ' 's which is incorrect (spaces are actually<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>          // either unencoded or encoded as "%20"). Replace +s first, so<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>          // that they are kept sacred during the decoding process.<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>          toReturn = toReturn.replaceAll("\\+", "%2B");<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>          toReturn = URLDecoder.decode(toReturn, "UTF-8");<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>          return toReturn.replaceAll("!.*$", "");<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>        }<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>      }<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>    }<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span><a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>    // now look in any jars we've packaged using JarFinder. Returns null when<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>    // no jar is found.<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>    return packagedClasses.get(class_file);<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>  }<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span><a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>  /**<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>   * Invoke 'getJar' on a custom JarFinder implementation. Useful for some job<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>   * configuration contexts (HBASE-8140) and also for testing on MRv2.<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>   * check if we have HADOOP-9426.<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>   * @param my_class the class to find.<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>   * @return a jar file that contains the class, or null.<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>   */<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>  private static String getJar(Class&lt;?&gt; my_class) {<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>    String ret = null;<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>    try {<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>      ret = JarFinder.getJar(my_class);<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>    } catch (Exception e) {<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>      // toss all other exceptions, related to reflection failure<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>      throw new RuntimeException("getJar invocation failed.", e);<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>    }<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span><a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>    return ret;<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>  }<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>}<a name="line.1032"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/a5d8deaf/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
index 55811d7..391d476 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
@@ -290,7 +290,7 @@
 <span class="sourceLineNo">282</span>          RegionLocator regionLocator = conn.getRegionLocator(tableName)) {<a name="line.282"></a>
 <span class="sourceLineNo">283</span>        HFileOutputFormat2.configureIncrementalLoad(job, table.getTableDescriptor(), regionLocator);<a name="line.283"></a>
 <span class="sourceLineNo">284</span>      }<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      TableMapReduceUtil.addDependencyJars(job.getConfiguration(),<a name="line.285"></a>
+<span class="sourceLineNo">285</span>      TableMapReduceUtil.addDependencyJarsForClasses(job.getConfiguration(),<a name="line.285"></a>
 <span class="sourceLineNo">286</span>          com.google.common.base.Preconditions.class);<a name="line.286"></a>
 <span class="sourceLineNo">287</span>    } else {<a name="line.287"></a>
 <span class="sourceLineNo">288</span>      // output to live cluster<a name="line.288"></a>
@@ -303,7 +303,7 @@
 <span class="sourceLineNo">295</span>    }<a name="line.295"></a>
 <span class="sourceLineNo">296</span>    String codecCls = WALCellCodec.getWALCellCodecClass(conf);<a name="line.296"></a>
 <span class="sourceLineNo">297</span>    try {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      TableMapReduceUtil.addDependencyJars(job.getConfiguration(), Class.forName(codecCls));<a name="line.298"></a>
+<span class="sourceLineNo">298</span>      TableMapReduceUtil.addDependencyJarsForClasses(job.getConfiguration(), Class.forName(codecCls));<a name="line.298"></a>
 <span class="sourceLineNo">299</span>    } catch (Exception e) {<a name="line.299"></a>
 <span class="sourceLineNo">300</span>      throw new IOException("Cannot determine wal codec class " + codecCls, e);<a name="line.300"></a>
 <span class="sourceLineNo">301</span>    }<a name="line.301"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/a5d8deaf/apidocs/src-html/org/apache/hadoop/hbase/rest/Constants.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/rest/Constants.html b/apidocs/src-html/org/apache/hadoop/hbase/rest/Constants.html
index 192ca09..f117b47 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/rest/Constants.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/rest/Constants.html
@@ -76,14 +76,15 @@
 <span class="sourceLineNo">068</span>  String SCAN_BATCH_SIZE = "batchsize";<a name="line.68"></a>
 <span class="sourceLineNo">069</span>  String SCAN_LIMIT = "limit";<a name="line.69"></a>
 <span class="sourceLineNo">070</span>  String SCAN_FETCH_SIZE = "hbase.rest.scan.fetchsize";<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  String SCAN_FILTER = "filter"; <a name="line.71"></a>
-<span class="sourceLineNo">072</span>  String CUSTOM_FILTERS = "hbase.rest.custom.filters"; <a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  String ROW_KEYS_PARAM_NAME = "row";<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  /** If this query parameter is present when processing row or scanner resources,<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      it disables server side block caching */<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  String NOCACHE_PARAM_NAME = "nocache";<a name="line.77"></a>
-<span class="sourceLineNo">078</span>}<a name="line.78"></a>
+<span class="sourceLineNo">071</span>  String SCAN_FILTER = "filter";<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  String SCAN_REVERSED = "reversed";<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  String CUSTOM_FILTERS = "hbase.rest.custom.filters"; <a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>  String ROW_KEYS_PARAM_NAME = "row";<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  /** If this query parameter is present when processing row or scanner resources,<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      it disables server side block caching */<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  String NOCACHE_PARAM_NAME = "nocache";<a name="line.78"></a>
+<span class="sourceLineNo">079</span>}<a name="line.79"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/a5d8deaf/apidocs/src-html/org/apache/hadoop/hbase/rest/client/RemoteHTable.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/rest/client/RemoteHTable.html b/apidocs/src-html/org/apache/hadoop/hbase/rest/client/RemoteHTable.html
index 9064565..ff8039c 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/rest/client/RemoteHTable.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/rest/client/RemoteHTable.html
@@ -868,15 +868,37 @@
 <span class="sourceLineNo">860</span>  }<a name="line.860"></a>
 <span class="sourceLineNo">861</span><a name="line.861"></a>
 <span class="sourceLineNo">862</span>  @Override<a name="line.862"></a>
-<span class="sourceLineNo">863</span>  public void setRpcTimeout(int rpcTimeout) {<a name="line.863"></a>
-<span class="sourceLineNo">864</span>    throw new UnsupportedOperationException();<a name="line.864"></a>
-<span class="sourceLineNo">865</span>  }<a name="line.865"></a>
-<span class="sourceLineNo">866</span><a name="line.866"></a>
-<span class="sourceLineNo">867</span>  @Override<a name="line.867"></a>
-<span class="sourceLineNo">868</span>  public int getRpcTimeout() {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>    throw new UnsupportedOperationException();<a name="line.869"></a>
-<span class="sourceLineNo">870</span>  }<a name="line.870"></a>
-<span class="sourceLineNo">871</span>}<a name="line.871"></a>
+<span class="sourceLineNo">863</span>  @Deprecated<a name="line.863"></a>
+<span class="sourceLineNo">864</span>  public void setRpcTimeout(int rpcTimeout) {<a name="line.864"></a>
+<span class="sourceLineNo">865</span>    throw new UnsupportedOperationException();<a name="line.865"></a>
+<span class="sourceLineNo">866</span>  }<a name="line.866"></a>
+<span class="sourceLineNo">867</span><a name="line.867"></a>
+<span class="sourceLineNo">868</span>  @Override<a name="line.868"></a>
+<span class="sourceLineNo">869</span>  @Deprecated<a name="line.869"></a>
+<span class="sourceLineNo">870</span>  public int getRpcTimeout() {<a name="line.870"></a>
+<span class="sourceLineNo">871</span>    throw new UnsupportedOperationException();<a name="line.871"></a>
+<span class="sourceLineNo">872</span>  }<a name="line.872"></a>
+<span class="sourceLineNo">873</span><a name="line.873"></a>
+<span class="sourceLineNo">874</span>  @Override<a name="line.874"></a>
+<span class="sourceLineNo">875</span>  public int getReadRpcTimeout() {<a name="line.875"></a>
+<span class="sourceLineNo">876</span>    throw new UnsupportedOperationException();<a name="line.876"></a>
+<span class="sourceLineNo">877</span>  }<a name="line.877"></a>
+<span class="sourceLineNo">878</span><a name="line.878"></a>
+<span class="sourceLineNo">879</span>  @Override<a name="line.879"></a>
+<span class="sourceLineNo">880</span>  public void setReadRpcTimeout(int readRpcTimeout) {<a name="line.880"></a>
+<span class="sourceLineNo">881</span>    throw new UnsupportedOperationException();<a name="line.881"></a>
+<span class="sourceLineNo">882</span>  }<a name="line.882"></a>
+<span class="sourceLineNo">883</span><a name="line.883"></a>
+<span class="sourceLineNo">884</span>  @Override<a name="line.884"></a>
+<span class="sourceLineNo">885</span>  public int getWriteRpcTimeout() {<a name="line.885"></a>
+<span class="sourceLineNo">886</span>    throw new UnsupportedOperationException();<a name="line.886"></a>
+<span class="sourceLineNo">887</span>  }<a name="line.887"></a>
+<span class="sourceLineNo">888</span><a name="line.888"></a>
+<span class="sourceLineNo">889</span>  @Override<a name="line.889"></a>
+<span class="sourceLineNo">890</span>  public void setWriteRpcTimeout(int writeRpcTimeout) {<a name="line.890"></a>
+<span class="sourceLineNo">891</span>    throw new UnsupportedOperationException();<a name="line.891"></a>
+<span class="sourceLineNo">892</span>  }<a name="line.892"></a>
+<span class="sourceLineNo">893</span>}<a name="line.893"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/a5d8deaf/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index 6acf7e9..5814bf7 100644
--- a/book.html
+++ b/book.html
@@ -514,8 +514,8 @@ Do not download the file ending in <em>src.tar.gz</em> for now.</p>
 <p>Extract the downloaded file, and change to the newly-created directory.</p>
 <div class="listingblock">
 <div class="content">
-<pre>$ tar xzvf hbase-&lt;?eval ${project.version}?&gt;-bin.tar.gz
-$ cd hbase-&lt;?eval ${project.version}?&gt;/</pre>
+<pre class="CodeRay highlight"><code data-lang="java">$ tar xzvf hbase-2.0.0-SNAPSHOT-bin.tar.gz
+$ cd hbase-2.0.0-SNAPSHOT/</code></pre>
 </div>
 </div>
 </li>
@@ -1878,7 +1878,7 @@ Do not move to Apache HBase 0.96.x if you cannot upgrade your Hadoop. See <a hre
 <p>HBase will lose data unless it is running on an HDFS that has a durable <code>sync</code> implementation.
 DO NOT use Hadoop 0.20.2, Hadoop 0.20.203.0, and Hadoop 0.20.204.0 which DO NOT have this attribute.
 Currently only Hadoop versions 0.20.205.x or any release in excess of this version&#8201;&#8212;&#8201;this includes hadoop-1.0.0&#8201;&#8212;&#8201;have a working, durable sync.
-The Cloudera blog post <a href="http://www.cloudera.com/blog/2012/01/an-update-on-apache-hadoop-1-0/">An
+The Cloudera blog post <a href="https://blog.cloudera.com/blog/2012/01/an-update-on-apache-hadoop-1-0/">An
             update on Apache Hadoop 1.0</a> by Charles Zedlweski has a nice exposition on how all the Hadoop versions relate.
 It&#8217;s worth checking out if you are having trouble making sense of the Hadoop version morass.</p>
 </div>
@@ -9471,7 +9471,7 @@ This example assumes you use a BASH-compatible shell.</p>
 </div>
 </div>
 <div class="paragraph">
-<p>When the command runs, internally, the HBase JAR finds the dependencies it needs for ZooKeeper, Guava, and its other dependencies on the passed <code>HADOOP_CLASSPATH</code> and adds the JARs to the MapReduce job configuration.
+<p>When the command runs, internally, the HBase JAR finds the dependencies it needs and adds them to the MapReduce job configuration.
 See the source at <code>TableMapReduceUtil#addDependencyJars(org.apache.hadoop.mapreduce.Job)</code> for how this is done.</p>
 </div>
 <div class="paragraph">
@@ -10300,7 +10300,7 @@ for RPCs (e.g <code>hbase.security.authentication</code> = <code>kerberos</code>
 <div class="sectionbody">
 <div class="paragraph">
 <p>Newer releases of Apache HBase (&gt;= 0.92) support optional SASL authentication of clients.
-See also Matteo Bertozzi&#8217;s article on <a href="http://www.cloudera.com/blog/2012/09/understanding-user-authentication-and-authorization-in-apache-hbase/">Understanding User Authentication and Authorization in Apache HBase</a>.</p>
+See also Matteo Bertozzi&#8217;s article on <a href="https://blog.cloudera.com/blog/2012/09/understanding-user-authentication-and-authorization-in-apache-hbase/">Understanding User Authentication and Authorization in Apache HBase</a>.</p>
 </div>
 <div class="paragraph">
 <p>This describes how to set up Apache HBase and clients for connection to secure HBase resources.</p>
@@ -10701,7 +10701,7 @@ So it can apply proper authorizations.</p>
 <div class="sectionbody">
 <div class="paragraph">
 <p>Newer releases of Apache HBase (&gt;= 0.92) support optional SASL authentication of clients.
-See also Matteo Bertozzi&#8217;s article on <a href="http://www.cloudera.com/blog/2012/09/understanding-user-authentication-and-authorization-in-apache-hbase/">Understanding User Authentication and Authorization in Apache HBase</a>.</p>
+See also Matteo Bertozzi&#8217;s article on <a href="https://blog.cloudera.com/blog/2012/09/understanding-user-authentication-and-authorization-in-apache-hbase/">Understanding User Authentication and Authorization in Apache HBase</a>.</p>
 </div>
 <div class="paragraph">
 <p>This describes how to set up Apache HBase and clients for simple user access to HBase resources.</p>
@@ -21600,7 +21600,7 @@ The best way to approach this type of problem is to walk the log up to where it
 For example, if ulimit and max transfer threads (the two most important initial settings, see <a href="#ulimit">[ulimit]</a> and <a href="#dfs.datanode.max.transfer.threads"><code>dfs.datanode.max.transfer.threads</code> </a>) aren&#8217;t changed, it will make it impossible at some point for DataNodes to create new threads that from the HBase point of view is seen as if HDFS was gone.
 Think about what would happen if your MySQL database was suddenly unable to access files on your local file system, well it&#8217;s the same with HBase and HDFS.
 Another very common reason to see RegionServers committing seppuku is when they enter prolonged garbage collection pauses that last longer than the default ZooKeeper session timeout.
-For more information on GC pauses, see the <a href="http://www.cloudera.com/blog/2011/02/avoiding-full-gcs-in-hbase-with-memstore-local-allocation-buffers-part-1/">3 part blog post</a> by Todd Lipcon and <a href="#gcpause">Long GC pauses</a> above.</p>
+For more information on GC pauses, see the <a href="https://blog.cloudera.com/blog/2011/02/avoiding-full-gcs-in-hbase-with-memstore-local-allocation-buffers-part-1/">3 part blog post</a> by Todd Lipcon and <a href="#gcpause">Long GC pauses</a> above.</p>
 </div>
 </div>
 </div>
@@ -21796,7 +21796,7 @@ If your ParNew is very large after running HBase for a while, in one example a P
 </div>
 </div>
 <div class="paragraph">
-<p>For more information on GC pauses, see the <a href="http://www.cloudera.com/blog/2011/02/avoiding-full-gcs-in-hbase-with-memstore-local-allocation-buffers-part-1/">3 part blog post</a> by Todd Lipcon and <a href="#gcpause">Long GC pauses</a> above.</p>
+<p>For more information on GC pauses, see the <a href="https://blog.cloudera.com/blog/2011/02/avoiding-full-gcs-in-hbase-with-memstore-local-allocation-buffers-part-1/">3 part blog post</a> by Todd Lipcon and <a href="#gcpause">Long GC pauses</a> above.</p>
 </div>
 </div>
 </div>
@@ -24169,7 +24169,7 @@ For performance consider the following general options:
 </table>
 </div>
 <div class="paragraph">
-<p>See Jonathan Hsieh&#8217;s <a href="http://www.cloudera.com/blog/2012/06/online-hbase-backups-with-copytable-2/">Online
+<p>See Jonathan Hsieh&#8217;s <a href="https://blog.cloudera.com/blog/2012/06/online-hbase-backups-with-copytable-2/">Online
           HBase Backups with CopyTable</a> blog post for more on <code>CopyTable</code>.</p>
 </div>
 </div>
@@ -28887,7 +28887,9 @@ justification=<span class="string"><span class="delimiter">&quot;</span><span cl
 </div>
 </div>
 <div class="paragraph">
-<p>It is important to use the Apache-licensed version of the annotations.</p>
+<p>It is important to use the Apache-licensed version of the annotations. That generally means using
+annotations in the <code>edu.umd.cs.findbugs.annotations</code> package so that we can rely on the cleanroom
+reimplementation rather than annotations in the <code>javax.annotations</code> package.</p>
 </div>
 </div>
 <div class="sect4">
@@ -33537,12 +33539,12 @@ For more information see <a href="#hbase.encryption.server">hbase.encryption.ser
 <div class="sect2">
 <h3 id="other.info.sites"><a class="anchor" href="#other.info.sites"></a>I.4. HBase Sites</h3>
 <div class="paragraph">
-<p><a href="http://www.cloudera.com/blog/category/hbase/">Cloudera&#8217;s HBase Blog</a> has a lot of links to useful HBase information.</p>
+<p><a href="https://blog.cloudera.com/blog/category/hbase/">Cloudera&#8217;s HBase Blog</a> has a lot of links to useful HBase information.</p>
 </div>
 <div class="ulist">
 <ul>
 <li>
-<p><a href="http://www.cloudera.com/blog/2010/04/cap-confusion-problems-with-partition-tolerance/">CAP Confusion</a> is a relevant entry for background information on distributed storage systems.</p>
+<p><a href="https://blog.cloudera.com/blog/2010/04/cap-confusion-problems-with-partition-tolerance/">CAP Confusion</a> is a relevant entry for background information on distributed storage systems.</p>
 </li>
 </ul>
 </div>
@@ -34063,7 +34065,7 @@ The server will return cellblocks compressed using this same compressor as long
 <div id="footer">
 <div id="footer-text">
 Version 2.0.0-SNAPSHOT<br>
-Last updated 2016-07-28 14:33:27 UTC
+Last updated 2016-07-30 14:32:09 UTC
 </div>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/a5d8deaf/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index 5b3eac7..d320353 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160801" />
+    <meta name="Date-Revision-yyyymmdd" content="20160807" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Bulk Loads in Apache HBase (TM)
@@ -305,7 +305,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-08-01</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-08-07</li>
             </p>
                 </div>