hadoop java.net.URISyntaxException:绝对URI中的相对路径:rsrc:hbase-common-0.98.1-hadoop2.jar

hadoop java.net.URISyntaxException:绝对URI中的相对路径:rsrc:hbase-common-0.98.1-hadoop2.jar,java,hadoop,mapreduce,hbase,bulkloader,Java,Hadoop,Mapreduce,Hbase,Bulkloader,我有一个连接到HBASE的map reduce作业,我无法确定在何处遇到此错误: Exception in thread "main" java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethod

我有一个连接到HBASE的map reduce作业,我无法确定在何处遇到此错误:

Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:212)
Caused by: java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: rsrc:hbase-common-0.98.1-hadoop2.jar
        at org.apache.hadoop.fs.Path.initialize(Path.java:206)
        at org.apache.hadoop.fs.Path.<init>(Path.java:172)
        at org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil.findOrCreateJar(TableMapReduceUtil.java:703)
        at org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil.addDependencyJars(TableMapReduceUtil.java:656)
        at org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil.addHBaseDependencyJars(TableMapReduceUtil.java:573)
        at org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil.addDependencyJars(TableMapReduceUtil.java:617)
        at org.apache.hadoop.hbase.mapreduce.HFileOutputFormat2.configureIncrementalLoad(HFileOutputFormat2.java:398)
        at org.apache.hadoop.hbase.mapreduce.HFileOutputFormat2.configureIncrementalLoad(HFileOutputFormat2.java:356)
        at com.ancestry.bigtree.hfile.JsonToHFileDriver.run(JsonToHFileDriver.java:117)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
        at com.ancestry.bigtree.hfile.JsonToHFileDriver.main(JsonToHFileDriver.java:69)
        ... 10 more
Caused by: java.net.URISyntaxException: Relative path in absolute URI: rsrc:hbase-common-0.98.1-hadoop2.jar
        at java.net.URI.checkPath(URI.java:1804)
        at java.net.URI.<init>(URI.java:752)
        at org.apache.hadoop.fs.Path.initialize(Path.java:203)
线程“main”java.lang.reflect.InvocationTargetException中的异常 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:606) 位于org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:606) 位于org.apache.hadoop.util.RunJar.main(RunJar.java:212) 原因:java.lang.IllegalArgumentException:java.net.URISyntaxException:绝对URI中的相对路径:rsrc:hbase-common-0.98.1-hadoop2.jar 位于org.apache.hadoop.fs.Path.initialize(Path.java:206) 位于org.apache.hadoop.fs.Path(Path.java:172) 位于org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil.findOrCreateJar(TableMapReduceUtil.java:703) 位于org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil.addDependencyJars(TableMapReduceUtil.java:656) 位于org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil.addHBaseDependencyJars(TableMapReduceUtil.java:573) 位于org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil.addDependencyJars(TableMapReduceUtil.java:617) 位于org.apache.hadoop.hbase.mapreduce.HFileOutputFormat2.configureIncrementalLoad(HFileOutputFormat2.java:398) 位于org.apache.hadoop.hbase.mapreduce.HFileOutputFormat2.configureIncrementalLoad(HFileOutputFormat2.java:356) 在com.escentory.bigtree.hfile.JsonToHFileDriver.run(JsonToHFileDriver.java:117)上 位于org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) 位于com.consery.bigtree.hfile.JsonToHFileDriver.main(JsonToHFileDriver.java:69) ... 10多 原因:java.net.URISyntaxException:绝对URI中的相对路径:rsrc:hbase-common-0.98.1-hadoop2.jar 位于java.net.URI.checkPath(URI.java:1804) 位于java.net.URI。(URI.java:752) 位于org.apache.hadoop.fs.Path.initialize(Path.java:203) 如果我没有Hbase库,作业运行正常。正在生成的相对路径在哪里?如何强制生成的路径为绝对路径

在我的代码中有以下两行:

TableMapReduceUtil.addHBaseDependencyJars(配置); HFileOutputFormat2.configureIncrementalLoad(作业,htable)

如果我删除他们,我是好的,但工作不做我需要它做的。我最终尝试创建与hbase bulkloader一起使用的HFILE

环境: HBase 0.96.1.2.0.10.0-1-hadoop2 Hadoop 2.2.0.2.0.10.0-1


提前感谢您的帮助或指导。

例外情况有点误导;没有解析真正的相对路径,这里的问题是Hadoop“path”不支持文件名中的“:”。在您的例子中,“rsrc:hbase-common-0.98.1-hadoop2.jar”被解释为“rsrc”是“scheme”,而我怀疑您确实打算添加资源file:///path/to/your/jarfile/rsrc:hbase-common-0.98.1-hadoop2.jar”。下面是一个老JIRA讨论非法字符:

请注意,您可能也无法使用该绝对路径,因为它的文件名中仍然有“:”。您可以尝试像“rsrc%3Ahbase-common-0.98.1-hadoop2.jar”一样转义该文件名,但在使用它的另一端也可能找不到它

解决此问题的最佳方法是解决引入“rsrc:hbase-common-0.98.1-hadoop2.jar”的根本原因——使用Eclipse构建可运行的jar可能是问题的原因之一。如果可能,尝试使用Eclipse以外的其他工具构建jar,看看是否会出现同样的问题;您还可以尝试选择在Eclipse中创建jar时,将所需库打包到生成的jar中

如果uber jar最终太大,您还可以尝试将原始依赖项jar(如hbase-common-0.98.1-hadoop2.jar)与您可能需要的任何其他依赖项一起放在所有节点的类路径中,然后跳过对“TableMapReduceUtil.addHBaseDependencyJars(conf)”的调用;“

下面是另一个用户的旧线程,它遇到了与您所看到的类似的问题: