http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1342ac30/apache_hbase_reference_guide.pdfmarks ---------------------------------------------------------------------- diff --git a/apache_hbase_reference_guide.pdfmarks b/apache_hbase_reference_guide.pdfmarks index 3464d39..1b5a63e 100644 --- a/apache_hbase_reference_guide.pdfmarks +++ b/apache_hbase_reference_guide.pdfmarks @@ -2,8 +2,8 @@ /Author (Apache HBase Team) /Subject () /Keywords () - /ModDate (D:20170607144925) - /CreationDate (D:20170607144925) + /ModDate (D:20170608144928) + /CreationDate (D:20170608144928) /Creator (Asciidoctor PDF 1.5.0.alpha.6, based on Prawn 1.2.1) /Producer () /DOCINFO pdfmark
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1342ac30/apidocs/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html ---------------------------------------------------------------------- diff --git a/apidocs/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html b/apidocs/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html index 097c420..74bf5be 100644 --- a/apidocs/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html +++ b/apidocs/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html @@ -1223,7 +1223,7 @@ public static void <a href="../../../../../src-html/org/apache/hadoop/ <ul class="blockList"> <li class="blockList"> <h4>buildDependencyClasspath</h4> -<pre>public static <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html#line.805">buildDependencyClasspath</a>(org.apache.hadoop.conf.Configuration conf)</pre> +<pre>public static <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html#line.806">buildDependencyClasspath</a>(org.apache.hadoop.conf.Configuration conf)</pre> <div class="block">Returns a classpath string built from the content of the "tmpjars" value in <code>conf</code>. Also exposed to shell scripts via `bin/hbase mapredcp`.</div> </li> @@ -1234,7 +1234,7 @@ public static void <a href="../../../../../src-html/org/apache/hadoop/ <ul class="blockList"> <li class="blockList"> <h4>addDependencyJars</h4> -<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html#line.829">addDependencyJars</a>(org.apache.hadoop.mapreduce.Job job) +<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html#line.830">addDependencyJars</a>(org.apache.hadoop.mapreduce.Job job) throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre> <div class="block">Add the HBase dependency jars as well as jars for any of the configured job classes to the job configuration, so that JobClient will ship them @@ -1252,7 +1252,7 @@ public static void <a href="../../../../../src-html/org/apache/hadoop/ <li class="blockList"> <h4>addDependencyJars</h4> <pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a> -public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html#line.855">addDependencyJars</a>(org.apache.hadoop.conf.Configuration conf, +public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html#line.856">addDependencyJars</a>(org.apache.hadoop.conf.Configuration conf, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?>... classes) throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre> <div class="block"><span class="deprecatedLabel">Deprecated.</span> <span class="deprecationComment">rely on <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html#addDependencyJars-org.apache.hadoop.mapreduce.Job-"><code>addDependencyJars(Job)</code></a> instead.</span></div> http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1342ac30/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 bd316ac..49f1e8d 100644 --- a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html +++ b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html @@ -793,245 +793,246 @@ <span class="sourceLineNo">785</span> org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.class, // hbase-protocol-shaded<a name="line.785"></a> <span class="sourceLineNo">786</span> org.apache.hadoop.hbase.client.Put.class, // hbase-client<a name="line.786"></a> <span class="sourceLineNo">787</span> org.apache.hadoop.hbase.CompatibilityFactory.class, // hbase-hadoop-compat<a name="line.787"></a> -<span class="sourceLineNo">788</span> org.apache.hadoop.hbase.mapreduce.TableMapper.class, // hbase-server<a name="line.788"></a> -<span class="sourceLineNo">789</span> org.apache.hadoop.hbase.metrics.impl.FastLongHistogram.class, // hbase-metrics<a name="line.789"></a> -<span class="sourceLineNo">790</span> org.apache.hadoop.hbase.metrics.Snapshot.class, // hbase-metrics-api<a name="line.790"></a> -<span class="sourceLineNo">791</span> prefixTreeCodecClass, // hbase-prefix-tree (if null will be skipped)<a name="line.791"></a> -<span class="sourceLineNo">792</span> // pull necessary dependencies<a name="line.792"></a> -<span class="sourceLineNo">793</span> org.apache.zookeeper.ZooKeeper.class,<a name="line.793"></a> -<span class="sourceLineNo">794</span> io.netty.channel.Channel.class,<a name="line.794"></a> -<span class="sourceLineNo">795</span> com.google.protobuf.Message.class,<a name="line.795"></a> -<span class="sourceLineNo">796</span> com.google.common.collect.Lists.class,<a name="line.796"></a> -<span class="sourceLineNo">797</span> org.apache.htrace.Trace.class,<a name="line.797"></a> -<span class="sourceLineNo">798</span> com.codahale.metrics.MetricRegistry.class);<a name="line.798"></a> -<span class="sourceLineNo">799</span> }<a name="line.799"></a> -<span class="sourceLineNo">800</span><a name="line.800"></a> -<span class="sourceLineNo">801</span> /**<a name="line.801"></a> -<span class="sourceLineNo">802</span> * Returns a classpath string built from the content of the "tmpjars" value in {@code conf}.<a name="line.802"></a> -<span class="sourceLineNo">803</span> * Also exposed to shell scripts via `bin/hbase mapredcp`.<a name="line.803"></a> -<span class="sourceLineNo">804</span> */<a name="line.804"></a> -<span class="sourceLineNo">805</span> public static String buildDependencyClasspath(Configuration conf) {<a name="line.805"></a> -<span class="sourceLineNo">806</span> if (conf == null) {<a name="line.806"></a> -<span class="sourceLineNo">807</span> throw new IllegalArgumentException("Must provide a configuration object.");<a name="line.807"></a> -<span class="sourceLineNo">808</span> }<a name="line.808"></a> -<span class="sourceLineNo">809</span> Set<String> paths = new HashSet<>(conf.getStringCollection("tmpjars"));<a name="line.809"></a> -<span class="sourceLineNo">810</span> if (paths.isEmpty()) {<a name="line.810"></a> -<span class="sourceLineNo">811</span> throw new IllegalArgumentException("Configuration contains no tmpjars.");<a name="line.811"></a> -<span class="sourceLineNo">812</span> }<a name="line.812"></a> -<span class="sourceLineNo">813</span> StringBuilder sb = new StringBuilder();<a name="line.813"></a> -<span class="sourceLineNo">814</span> for (String s : paths) {<a name="line.814"></a> -<span class="sourceLineNo">815</span> // entries can take the form 'file:/path/to/file.jar'.<a name="line.815"></a> -<span class="sourceLineNo">816</span> int idx = s.indexOf(":");<a name="line.816"></a> -<span class="sourceLineNo">817</span> if (idx != -1) s = s.substring(idx + 1);<a name="line.817"></a> -<span class="sourceLineNo">818</span> if (sb.length() > 0) sb.append(File.pathSeparator);<a name="line.818"></a> -<span class="sourceLineNo">819</span> sb.append(s);<a name="line.819"></a> -<span class="sourceLineNo">820</span> }<a name="line.820"></a> -<span class="sourceLineNo">821</span> return sb.toString();<a name="line.821"></a> -<span class="sourceLineNo">822</span> }<a name="line.822"></a> -<span class="sourceLineNo">823</span><a name="line.823"></a> -<span class="sourceLineNo">824</span> /**<a name="line.824"></a> -<span class="sourceLineNo">825</span> * Add the HBase dependency jars as well as jars for any of the configured<a name="line.825"></a> -<span class="sourceLineNo">826</span> * job classes to the job configuration, so that JobClient will ship them<a name="line.826"></a> -<span class="sourceLineNo">827</span> * to the cluster and add them to the DistributedCache.<a name="line.827"></a> -<span class="sourceLineNo">828</span> */<a name="line.828"></a> -<span class="sourceLineNo">829</span> public static void addDependencyJars(Job job) throws IOException {<a name="line.829"></a> -<span class="sourceLineNo">830</span> addHBaseDependencyJars(job.getConfiguration());<a name="line.830"></a> -<span class="sourceLineNo">831</span> try {<a name="line.831"></a> -<span class="sourceLineNo">832</span> addDependencyJarsForClasses(job.getConfiguration(),<a name="line.832"></a> -<span class="sourceLineNo">833</span> // when making changes here, consider also mapred.TableMapReduceUtil<a name="line.833"></a> -<span class="sourceLineNo">834</span> // pull job classes<a name="line.834"></a> -<span class="sourceLineNo">835</span> job.getMapOutputKeyClass(),<a name="line.835"></a> -<span class="sourceLineNo">836</span> job.getMapOutputValueClass(),<a name="line.836"></a> -<span class="sourceLineNo">837</span> job.getInputFormatClass(),<a name="line.837"></a> -<span class="sourceLineNo">838</span> job.getOutputKeyClass(),<a name="line.838"></a> -<span class="sourceLineNo">839</span> job.getOutputValueClass(),<a name="line.839"></a> -<span class="sourceLineNo">840</span> job.getOutputFormatClass(),<a name="line.840"></a> -<span class="sourceLineNo">841</span> job.getPartitionerClass(),<a name="line.841"></a> -<span class="sourceLineNo">842</span> job.getCombinerClass());<a name="line.842"></a> -<span class="sourceLineNo">843</span> } catch (ClassNotFoundException e) {<a name="line.843"></a> -<span class="sourceLineNo">844</span> throw new IOException(e);<a name="line.844"></a> -<span class="sourceLineNo">845</span> }<a name="line.845"></a> -<span class="sourceLineNo">846</span> }<a name="line.846"></a> -<span class="sourceLineNo">847</span><a name="line.847"></a> -<span class="sourceLineNo">848</span> /**<a name="line.848"></a> -<span class="sourceLineNo">849</span> * Add the jars containing the given classes to the job's configuration<a name="line.849"></a> -<span class="sourceLineNo">850</span> * such that JobClient will ship them to the cluster and add them to<a name="line.850"></a> -<span class="sourceLineNo">851</span> * the DistributedCache.<a name="line.851"></a> -<span class="sourceLineNo">852</span> * @deprecated rely on {@link #addDependencyJars(Job)} instead.<a name="line.852"></a> -<span class="sourceLineNo">853</span> */<a name="line.853"></a> -<span class="sourceLineNo">854</span> @Deprecated<a name="line.854"></a> -<span class="sourceLineNo">855</span> public static void addDependencyJars(Configuration conf,<a name="line.855"></a> -<span class="sourceLineNo">856</span> Class<?>... classes) throws IOException {<a name="line.856"></a> -<span class="sourceLineNo">857</span> LOG.warn("The addDependencyJars(Configuration, Class<?>...) method has been deprecated since it"<a name="line.857"></a> -<span class="sourceLineNo">858</span> + " is easy to use incorrectly. Most users should rely on addDependencyJars(Job) " +<a name="line.858"></a> -<span class="sourceLineNo">859</span> "instead. See HBASE-8386 for more details.");<a name="line.859"></a> -<span class="sourceLineNo">860</span> addDependencyJarsForClasses(conf, classes);<a name="line.860"></a> -<span class="sourceLineNo">861</span> }<a name="line.861"></a> -<span class="sourceLineNo">862</span><a name="line.862"></a> -<span class="sourceLineNo">863</span> /**<a name="line.863"></a> -<span class="sourceLineNo">864</span> * Add the jars containing the given classes to the job's configuration<a name="line.864"></a> -<span class="sourceLineNo">865</span> * such that JobClient will ship them to the cluster and add them to<a name="line.865"></a> -<span class="sourceLineNo">866</span> * the DistributedCache.<a name="line.866"></a> -<span class="sourceLineNo">867</span> *<a name="line.867"></a> -<span class="sourceLineNo">868</span> * N.B. that this method at most adds one jar per class given. If there is more than one<a name="line.868"></a> -<span class="sourceLineNo">869</span> * jar available containing a class with the same name as a given class, we don't define<a name="line.869"></a> -<span class="sourceLineNo">870</span> * which of those jars might be chosen.<a name="line.870"></a> -<span class="sourceLineNo">871</span> *<a name="line.871"></a> -<span class="sourceLineNo">872</span> * @param conf The Hadoop Configuration to modify<a name="line.872"></a> -<span class="sourceLineNo">873</span> * @param classes will add just those dependencies needed to find the given classes<a name="line.873"></a> -<span class="sourceLineNo">874</span> * @throws IOException if an underlying library call fails.<a name="line.874"></a> -<span class="sourceLineNo">875</span> */<a name="line.875"></a> -<span class="sourceLineNo">876</span> @InterfaceAudience.Private<a name="line.876"></a> -<span class="sourceLineNo">877</span> public static void addDependencyJarsForClasses(Configuration conf,<a name="line.877"></a> -<span class="sourceLineNo">878</span> Class<?>... classes) throws IOException {<a name="line.878"></a> -<span class="sourceLineNo">879</span><a name="line.879"></a> -<span class="sourceLineNo">880</span> FileSystem localFs = FileSystem.getLocal(conf);<a name="line.880"></a> -<span class="sourceLineNo">881</span> Set<String> jars = new HashSet<>();<a name="line.881"></a> -<span class="sourceLineNo">882</span> // Add jars that are already in the tmpjars variable<a name="line.882"></a> -<span class="sourceLineNo">883</span> jars.addAll(conf.getStringCollection("tmpjars"));<a name="line.883"></a> -<span class="sourceLineNo">884</span><a name="line.884"></a> -<span class="sourceLineNo">885</span> // add jars as we find them to a map of contents jar name so that we can avoid<a name="line.885"></a> -<span class="sourceLineNo">886</span> // creating new jars for classes that have already been packaged.<a name="line.886"></a> -<span class="sourceLineNo">887</span> Map<String, String> packagedClasses = new HashMap<>();<a name="line.887"></a> -<span class="sourceLineNo">888</span><a name="line.888"></a> -<span class="sourceLineNo">889</span> // Add jars containing the specified classes<a name="line.889"></a> -<span class="sourceLineNo">890</span> for (Class<?> clazz : classes) {<a name="line.890"></a> -<span class="sourceLineNo">891</span> if (clazz == null) continue;<a name="line.891"></a> -<span class="sourceLineNo">892</span><a name="line.892"></a> -<span class="sourceLineNo">893</span> Path path = findOrCreateJar(clazz, localFs, packagedClasses);<a name="line.893"></a> -<span class="sourceLineNo">894</span> if (path == null) {<a name="line.894"></a> -<span class="sourceLineNo">895</span> LOG.warn("Could not find jar for class " + clazz +<a name="line.895"></a> -<span class="sourceLineNo">896</span> " in order to ship it to the cluster.");<a name="line.896"></a> -<span class="sourceLineNo">897</span> continue;<a name="line.897"></a> -<span class="sourceLineNo">898</span> }<a name="line.898"></a> -<span class="sourceLineNo">899</span> if (!localFs.exists(path)) {<a name="line.899"></a> -<span class="sourceLineNo">900</span> LOG.warn("Could not validate jar file " + path + " for class "<a name="line.900"></a> -<span class="sourceLineNo">901</span> + clazz);<a name="line.901"></a> -<span class="sourceLineNo">902</span> continue;<a name="line.902"></a> -<span class="sourceLineNo">903</span> }<a name="line.903"></a> -<span class="sourceLineNo">904</span> jars.add(path.toString());<a name="line.904"></a> -<span class="sourceLineNo">905</span> }<a name="line.905"></a> -<span class="sourceLineNo">906</span> if (jars.isEmpty()) return;<a name="line.906"></a> -<span class="sourceLineNo">907</span><a name="line.907"></a> -<span class="sourceLineNo">908</span> conf.set("tmpjars", StringUtils.arrayToString(jars.toArray(new String[jars.size()])));<a name="line.908"></a> -<span class="sourceLineNo">909</span> }<a name="line.909"></a> -<span class="sourceLineNo">910</span><a name="line.910"></a> -<span class="sourceLineNo">911</span> /**<a name="line.911"></a> -<span class="sourceLineNo">912</span> * Finds the Jar for a class or creates it if it doesn't exist. If the class is in<a name="line.912"></a> -<span class="sourceLineNo">913</span> * a directory in the classpath, it creates a Jar on the fly with the<a name="line.913"></a> -<span class="sourceLineNo">914</span> * contents of the directory and returns the path to that Jar. If a Jar is<a name="line.914"></a> -<span class="sourceLineNo">915</span> * created, it is created in the system temporary directory. Otherwise,<a name="line.915"></a> -<span class="sourceLineNo">916</span> * returns an existing jar that contains a class of the same name. Maintains<a name="line.916"></a> -<span class="sourceLineNo">917</span> * a mapping from jar contents to the tmp jar created.<a name="line.917"></a> -<span class="sourceLineNo">918</span> * @param my_class the class to find.<a name="line.918"></a> -<span class="sourceLineNo">919</span> * @param fs the FileSystem with which to qualify the returned path.<a name="line.919"></a> -<span class="sourceLineNo">920</span> * @param packagedClasses a map of class name to path.<a name="line.920"></a> -<span class="sourceLineNo">921</span> * @return a jar file that contains the class.<a name="line.921"></a> -<span class="sourceLineNo">922</span> * @throws IOException<a name="line.922"></a> -<span class="sourceLineNo">923</span> */<a name="line.923"></a> -<span class="sourceLineNo">924</span> private static Path findOrCreateJar(Class<?> my_class, FileSystem fs,<a name="line.924"></a> -<span class="sourceLineNo">925</span> Map<String, String> packagedClasses)<a name="line.925"></a> -<span class="sourceLineNo">926</span> throws IOException {<a name="line.926"></a> -<span class="sourceLineNo">927</span> // attempt to locate an existing jar for the class.<a name="line.927"></a> -<span class="sourceLineNo">928</span> String jar = findContainingJar(my_class, packagedClasses);<a name="line.928"></a> -<span class="sourceLineNo">929</span> if (null == jar || jar.isEmpty()) {<a name="line.929"></a> -<span class="sourceLineNo">930</span> jar = getJar(my_class);<a name="line.930"></a> -<span class="sourceLineNo">931</span> updateMap(jar, packagedClasses);<a name="line.931"></a> -<span class="sourceLineNo">932</span> }<a name="line.932"></a> -<span class="sourceLineNo">933</span><a name="line.933"></a> -<span class="sourceLineNo">934</span> if (null == jar || jar.isEmpty()) {<a name="line.934"></a> -<span class="sourceLineNo">935</span> return null;<a name="line.935"></a> -<span class="sourceLineNo">936</span> }<a name="line.936"></a> -<span class="sourceLineNo">937</span><a name="line.937"></a> -<span class="sourceLineNo">938</span> LOG.debug(String.format("For class %s, using jar %s", my_class.getName(), jar));<a name="line.938"></a> -<span class="sourceLineNo">939</span> return new Path(jar).makeQualified(fs);<a name="line.939"></a> -<span class="sourceLineNo">940</span> }<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> * Add entries to <code>packagedClasses</code> corresponding to class files<a name="line.943"></a> -<span class="sourceLineNo">944</span> * contained in <code>jar</code>.<a name="line.944"></a> -<span class="sourceLineNo">945</span> * @param jar The jar who's content to list.<a name="line.945"></a> -<span class="sourceLineNo">946</span> * @param packagedClasses map[class -> jar]<a name="line.946"></a> -<span class="sourceLineNo">947</span> */<a name="line.947"></a> -<span class="sourceLineNo">948</span> private static void updateMap(String jar, Map<String, String> packagedClasses) throws IOException {<a name="line.948"></a> -<span class="sourceLineNo">949</span> if (null == jar || jar.isEmpty()) {<a name="line.949"></a> -<span class="sourceLineNo">950</span> return;<a name="line.950"></a> -<span class="sourceLineNo">951</span> }<a name="line.951"></a> -<span class="sourceLineNo">952</span> ZipFile zip = null;<a name="line.952"></a> -<span class="sourceLineNo">953</span> try {<a name="line.953"></a> -<span class="sourceLineNo">954</span> zip = new ZipFile(jar);<a name="line.954"></a> -<span class="sourceLineNo">955</span> for (Enumeration<? extends ZipEntry> iter = zip.entries(); iter.hasMoreElements();) {<a name="line.955"></a> -<span class="sourceLineNo">956</span> ZipEntry entry = iter.nextElement();<a name="line.956"></a> -<span class="sourceLineNo">957</span> if (entry.getName().endsWith("class")) {<a name="line.957"></a> -<span class="sourceLineNo">958</span> packagedClasses.put(entry.getName(), jar);<a name="line.958"></a> -<span class="sourceLineNo">959</span> }<a name="line.959"></a> -<span class="sourceLineNo">960</span> }<a name="line.960"></a> -<span class="sourceLineNo">961</span> } finally {<a name="line.961"></a> -<span class="sourceLineNo">962</span> if (null != zip) zip.close();<a name="line.962"></a> -<span class="sourceLineNo">963</span> }<a name="line.963"></a> -<span class="sourceLineNo">964</span> }<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> * Find a jar that contains a class of the same name, if any. It will return<a name="line.967"></a> -<span class="sourceLineNo">968</span> * a jar file, even if that is not the first thing on the class path that<a name="line.968"></a> -<span class="sourceLineNo">969</span> * has a class with the same name. Looks first on the classpath and then in<a name="line.969"></a> -<span class="sourceLineNo">970</span> * the <code>packagedClasses</code> map.<a name="line.970"></a> -<span class="sourceLineNo">971</span> * @param my_class the class to find.<a name="line.971"></a> -<span class="sourceLineNo">972</span> * @return a jar file that contains the class, or null.<a name="line.972"></a> -<span class="sourceLineNo">973</span> * @throws IOException<a name="line.973"></a> -<span class="sourceLineNo">974</span> */<a name="line.974"></a> -<span class="sourceLineNo">975</span> private static String findContainingJar(Class<?> my_class, Map<String, String> packagedClasses)<a name="line.975"></a> -<span class="sourceLineNo">976</span> throws IOException {<a name="line.976"></a> -<span class="sourceLineNo">977</span> ClassLoader loader = my_class.getClassLoader();<a name="line.977"></a> -<span class="sourceLineNo">978</span><a name="line.978"></a> -<span class="sourceLineNo">979</span> String class_file = my_class.getName().replaceAll("\\.", "/") + ".class";<a name="line.979"></a> -<span class="sourceLineNo">980</span><a name="line.980"></a> -<span class="sourceLineNo">981</span> if (loader != null) {<a name="line.981"></a> -<span class="sourceLineNo">982</span> // first search the classpath<a name="line.982"></a> -<span class="sourceLineNo">983</span> for (Enumeration<URL> itr = loader.getResources(class_file); itr.hasMoreElements();) {<a name="line.983"></a> -<span class="sourceLineNo">984</span> URL url = itr.nextElement();<a name="line.984"></a> -<span class="sourceLineNo">985</span> if ("jar".equals(url.getProtocol())) {<a name="line.985"></a> -<span class="sourceLineNo">986</span> String toReturn = url.getPath();<a name="line.986"></a> -<span class="sourceLineNo">987</span> if (toReturn.startsWith("file:")) {<a name="line.987"></a> -<span class="sourceLineNo">988</span> toReturn = toReturn.substring("file:".length());<a name="line.988"></a> -<span class="sourceLineNo">989</span> }<a name="line.989"></a> -<span class="sourceLineNo">990</span> // URLDecoder is a misnamed class, since it actually decodes<a name="line.990"></a> -<span class="sourceLineNo">991</span> // x-www-form-urlencoded MIME type rather than actual<a name="line.991"></a> -<span class="sourceLineNo">992</span> // URL encoding (which the file path has). Therefore it would<a name="line.992"></a> -<span class="sourceLineNo">993</span> // decode +s to ' 's which is incorrect (spaces are actually<a name="line.993"></a> -<span class="sourceLineNo">994</span> // either unencoded or encoded as "%20"). Replace +s first, so<a name="line.994"></a> -<span class="sourceLineNo">995</span> // that they are kept sacred during the decoding process.<a name="line.995"></a> -<span class="sourceLineNo">996</span> toReturn = toReturn.replaceAll("\\+", "%2B");<a name="line.996"></a> -<span class="sourceLineNo">997</span> toReturn = URLDecoder.decode(toReturn, "UTF-8");<a name="line.997"></a> -<span class="sourceLineNo">998</span> return toReturn.replaceAll("!.*$", "");<a name="line.998"></a> -<span class="sourceLineNo">999</span> }<a name="line.999"></a> -<span class="sourceLineNo">1000</span> }<a name="line.1000"></a> -<span class="sourceLineNo">1001</span> }<a name="line.1001"></a> -<span class="sourceLineNo">1002</span><a name="line.1002"></a> -<span class="sourceLineNo">1003</span> // now look in any jars we've packaged using JarFinder. Returns null when<a name="line.1003"></a> -<span class="sourceLineNo">1004</span> // no jar is found.<a name="line.1004"></a> -<span class="sourceLineNo">1005</span> return packagedClasses.get(class_file);<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> * Invoke 'getJar' on a custom JarFinder implementation. Useful for some job<a name="line.1009"></a> -<span class="sourceLineNo">1010</span> * configuration contexts (HBASE-8140) and also for testing on MRv2.<a name="line.1010"></a> -<span class="sourceLineNo">1011</span> * check if we have HADOOP-9426.<a name="line.1011"></a> -<span class="sourceLineNo">1012</span> * @param my_class the class to find.<a name="line.1012"></a> -<span class="sourceLineNo">1013</span> * @return a jar file that contains the class, or null.<a name="line.1013"></a> -<span class="sourceLineNo">1014</span> */<a name="line.1014"></a> -<span class="sourceLineNo">1015</span> private static String getJar(Class<?> my_class) {<a name="line.1015"></a> -<span class="sourceLineNo">1016</span> String ret = null;<a name="line.1016"></a> -<span class="sourceLineNo">1017</span> try {<a name="line.1017"></a> -<span class="sourceLineNo">1018</span> ret = JarFinder.getJar(my_class);<a name="line.1018"></a> -<span class="sourceLineNo">1019</span> } catch (Exception e) {<a name="line.1019"></a> -<span class="sourceLineNo">1020</span> // toss all other exceptions, related to reflection failure<a name="line.1020"></a> -<span class="sourceLineNo">1021</span> throw new RuntimeException("getJar invocation failed.", e);<a name="line.1021"></a> -<span class="sourceLineNo">1022</span> }<a name="line.1022"></a> -<span class="sourceLineNo">1023</span><a name="line.1023"></a> -<span class="sourceLineNo">1024</span> return ret;<a name="line.1024"></a> -<span class="sourceLineNo">1025</span> }<a name="line.1025"></a> -<span class="sourceLineNo">1026</span>}<a name="line.1026"></a> +<span class="sourceLineNo">788</span> org.apache.hadoop.hbase.mapreduce.JobUtil.class, // hbase-hadoop2-compat<a name="line.788"></a> +<span class="sourceLineNo">789</span> org.apache.hadoop.hbase.mapreduce.TableMapper.class, // hbase-server<a name="line.789"></a> +<span class="sourceLineNo">790</span> org.apache.hadoop.hbase.metrics.impl.FastLongHistogram.class, // hbase-metrics<a name="line.790"></a> +<span class="sourceLineNo">791</span> org.apache.hadoop.hbase.metrics.Snapshot.class, // hbase-metrics-api<a name="line.791"></a> +<span class="sourceLineNo">792</span> prefixTreeCodecClass, // hbase-prefix-tree (if null will be skipped)<a name="line.792"></a> +<span class="sourceLineNo">793</span> // pull necessary dependencies<a name="line.793"></a> +<span class="sourceLineNo">794</span> org.apache.zookeeper.ZooKeeper.class,<a name="line.794"></a> +<span class="sourceLineNo">795</span> io.netty.channel.Channel.class,<a name="line.795"></a> +<span class="sourceLineNo">796</span> com.google.protobuf.Message.class,<a name="line.796"></a> +<span class="sourceLineNo">797</span> com.google.common.collect.Lists.class,<a name="line.797"></a> +<span class="sourceLineNo">798</span> org.apache.htrace.Trace.class,<a name="line.798"></a> +<span class="sourceLineNo">799</span> com.codahale.metrics.MetricRegistry.class);<a name="line.799"></a> +<span class="sourceLineNo">800</span> }<a name="line.800"></a> +<span class="sourceLineNo">801</span><a name="line.801"></a> +<span class="sourceLineNo">802</span> /**<a name="line.802"></a> +<span class="sourceLineNo">803</span> * Returns a classpath string built from the content of the "tmpjars" value in {@code conf}.<a name="line.803"></a> +<span class="sourceLineNo">804</span> * Also exposed to shell scripts via `bin/hbase mapredcp`.<a name="line.804"></a> +<span class="sourceLineNo">805</span> */<a name="line.805"></a> +<span class="sourceLineNo">806</span> public static String buildDependencyClasspath(Configuration conf) {<a name="line.806"></a> +<span class="sourceLineNo">807</span> if (conf == null) {<a name="line.807"></a> +<span class="sourceLineNo">808</span> throw new IllegalArgumentException("Must provide a configuration object.");<a name="line.808"></a> +<span class="sourceLineNo">809</span> }<a name="line.809"></a> +<span class="sourceLineNo">810</span> Set<String> paths = new HashSet<>(conf.getStringCollection("tmpjars"));<a name="line.810"></a> +<span class="sourceLineNo">811</span> if (paths.isEmpty()) {<a name="line.811"></a> +<span class="sourceLineNo">812</span> throw new IllegalArgumentException("Configuration contains no tmpjars.");<a name="line.812"></a> +<span class="sourceLineNo">813</span> }<a name="line.813"></a> +<span class="sourceLineNo">814</span> StringBuilder sb = new StringBuilder();<a name="line.814"></a> +<span class="sourceLineNo">815</span> for (String s : paths) {<a name="line.815"></a> +<span class="sourceLineNo">816</span> // entries can take the form 'file:/path/to/file.jar'.<a name="line.816"></a> +<span class="sourceLineNo">817</span> int idx = s.indexOf(":");<a name="line.817"></a> +<span class="sourceLineNo">818</span> if (idx != -1) s = s.substring(idx + 1);<a name="line.818"></a> +<span class="sourceLineNo">819</span> if (sb.length() > 0) sb.append(File.pathSeparator);<a name="line.819"></a> +<span class="sourceLineNo">820</span> sb.append(s);<a name="line.820"></a> +<span class="sourceLineNo">821</span> }<a name="line.821"></a> +<span class="sourceLineNo">822</span> return sb.toString();<a name="line.822"></a> +<span class="sourceLineNo">823</span> }<a name="line.823"></a> +<span class="sourceLineNo">824</span><a name="line.824"></a> +<span class="sourceLineNo">825</span> /**<a name="line.825"></a> +<span class="sourceLineNo">826</span> * Add the HBase dependency jars as well as jars for any of the configured<a name="line.826"></a> +<span class="sourceLineNo">827</span> * job classes to the job configuration, so that JobClient will ship them<a name="line.827"></a> +<span class="sourceLineNo">828</span> * to the cluster and add them to the DistributedCache.<a name="line.828"></a> +<span class="sourceLineNo">829</span> */<a name="line.829"></a> +<span class="sourceLineNo">830</span> public static void addDependencyJars(Job job) throws IOException {<a name="line.830"></a> +<span class="sourceLineNo">831</span> addHBaseDependencyJars(job.getConfiguration());<a name="line.831"></a> +<span class="sourceLineNo">832</span> try {<a name="line.832"></a> +<span class="sourceLineNo">833</span> addDependencyJarsForClasses(job.getConfiguration(),<a name="line.833"></a> +<span class="sourceLineNo">834</span> // when making changes here, consider also mapred.TableMapReduceUtil<a name="line.834"></a> +<span class="sourceLineNo">835</span> // pull job classes<a name="line.835"></a> +<span class="sourceLineNo">836</span> job.getMapOutputKeyClass(),<a name="line.836"></a> +<span class="sourceLineNo">837</span> job.getMapOutputValueClass(),<a name="line.837"></a> +<span class="sourceLineNo">838</span> job.getInputFormatClass(),<a name="line.838"></a> +<span class="sourceLineNo">839</span> job.getOutputKeyClass(),<a name="line.839"></a> +<span class="sourceLineNo">840</span> job.getOutputValueClass(),<a name="line.840"></a> +<span class="sourceLineNo">841</span> job.getOutputFormatClass(),<a name="line.841"></a> +<span class="sourceLineNo">842</span> job.getPartitionerClass(),<a name="line.842"></a> +<span class="sourceLineNo">843</span> job.getCombinerClass());<a name="line.843"></a> +<span class="sourceLineNo">844</span> } catch (ClassNotFoundException e) {<a name="line.844"></a> +<span class="sourceLineNo">845</span> throw new IOException(e);<a name="line.845"></a> +<span class="sourceLineNo">846</span> }<a name="line.846"></a> +<span class="sourceLineNo">847</span> }<a name="line.847"></a> +<span class="sourceLineNo">848</span><a name="line.848"></a> +<span class="sourceLineNo">849</span> /**<a name="line.849"></a> +<span class="sourceLineNo">850</span> * Add the jars containing the given classes to the job's configuration<a name="line.850"></a> +<span class="sourceLineNo">851</span> * such that JobClient will ship them to the cluster and add them to<a name="line.851"></a> +<span class="sourceLineNo">852</span> * the DistributedCache.<a name="line.852"></a> +<span class="sourceLineNo">853</span> * @deprecated rely on {@link #addDependencyJars(Job)} instead.<a name="line.853"></a> +<span class="sourceLineNo">854</span> */<a name="line.854"></a> +<span class="sourceLineNo">855</span> @Deprecated<a name="line.855"></a> +<span class="sourceLineNo">856</span> public static void addDependencyJars(Configuration conf,<a name="line.856"></a> +<span class="sourceLineNo">857</span> Class<?>... classes) throws IOException {<a name="line.857"></a> +<span class="sourceLineNo">858</span> LOG.warn("The addDependencyJars(Configuration, Class<?>...) method has been deprecated since it"<a name="line.858"></a> +<span class="sourceLineNo">859</span> + " is easy to use incorrectly. Most users should rely on addDependencyJars(Job) " +<a name="line.859"></a> +<span class="sourceLineNo">860</span> "instead. See HBASE-8386 for more details.");<a name="line.860"></a> +<span class="sourceLineNo">861</span> addDependencyJarsForClasses(conf, classes);<a name="line.861"></a> +<span class="sourceLineNo">862</span> }<a name="line.862"></a> +<span class="sourceLineNo">863</span><a name="line.863"></a> +<span class="sourceLineNo">864</span> /**<a name="line.864"></a> +<span class="sourceLineNo">865</span> * Add the jars containing the given classes to the job's configuration<a name="line.865"></a> +<span class="sourceLineNo">866</span> * such that JobClient will ship them to the cluster and add them to<a name="line.866"></a> +<span class="sourceLineNo">867</span> * the DistributedCache.<a name="line.867"></a> +<span class="sourceLineNo">868</span> *<a name="line.868"></a> +<span class="sourceLineNo">869</span> * N.B. that this method at most adds one jar per class given. If there is more than one<a name="line.869"></a> +<span class="sourceLineNo">870</span> * jar available containing a class with the same name as a given class, we don't define<a name="line.870"></a> +<span class="sourceLineNo">871</span> * which of those jars might be chosen.<a name="line.871"></a> +<span class="sourceLineNo">872</span> *<a name="line.872"></a> +<span class="sourceLineNo">873</span> * @param conf The Hadoop Configuration to modify<a name="line.873"></a> +<span class="sourceLineNo">874</span> * @param classes will add just those dependencies needed to find the given classes<a name="line.874"></a> +<span class="sourceLineNo">875</span> * @throws IOException if an underlying library call fails.<a name="line.875"></a> +<span class="sourceLineNo">876</span> */<a name="line.876"></a> +<span class="sourceLineNo">877</span> @InterfaceAudience.Private<a name="line.877"></a> +<span class="sourceLineNo">878</span> public static void addDependencyJarsForClasses(Configuration conf,<a name="line.878"></a> +<span class="sourceLineNo">879</span> Class<?>... classes) throws IOException {<a name="line.879"></a> +<span class="sourceLineNo">880</span><a name="line.880"></a> +<span class="sourceLineNo">881</span> FileSystem localFs = FileSystem.getLocal(conf);<a name="line.881"></a> +<span class="sourceLineNo">882</span> Set<String> jars = new HashSet<>();<a name="line.882"></a> +<span class="sourceLineNo">883</span> // Add jars that are already in the tmpjars variable<a name="line.883"></a> +<span class="sourceLineNo">884</span> jars.addAll(conf.getStringCollection("tmpjars"));<a name="line.884"></a> +<span class="sourceLineNo">885</span><a name="line.885"></a> +<span class="sourceLineNo">886</span> // add jars as we find them to a map of contents jar name so that we can avoid<a name="line.886"></a> +<span class="sourceLineNo">887</span> // creating new jars for classes that have already been packaged.<a name="line.887"></a> +<span class="sourceLineNo">888</span> Map<String, String> packagedClasses = new HashMap<>();<a name="line.888"></a> +<span class="sourceLineNo">889</span><a name="line.889"></a> +<span class="sourceLineNo">890</span> // Add jars containing the specified classes<a name="line.890"></a> +<span class="sourceLineNo">891</span> for (Class<?> clazz : classes) {<a name="line.891"></a> +<span class="sourceLineNo">892</span> if (clazz == null) continue;<a name="line.892"></a> +<span class="sourceLineNo">893</span><a name="line.893"></a> +<span class="sourceLineNo">894</span> Path path = findOrCreateJar(clazz, localFs, packagedClasses);<a name="line.894"></a> +<span class="sourceLineNo">895</span> if (path == null) {<a name="line.895"></a> +<span class="sourceLineNo">896</span> LOG.warn("Could not find jar for class " + clazz +<a name="line.896"></a> +<span class="sourceLineNo">897</span> " in order to ship it to the cluster.");<a name="line.897"></a> +<span class="sourceLineNo">898</span> continue;<a name="line.898"></a> +<span class="sourceLineNo">899</span> }<a name="line.899"></a> +<span class="sourceLineNo">900</span> if (!localFs.exists(path)) {<a name="line.900"></a> +<span class="sourceLineNo">901</span> LOG.warn("Could not validate jar file " + path + " for class "<a name="line.901"></a> +<span class="sourceLineNo">902</span> + clazz);<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> jars.add(path.toString());<a name="line.905"></a> +<span class="sourceLineNo">906</span> }<a name="line.906"></a> +<span class="sourceLineNo">907</span> if (jars.isEmpty()) return;<a name="line.907"></a> +<span class="sourceLineNo">908</span><a name="line.908"></a> +<span class="sourceLineNo">909</span> conf.set("tmpjars", StringUtils.arrayToString(jars.toArray(new String[jars.size()])));<a name="line.909"></a> +<span class="sourceLineNo">910</span> }<a name="line.910"></a> +<span class="sourceLineNo">911</span><a name="line.911"></a> +<span class="sourceLineNo">912</span> /**<a name="line.912"></a> +<span class="sourceLineNo">913</span> * Finds the Jar for a class or creates it if it doesn't exist. If the class is in<a name="line.913"></a> +<span class="sourceLineNo">914</span> * a directory in the classpath, it creates a Jar on the fly with the<a name="line.914"></a> +<span class="sourceLineNo">915</span> * contents of the directory and returns the path to that Jar. If a Jar is<a name="line.915"></a> +<span class="sourceLineNo">916</span> * created, it is created in the system temporary directory. Otherwise,<a name="line.916"></a> +<span class="sourceLineNo">917</span> * returns an existing jar that contains a class of the same name. Maintains<a name="line.917"></a> +<span class="sourceLineNo">918</span> * a mapping from jar contents to the tmp jar created.<a name="line.918"></a> +<span class="sourceLineNo">919</span> * @param my_class the class to find.<a name="line.919"></a> +<span class="sourceLineNo">920</span> * @param fs the FileSystem with which to qualify the returned path.<a name="line.920"></a> +<span class="sourceLineNo">921</span> * @param packagedClasses a map of class name to path.<a name="line.921"></a> +<span class="sourceLineNo">922</span> * @return a jar file that contains the class.<a name="line.922"></a> +<span class="sourceLineNo">923</span> * @throws IOException<a name="line.923"></a> +<span class="sourceLineNo">924</span> */<a name="line.924"></a> +<span class="sourceLineNo">925</span> private static Path findOrCreateJar(Class<?> my_class, FileSystem fs,<a name="line.925"></a> +<span class="sourceLineNo">926</span> Map<String, String> packagedClasses)<a name="line.926"></a> +<span class="sourceLineNo">927</span> throws IOException {<a name="line.927"></a> +<span class="sourceLineNo">928</span> // attempt to locate an existing jar for the class.<a name="line.928"></a> +<span class="sourceLineNo">929</span> String jar = findContainingJar(my_class, packagedClasses);<a name="line.929"></a> +<span class="sourceLineNo">930</span> if (null == jar || jar.isEmpty()) {<a name="line.930"></a> +<span class="sourceLineNo">931</span> jar = getJar(my_class);<a name="line.931"></a> +<span class="sourceLineNo">932</span> updateMap(jar, packagedClasses);<a name="line.932"></a> +<span class="sourceLineNo">933</span> }<a name="line.933"></a> +<span class="sourceLineNo">934</span><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> return null;<a name="line.936"></a> +<span class="sourceLineNo">937</span> }<a name="line.937"></a> +<span class="sourceLineNo">938</span><a name="line.938"></a> +<span class="sourceLineNo">939</span> LOG.debug(String.format("For class %s, using jar %s", my_class.getName(), jar));<a name="line.939"></a> +<span class="sourceLineNo">940</span> return new Path(jar).makeQualified(fs);<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> /**<a name="line.943"></a> +<span class="sourceLineNo">944</span> * Add entries to <code>packagedClasses</code> corresponding to class files<a name="line.944"></a> +<span class="sourceLineNo">945</span> * contained in <code>jar</code>.<a name="line.945"></a> +<span class="sourceLineNo">946</span> * @param jar The jar who's content to list.<a name="line.946"></a> +<span class="sourceLineNo">947</span> * @param packagedClasses map[class -> jar]<a name="line.947"></a> +<span class="sourceLineNo">948</span> */<a name="line.948"></a> +<span class="sourceLineNo">949</span> private static void updateMap(String jar, Map<String, String> packagedClasses) throws IOException {<a name="line.949"></a> +<span class="sourceLineNo">950</span> if (null == jar || jar.isEmpty()) {<a name="line.950"></a> +<span class="sourceLineNo">951</span> return;<a name="line.951"></a> +<span class="sourceLineNo">952</span> }<a name="line.952"></a> +<span class="sourceLineNo">953</span> ZipFile zip = null;<a name="line.953"></a> +<span class="sourceLineNo">954</span> try {<a name="line.954"></a> +<span class="sourceLineNo">955</span> zip = new ZipFile(jar);<a name="line.955"></a> +<span class="sourceLineNo">956</span> for (Enumeration<? extends ZipEntry> iter = zip.entries(); iter.hasMoreElements();) {<a name="line.956"></a> +<span class="sourceLineNo">957</span> ZipEntry entry = iter.nextElement();<a name="line.957"></a> +<span class="sourceLineNo">958</span> if (entry.getName().endsWith("class")) {<a name="line.958"></a> +<span class="sourceLineNo">959</span> packagedClasses.put(entry.getName(), jar);<a name="line.959"></a> +<span class="sourceLineNo">960</span> }<a name="line.960"></a> +<span class="sourceLineNo">961</span> }<a name="line.961"></a> +<span class="sourceLineNo">962</span> } finally {<a name="line.962"></a> +<span class="sourceLineNo">963</span> if (null != zip) zip.close();<a name="line.963"></a> +<span class="sourceLineNo">964</span> }<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> /**<a name="line.967"></a> +<span class="sourceLineNo">968</span> * Find a jar that contains a class of the same name, if any. It will return<a name="line.968"></a> +<span class="sourceLineNo">969</span> * a jar file, even if that is not the first thing on the class path that<a name="line.969"></a> +<span class="sourceLineNo">970</span> * has a class with the same name. Looks first on the classpath and then in<a name="line.970"></a> +<span class="sourceLineNo">971</span> * the <code>packagedClasses</code> map.<a name="line.971"></a> +<span class="sourceLineNo">972</span> * @param my_class the class to find.<a name="line.972"></a> +<span class="sourceLineNo">973</span> * @return a jar file that contains the class, or null.<a name="line.973"></a> +<span class="sourceLineNo">974</span> * @throws IOException<a name="line.974"></a> +<span class="sourceLineNo">975</span> */<a name="line.975"></a> +<span class="sourceLineNo">976</span> private static String findContainingJar(Class<?> my_class, Map<String, String> packagedClasses)<a name="line.976"></a> +<span class="sourceLineNo">977</span> throws IOException {<a name="line.977"></a> +<span class="sourceLineNo">978</span> ClassLoader loader = my_class.getClassLoader();<a name="line.978"></a> +<span class="sourceLineNo">979</span><a name="line.979"></a> +<span class="sourceLineNo">980</span> String class_file = my_class.getName().replaceAll("\\.", "/") + ".class";<a name="line.980"></a> +<span class="sourceLineNo">981</span><a name="line.981"></a> +<span class="sourceLineNo">982</span> if (loader != null) {<a name="line.982"></a> +<span class="sourceLineNo">983</span> // first search the classpath<a name="line.983"></a> +<span class="sourceLineNo">984</span> for (Enumeration<URL> itr = loader.getResources(class_file); itr.hasMoreElements();) {<a name="line.984"></a> +<span class="sourceLineNo">985</span> URL url = itr.nextElement();<a name="line.985"></a> +<span class="sourceLineNo">986</span> if ("jar".equals(url.getProtocol())) {<a name="line.986"></a> +<span class="sourceLineNo">987</span> String toReturn = url.getPath();<a name="line.987"></a> +<span class="sourceLineNo">988</span> if (toReturn.startsWith("file:")) {<a name="line.988"></a> +<span class="sourceLineNo">989</span> toReturn = toReturn.substring("file:".length());<a name="line.989"></a> +<span class="sourceLineNo">990</span> }<a name="line.990"></a> +<span class="sourceLineNo">991</span> // URLDecoder is a misnamed class, since it actually decodes<a name="line.991"></a> +<span class="sourceLineNo">992</span> // x-www-form-urlencoded MIME type rather than actual<a name="line.992"></a> +<span class="sourceLineNo">993</span> // URL encoding (which the file path has). Therefore it would<a name="line.993"></a> +<span class="sourceLineNo">994</span> // decode +s to ' 's which is incorrect (spaces are actually<a name="line.994"></a> +<span class="sourceLineNo">995</span> // either unencoded or encoded as "%20"). Replace +s first, so<a name="line.995"></a> +<span class="sourceLineNo">996</span> // that they are kept sacred during the decoding process.<a name="line.996"></a> +<span class="sourceLineNo">997</span> toReturn = toReturn.replaceAll("\\+", "%2B");<a name="line.997"></a> +<span class="sourceLineNo">998</span> toReturn = URLDecoder.decode(toReturn, "UTF-8");<a name="line.998"></a> +<span class="sourceLineNo">999</span> return toReturn.replaceAll("!.*$", "");<a name="line.999"></a> +<span class="sourceLineNo">1000</span> }<a name="line.1000"></a> +<span class="sourceLineNo">1001</span> }<a name="line.1001"></a> +<span class="sourceLineNo">1002</span> }<a name="line.1002"></a> +<span class="sourceLineNo">1003</span><a name="line.1003"></a> +<span class="sourceLineNo">1004</span> // now look in any jars we've packaged using JarFinder. Returns null when<a name="line.1004"></a> +<span class="sourceLineNo">1005</span> // no jar is found.<a name="line.1005"></a> +<span class="sourceLineNo">1006</span> return packagedClasses.get(class_file);<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> /**<a name="line.1009"></a> +<span class="sourceLineNo">1010</span> * Invoke 'getJar' on a custom JarFinder implementation. Useful for some job<a name="line.1010"></a> +<span class="sourceLineNo">1011</span> * configuration contexts (HBASE-8140) and also for testing on MRv2.<a name="line.1011"></a> +<span class="sourceLineNo">1012</span> * check if we have HADOOP-9426.<a name="line.1012"></a> +<span class="sourceLineNo">1013</span> * @param my_class the class to find.<a name="line.1013"></a> +<span class="sourceLineNo">1014</span> * @return a jar file that contains the class, or null.<a name="line.1014"></a> +<span class="sourceLineNo">1015</span> */<a name="line.1015"></a> +<span class="sourceLineNo">1016</span> private static String getJar(Class<?> my_class) {<a name="line.1016"></a> +<span class="sourceLineNo">1017</span> String ret = null;<a name="line.1017"></a> +<span class="sourceLineNo">1018</span> try {<a name="line.1018"></a> +<span class="sourceLineNo">1019</span> ret = JarFinder.getJar(my_class);<a name="line.1019"></a> +<span class="sourceLineNo">1020</span> } catch (Exception e) {<a name="line.1020"></a> +<span class="sourceLineNo">1021</span> // toss all other exceptions, related to reflection failure<a name="line.1021"></a> +<span class="sourceLineNo">1022</span> throw new RuntimeException("getJar invocation failed.", e);<a name="line.1022"></a> +<span class="sourceLineNo">1023</span> }<a name="line.1023"></a> +<span class="sourceLineNo">1024</span><a name="line.1024"></a> +<span class="sourceLineNo">1025</span> return ret;<a name="line.1025"></a> +<span class="sourceLineNo">1026</span> }<a name="line.1026"></a> +<span class="sourceLineNo">1027</span>}<a name="line.1027"></a> http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1342ac30/book.html ---------------------------------------------------------------------- diff --git a/book.html b/book.html index 05774fe..8a529e9 100644 --- a/book.html +++ b/book.html @@ -5975,7 +5975,7 @@ for warning about incompatible changes). All effort will be made to provide a de <div class="ulist"> <ul> <li> -<p>InterfaceAudience: captures the intended audience, possible values are Public (for end users and external projects), LimitedPrivate (for other Projects, Coprocessors or other plugin points), and Private (for internal use).</p> +<p>InterfaceAudience: captures the intended audience, possible values are Public (for end users and external projects), LimitedPrivate (for other Projects, Coprocessors or other plugin points), and Private (for internal use). Notice that, you may find that the classes which are declared as IA.Private are used as parameter or return value for the interfaces which are declared as IA.LimitedPrivate. This is possible. You should treat the IA.Private object as a monolithic object, which means you can use it as a parameter to call other methods, or return it, but you should never try to access its methods or fields.</p> </li> <li> <p>InterfaceStability: describes what types of interface changes are permitted. Possible values are Stable, Evolving, Unstable, and Deprecated. Notice that this annotation is only valid for classes which are marked as IA.LimitedPrivate. The stability of IA.Public classes is only related to the upgrade type(major, minor or patch). And for IA.Private classes, there is no guarantee on the stability between releases. Refer to the Compatibility Matrix above for more details.</p> http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1342ac30/bulk-loads.html ---------------------------------------------------------------------- diff --git a/bulk-loads.html b/bulk-loads.html index 9d2a1fd..984a058 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="20170607" /> + <meta name="Date-Revision-yyyymmdd" content="20170608" /> <meta http-equiv="Content-Language" content="en" /> <title>Apache HBase – Bulk Loads in Apache HBase (TM) @@ -311,7 +311,7 @@ under the License. --> <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved. - <li id="publishDate" class="pull-right">Last Published: 2017-06-07</li> + <li id="publishDate" class="pull-right">Last Published: 2017-06-08</li> </p> </div> http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1342ac30/checkstyle-aggregate.html ---------------------------------------------------------------------- diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html index 1a5d42a..66fac9a 100644 --- a/checkstyle-aggregate.html +++ b/checkstyle-aggregate.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="20170607" /> + <meta name="Date-Revision-yyyymmdd" content="20170608" /> <meta http-equiv="Content-Language" content="en" /> <title>Apache HBase – Checkstyle Results</title> <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" /> @@ -7306,12 +7306,12 @@ <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#JavadocTagContinuationIndentation">JavadocTagContinuationIndentation</a> <ul> <li>offset: <tt>"2"</tt></li></ul></td> -<td>779</td> +<td>791</td> <td><img src="images/icon_error_sml.gif" alt="" /> Error</td></tr> <tr class="b"> <td></td> <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#NonEmptyAtclauseDescription">NonEmptyAtclauseDescription</a></td> -<td>3218</td> +<td>3206</td> <td><img src="images/icon_error_sml.gif" alt="" /> Error</td></tr> <tr class="a"> <td>misc</td> @@ -13017,7 +13017,7 @@ <tr class="a"> <td><img src="images/icon_error_sml.gif" alt="" /> Error</td> <td>javadoc</td> -<td>NonEmptyAtclauseDescription</td> +<td>JavadocTagContinuationIndentation</td> <td>Javadoc comment at column 43 has parse error. Missed HTML close tag 'TableName'. Sometimes it means that close tag missed for one of previous tags.</td> <td>181</td></tr> <tr class="b"> @@ -16170,7 +16170,7 @@ <tr class="a"> <td><img src="images/icon_error_sml.gif" alt="" /> Error</td> <td>javadoc</td> -<td>NonEmptyAtclauseDescription</td> +<td>JavadocTagContinuationIndentation</td> <td>Javadoc comment at column 64 has parse error. Missed HTML close tag 'code'. Sometimes it means that close tag missed for one of previous tags.</td> <td>1957</td></tr> <tr class="b"> @@ -20778,7 +20778,7 @@ <tr class="a"> <td><img src="images/icon_error_sml.gif" alt="" /> Error</td> <td>javadoc</td> -<td>NonEmptyAtclauseDescription</td> +<td>JavadocTagContinuationIndentation</td> <td>Javadoc comment at column 37 has parse error. Details: no viable alternative at input '<ColumnFamily,' while parsing HTML_ELEMENT</td> <td>29</td></tr></table></div> <div class="section"> @@ -36363,7 +36363,7 @@ <tr class="a"> <td><img src="images/icon_error_sml.gif" alt="" /> Error</td> <td>javadoc</td> -<td>NonEmptyAtclauseDescription</td> +<td>JavadocTagContinuationIndentation</td> <td>Javadoc comment at column 80 has parse error. Details: no viable alternative at input '<TableName> tables)\n * Used when region startKeys of each table is available, input as <TableName,' while parsing HTML_TAG</td> <td>206</td></tr> <tr class="b"> @@ -36393,19 +36393,19 @@ <tr class="b"> <td><img src="images/icon_error_sml.gif" alt="" /> Error</td> <td>javadoc</td> -<td>NonEmptyAtclauseDescription</td> +<td>JavadocTagContinuationIndentation</td> <td>Javadoc comment at column 66 has parse error. Details: no viable alternative at input '<table,' while parsing HTML_ELEMENT</td> <td>334</td></tr> <tr class="a"> <td><img src="images/icon_error_sml.gif" alt="" /> Error</td> <td>javadoc</td> -<td>NonEmptyAtclauseDescription</td> +<td>JavadocTagContinuationIndentation</td> <td>Javadoc comment at column 66 has parse error. Details: no viable alternative at input '<table,' while parsing HTML_ELEMENT</td> <td>342</td></tr> <tr class="b"> <td><img src="images/icon_error_sml.gif" alt="" /> Error</td> <td>javadoc</td> -<td>NonEmptyAtclauseDescription</td> +<td>JavadocTagContinuationIndentation</td> <td>Javadoc comment at column 32 has parse error. Details: no viable alternative at input '<tableName,' while parsing HTML_ELEMENT</td> <td>351</td></tr> <tr class="a"> @@ -36417,7 +36417,7 @@ <tr class="b"> <td><img src="images/icon_error_sml.gif" alt="" /> Error</td> <td>javadoc</td> -<td>NonEmptyAtclauseDescription</td> +<td>JavadocTagContinuationIndentation</td> <td>Javadoc comment at column 24 has parse error. Details: no viable alternative at input '<tableName,' while parsing HTML_ELEMENT</td> <td>379</td></tr> <tr class="a"> @@ -36429,7 +36429,7 @@ <tr class="b"> <td><img src="images/icon_error_sml.gif" alt="" /> Error</td> <td>javadoc</td> -<td>NonEmptyAtclauseDescription</td> +<td>JavadocTagContinuationIndentation</td> <td>Javadoc comment at column 43 has parse error. Details: no viable alternative at input '<table,' while parsing HTML_ELEMENT</td> <td>421</td></tr> <tr class="a"> @@ -36447,7 +36447,7 @@ <tr class="a"> <td><img src="images/icon_error_sml.gif" alt="" /> Error</td> <td>javadoc</td> -<td>NonEmptyAtclauseDescription</td> +<td>JavadocTagContinuationIndentation</td> <td>Javadoc comment at column 36 has parse error. Details: no viable alternative at input '<TableName,' while parsing HTML_ELEMENT</td> <td>487</td></tr></table></div> <div class="section"> @@ -37313,49 +37313,49 @@ <td>blocks</td> <td>NeedBraces</td> <td>'if' construct must use '{}'s.</td> -<td>817</td></tr> +<td>818</td></tr> <tr class="b"> <td><img src="images/icon_error_sml.gif" alt="" /> Error</td> <td>blocks</td> <td>NeedBraces</td> <td>'if' construct must use '{}'s.</td> -<td>818</td></tr> +<td>819</td></tr> <tr class="a"> <td><img src="images/icon_error_sml.gif" alt="" /> Error</td> <td>blocks</td> <td>NeedBraces</td> <td>'if' construct must use '{}'s.</td> -<td>891</td></tr> +<td>892</td></tr> <tr class="b"> <td><img src="images/icon_error_sml.gif" alt="" /> Error</td> <td>blocks</td> <td>NeedBraces</td> <td>'if' construct must use '{}'s.</td> -<td>906</td></tr> +<td>907</td></tr> <tr class="a"> <td><img src="images/icon_error_sml.gif" alt="" /> Error</td> <td>javadoc</td> <td>NonEmptyAtclauseDescription</td> <td>At-clause should have a non-empty description.</td> -<td>922</td></tr> +<td>923</td></tr> <tr class="b"> <td><img src="images/icon_error_sml.gif" alt="" /> Error</td> <td>sizes</td> <td>LineLength</td> <td>Line is longer than 100 characters (found 101).</td> -<td>948</td></tr> +<td>949</td></tr> <tr class="a"> <td><img src="images/icon_error_sml.gif" alt="" /> Error</td> <td>blocks</td> <td>NeedBraces</td> <td>'if' construct must use '{}'s.</td> -<td>962</td></tr> +<td>963</td></tr> <tr class="b"> <td><img src="images/icon_error_sml.gif" alt="" /> Error</td> <td>javadoc</td> <td>NonEmptyAtclauseDescription</td> <td>At-clause should have a non-empty description.</td> -<td>973</td></tr></table></div> +<td>974</td></tr></table></div> <div class="section"> <h3 id="org.apache.hadoop.hbase.mapreduce.TableMapper.java">org/apache/hadoop/hbase/mapreduce/TableMapper.java</h3> <table border="0" class="table table-striped"> @@ -51033,7 +51033,7 @@ <tr class="a"> <td><img src="images/icon_error_sml.gif" alt="" /> Error</td> <td>javadoc</td> -<td>NonEmptyAtclauseDescription</td> +<td>JavadocTagContinuationIndentation</td> <td>Javadoc comment at column 60 has parse error. Missed HTML close tag 'Comparable'. Sometimes it means that close tag missed for one of previous tags.</td> <td>28</td></tr> <tr class="b"> @@ -87357,7 +87357,7 @@ <tr class="b"> <td><img src="images/icon_error_sml.gif" alt="" /> Error</td> <td>javadoc</td> -<td>NonEmptyAtclauseDescription</td> +<td>JavadocTagContinuationIndentation</td> <td>Javadoc comment at column 33 has parse error. It is forbidden to close singleton HTML tags. Tag: br.</td> <td>63</td></tr> <tr class="a"> @@ -106731,7 +106731,7 @@ <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved. - <li id="publishDate" class="pull-right">Last Published: 2017-06-07</li> + <li id="publishDate" class="pull-right">Last Published: 2017-06-08</li> </p> </div> http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1342ac30/coc.html ---------------------------------------------------------------------- diff --git a/coc.html b/coc.html index 2a27411..a5d28a8 100644 --- a/coc.html +++ b/coc.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="20170607" /> + <meta name="Date-Revision-yyyymmdd" content="20170608" /> <meta http-equiv="Content-Language" content="en" /> <title>Apache HBase – Code of Conduct Policy @@ -380,7 +380,7 @@ email to <a class="externalLink" href="mailto:[email protected]">the priv <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved. - <li id="publishDate" class="pull-right">Last Published: 2017-06-07</li> + <li id="publishDate" class="pull-right">Last Published: 2017-06-08</li> </p> </div> http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1342ac30/cygwin.html ---------------------------------------------------------------------- diff --git a/cygwin.html b/cygwin.html index 1138359..10f6c30 100644 --- a/cygwin.html +++ b/cygwin.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="20170607" /> + <meta name="Date-Revision-yyyymmdd" content="20170608" /> <meta http-equiv="Content-Language" content="en" /> <title>Apache HBase – Installing Apache HBase (TM) on Windows using Cygwin</title> <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" /> @@ -679,7 +679,7 @@ Now your <b>HBase </b>server is running, <b>start coding</b> and build that next <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved. - <li id="publishDate" class="pull-right">Last Published: 2017-06-07</li> + <li id="publishDate" class="pull-right">Last Published: 2017-06-08</li> </p> </div> http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1342ac30/dependencies.html ---------------------------------------------------------------------- diff --git a/dependencies.html b/dependencies.html index 628b753..9f5d23d 100644 --- a/dependencies.html +++ b/dependencies.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="20170607" /> + <meta name="Date-Revision-yyyymmdd" content="20170608" /> <meta http-equiv="Content-Language" content="en" /> <title>Apache HBase – Project Dependencies</title> <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" /> @@ -524,7 +524,7 @@ <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved. - <li id="publishDate" class="pull-right">Last Published: 2017-06-07</li> + <li id="publishDate" class="pull-right">Last Published: 2017-06-08</li> </p> </div> http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1342ac30/dependency-convergence.html ---------------------------------------------------------------------- diff --git a/dependency-convergence.html b/dependency-convergence.html index 294f48e..41b237c 100644 --- a/dependency-convergence.html +++ b/dependency-convergence.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="20170607" /> + <meta name="Date-Revision-yyyymmdd" content="20170608" /> <meta http-equiv="Content-Language" content="en" /> <title>Apache HBase – Reactor Dependency Convergence</title> <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" /> @@ -1850,7 +1850,7 @@ <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved. - <li id="publishDate" class="pull-right">Last Published: 2017-06-07</li> + <li id="publishDate" class="pull-right">Last Published: 2017-06-08</li> </p> </div> http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1342ac30/dependency-info.html ---------------------------------------------------------------------- diff --git a/dependency-info.html b/dependency-info.html index f96625f..21a53d8 100644 --- a/dependency-info.html +++ b/dependency-info.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="20170607" /> + <meta name="Date-Revision-yyyymmdd" content="20170608" /> <meta http-equiv="Content-Language" content="en" /> <title>Apache HBase – Dependency Information</title> <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" /> @@ -318,7 +318,7 @@ <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved. - <li id="publishDate" class="pull-right">Last Published: 2017-06-07</li> + <li id="publishDate" class="pull-right">Last Published: 2017-06-08</li> </p> </div> http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1342ac30/dependency-management.html ---------------------------------------------------------------------- diff --git a/dependency-management.html b/dependency-management.html index 472cbcc..f729b47 100644 --- a/dependency-management.html +++ b/dependency-management.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="20170607" /> + <meta name="Date-Revision-yyyymmdd" content="20170608" /> <meta http-equiv="Content-Language" content="en" /> <title>Apache HBase – Project Dependency Management</title> <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" /> @@ -894,7 +894,7 @@ <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved. - <li id="publishDate" class="pull-right">Last Published: 2017-06-07</li> + <li id="publishDate" class="pull-right">Last Published: 2017-06-08</li> </p> </div> http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1342ac30/devapidocs/constant-values.html ---------------------------------------------------------------------- diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html index 97c388a..e0297f9 100644 --- a/devapidocs/constant-values.html +++ b/devapidocs/constant-values.html @@ -3822,21 +3822,21 @@ <!-- --> </a><code>public static final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td> <td><code><a href="org/apache/hadoop/hbase/Version.html#date">date</a></code></td> -<td class="colLast"><code>"Wed Jun 7 14:39:09 UTC 2017"</code></td> +<td class="colLast"><code>"Thu Jun 8 14:39:10 UTC 2017"</code></td> </tr> <tr class="rowColor"> <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision"> <!-- --> </a><code>public static final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td> <td><code><a href="org/apache/hadoop/hbase/Version.html#revision">revision</a></code></td> -<td class="colLast"><code>"0eeafa04f26f2388602a7c74b496e6682716f50a"</code></td> +<td class="colLast"><code>"f17fa223b57faad02f10b3be24dae64c34996b62"</code></td> </tr> <tr class="altColor"> <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.srcChecksum"> <!-- --> </a><code>public static final <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td> <td><code><a href="org/apache/hadoop/hbase/Version.html#srcChecksum">srcChecksum</a></code></td> -<td class="colLast"><code>"1a271947d0abb73023034c9060a5ccd2"</code></td> +<td class="colLast"><code>"a4f4a52fd05ed8ead6956de4e164c742"</code></td> </tr> <tr class="rowColor"> <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.url"> http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1342ac30/devapidocs/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html ---------------------------------------------------------------------- diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html index b802de0..19d16ef 100644 --- a/devapidocs/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html +++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html @@ -1297,7 +1297,7 @@ public static void <a href="../../../../../src-html/org/apache/hadoop/ <ul class="blockList"> <li class="blockList"> <h4>buildDependencyClasspath</h4> -<pre>public static <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html#line.805">buildDependencyClasspath</a>(org.apache.hadoop.conf.Configuration conf)</pre> +<pre>public static <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html#line.806">buildDependencyClasspath</a>(org.apache.hadoop.conf.Configuration conf)</pre> <div class="block">Returns a classpath string built from the content of the "tmpjars" value in <code>conf</code>. Also exposed to shell scripts via `bin/hbase mapredcp`.</div> </li> @@ -1308,7 +1308,7 @@ public static void <a href="../../../../../src-html/org/apache/hadoop/ <ul class="blockList"> <li class="blockList"> <h4>addDependencyJars</h4> -<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html#line.829">addDependencyJars</a>(org.apache.hadoop.mapreduce.Job job) +<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html#line.830">addDependencyJars</a>(org.apache.hadoop.mapreduce.Job job) throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre> <div class="block">Add the HBase dependency jars as well as jars for any of the configured job classes to the job configuration, so that JobClient will ship them @@ -1326,7 +1326,7 @@ public static void <a href="../../../../../src-html/org/apache/hadoop/ <li class="blockList"> <h4>addDependencyJars</h4> <pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a> -public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html#line.855">addDependencyJars</a>(org.apache.hadoop.conf.Configuration conf, +public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html#line.856">addDependencyJars</a>(org.apache.hadoop.conf.Configuration conf, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?>... classes) throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre> <div class="block"><span class="deprecatedLabel">Deprecated.</span> <span class="deprecationComment">rely on <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html#addDependencyJars-org.apache.hadoop.mapreduce.Job-"><code>addDependencyJars(Job)</code></a> instead.</span></div> @@ -1346,7 +1346,7 @@ public static void <a href="../../../../../src-html/org/apache/hadoop/ <li class="blockList"> <h4>addDependencyJarsForClasses</h4> <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a> -public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html#line.877">addDependencyJarsForClasses</a>(org.apache.hadoop.conf.Configuration conf, +public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html#line.878">addDependencyJarsForClasses</a>(org.apache.hadoop.conf.Configuration conf, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?>... classes) throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre> <div class="block">Add the jars containing the given classes to the job's configuration @@ -1371,7 +1371,7 @@ public static void <a href="../../../../../src-html/org/apache/hadoop/ <ul class="blockList"> <li class="blockList"> <h4>findOrCreateJar</h4> -<pre>private static org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html#line.924">findOrCreateJar</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?> my_class, +<pre>private static org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html#line.925">findOrCreateJar</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?> my_class, org.apache.hadoop.fs.FileSystem fs, <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> packagedClasses) throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre> @@ -1399,7 +1399,7 @@ public static void <a href="../../../../../src-html/org/apache/hadoop/ <ul class="blockList"> <li class="blockList"> <h4>updateMap</h4> -<pre>private static void <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html#line.948">updateMap</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> jar, +<pre>private static void <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html#line.949">updateMap</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> jar, <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> packagedClasses) throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre> <div class="block">Add entries to <code>packagedClasses</code> corresponding to class files @@ -1419,7 +1419,7 @@ public static void <a href="../../../../../src-html/org/apache/hadoop/ <ul class="blockList"> <li class="blockList"> <h4>findContainingJar</h4> -<pre>private static <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html#line.975">findContainingJar</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?> my_class, +<pre>private static <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html#line.976">findContainingJar</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?> my_class, <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> packagedClasses) throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre> <div class="block">Find a jar that contains a class of the same name, if any. It will return @@ -1442,7 +1442,7 @@ public static void <a href="../../../../../src-html/org/apache/hadoop/ <ul class="blockListLast"> <li class="blockList"> <h4>getJar</h4> -<pre>private static <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html#line.1015">getJar</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?> my_class)</pre> +<pre>private static <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.html#line.1016">getJar</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?> my_class)</pre> <div class="block">Invoke 'getJar' on a custom JarFinder implementation. Useful for some job configuration contexts (HBASE-8140) and also for testing on MRv2. check if we have HADOOP-9426.</div>
