web-dev-qa-db-ja.com

hadoop Java.net.URISyntaxException:絶対URIの相対パス:rsrc:hbase-common-0.98.1-hadoop2.jar

HBASEに接続するマップリデュースジョブがあり、このエラーが発生している場所がわかりません。

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)

Hbaseライブラリがない場合、ジョブは正常に実行されます。生成される相対パスはどこにありますか?生成されたパスを絶対にするにはどうすればよいですか?

私のコードには、次の2行があります。

TableMapReduceUtil.addHBaseDependencyJars(conf); HFileOutputFormat2.configureIncrementalLoad(job、htable);

それらを削除すれば大丈夫ですが、仕事は私が必要とすることをしません。私は最終的に、hbaseバルクローダーで使用するHFILEを作成しようとしています。

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

助けや指示を事前に感謝します。

7
ihate3putts

例外は少し誤解を招くものです。解析される実際の相対パスはありません。ここでの問題は、Hadoopの「パス」がファイル名の「:」をサポートしていないことです。あなたの場合、「rsrc:hbase-common-0.98.1-hadoop2.jar」は「rsrc」が「スキーム」であると解釈されていますが、実際にはリソースfile:/// path/toを追加するつもりだったと思います。 /your/jarfile/rsrc:hbase-common-0.98.1-hadoop2.jar "。これは、不正な文字について説明している古いJIRAです。

https://issues.Apache.org/jira/browse/HADOOP-3257

ファイル名に「:」が含まれているため、その絶対パスも使用できない可能性があることに注意してください。 「rsrc%3Ahbase-common-0.98.1-hadoop2.jar」のようにファイル名をエスケープしてみることができますが、使用されている相手側でも正しく見つからない可能性があります。

これを修正する最善の方法は、「rsrc:hbase-common-0.98.1-hadoop2.jar」が導入された根本原因に取り組むことです。Eclipseを使用して実行可能なjarをビルドすることが、問題の原因の1つである可能性があります。可能であれば、Eclipse以外のものを使用してjarをビルドし、同じ問題が発生するかどうかを確認してください。 Eclipseでjarを作成するときに、「必要なライブラリを生成されたjarにパッケージ化する」を選択することもできます。

Uber-jarが大きくなりすぎた場合は、hbase-common-0.98.1-hadoop2.jarなどの元の依存関係jarを、必要な他の依存関係とともにすべてのノードのクラスパスに配置することもできます。 「TableMapReduceUtil.addHBaseDependencyJars(conf);」の呼び出しをスキップします。

これは、あなたが見ているものと同様の問題に遭遇している別のユーザーの古いスレッドです:

http://lucene.472066.n3.nabble.com/Error-while-running-MapR-program-on-multinode-configuration-td4053610.html

18
Dennis Huo