복붙노트

[HADOOP] hadoop java.net.URISyntaxException : 절대 URI의 상대 경로 : rsrc : hbase-common-0.98.1-hadoop2.jar

HADOOP

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 라이브러리가 없으면 작업이 정상적으로 실행됩니다. 상대 경로는 어디에 생성됩니까? 어떻게 생성 된 경로를 절대적으로 강제 할 수 있습니까?

내 코드에는 다음 두 줄이 있습니다.

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

도움이나 방향에 대해 미리 감사드립니다.

해결법

  1. ==============================

    1.예외는 약간 오도 된 것입니다. 실제 상대 경로는 파싱되지 않습니다. 여기서 문제는 Hadoop "Path"가 파일 이름에 ':'를 지원하지 않는다는 것입니다. 귀하의 경우, "rsrc : hbase-common-0.98.1-hadoop2.jar"은 "rsrc"가 "scheme"인 것으로 해석되는 반면에 정말로 리소스 파일을 추가하려고합니다 : /// path / to /your/jarfile/rsrc:hbase-common-0.98.1-hadoop2.jar "불법 문자에 대해 논의한 오래된 JIRA가 있습니다 :

    예외는 약간 오도 된 것입니다. 실제 상대 경로는 파싱되지 않습니다. 여기서 문제는 Hadoop "Path"가 파일 이름에 ':'를 지원하지 않는다는 것입니다. 귀하의 경우, "rsrc : hbase-common-0.98.1-hadoop2.jar"은 "rsrc"가 "scheme"인 것으로 해석되는 반면에 정말로 리소스 파일을 추가하려고합니다 : /// 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"의 근본 원인을 해결하는 것입니다. 이클립스를 사용하여 실행 가능한 jar 파일을 빌드하면 문제의 원인이 될 수 있습니다. 가능한 경우 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

  2. from https://stackoverflow.com/questions/25334604/hadoop-java-net-urisyntaxexception-relative-path-in-absolute-uri-rsrchbase-co by cc-by-sa and MIT license