복붙노트

[HADOOP] hbase MR 작업을 실행할 때 cdh5.2 클러스터에 FileNotFoundException이 발생합니다.

HADOOP

hbase MR 작업을 실행할 때 cdh5.2 클러스터에 FileNotFoundException이 발생합니다.

cdh5.2 클러스터에 hbase MR 작업을 실행하는 데 문제가 있습니다.

예를 들어, hbase 클래스 경로를 hadoop 클래스 경로에 추가했습니다.

vi /etc/hadoop/conf/hadoop-env.sh

줄을 추가하십시오 :

export HADOOP_CLASSPATH="/usr/lib/hbase/bin/hbase classpath:$HADOOP_CLASSPATH"

그리고 내가 달릴 때 : hadoop jar /usr/lib/hbase/hbase-server-0.98.6-cdh5.2.1.jar 행 카운터 "mytable"

다음과 같은 예외가 있습니다.

14/12/09 03:44:02 WARN security.UserGroupInformation: PriviledgedActionException as:root (auth:SIMPLE) cause:java.io.FileNotFoundException: File does not exist: hdfs://clusterName/usr/lib/hbase/lib/hbase-client-0.98.6-cdh5.2.1.jar
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.apache.hadoop.hbase.mapreduce.Driver.main(Driver.java:54)
        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.io.FileNotFoundException: File does not exist: hdfs://clusterName/usr/lib/hbase/lib/hbase-client-0.98.6-cdh5.2.1.jar
        at org.apache.hadoop.hdfs.DistributedFileSystem$17.doCall(DistributedFileSystem.java:1083)
        at org.apache.hadoop.hdfs.DistributedFileSystem$17.doCall(DistributedFileSystem.java:1075)
        at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)
        at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:1075)
        at org.apache.hadoop.mapreduce.filecache.ClientDistributedCacheManager.getFileStatus(ClientDistributedCacheManager.java:288)
        at org.apache.hadoop.mapreduce.filecache.ClientDistributedCacheManager.getFileStatus(ClientDistributedCacheManager.java:224)
        at org.apache.hadoop.mapreduce.filecache.ClientDistributedCacheManager.determineTimestamps(ClientDistributedCacheManager.java:93)
        at org.apache.hadoop.mapreduce.filecache.ClientDistributedCacheManager.determineTimestampsAndCacheVisibilities(ClientDistributedCacheManager.java:57)
        at org.apache.hadoop.mapreduce.JobSubmitter.copyAndConfigureFiles(JobSubmitter.java:265)
        at org.apache.hadoop.mapreduce.JobSubmitter.copyAndConfigureFiles(JobSubmitter.java:301)
        at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:394)
        at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1295)
        at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1292)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:415)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1614)
        at org.apache.hadoop.mapreduce.Job.submit(Job.java:1292)
        at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1313)
        at org.apache.hadoop.hbase.mapreduce.RowCounter.main(RowCounter.java:191)
        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.ProgramDriver$ProgramDescription.invoke(ProgramDriver.java:72)
        at org.apache.hadoop.util.ProgramDriver.run(ProgramDriver.java:145)
        at org.apache.hadoop.util.ProgramDriver.driver(ProgramDriver.java:153)

해결법

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

    1.따라서 문제는 환경 문제였습니다. 아래 항아리를 / usr / lib / hadoop / lib에 추가했을 때. 모두 잘 작동했습니다

    따라서 문제는 환경 문제였습니다. 아래 항아리를 / usr / lib / hadoop / lib에 추가했을 때. 모두 잘 작동했습니다

    hbase-client-0.98.6-cdh5.2.1.jar
    hbase-common-0.98.6-cdh5.2.1.jar
    hbase-protocol-0.98.6-cdh5.2.1.jar
    hbase-server-0.98.6-cdh5.2.1.jar
    hbase-prefix-tree-0.98.6-cdh5.2.1.jar
    hadoop-core-2.5.0-mr1-cdh5.2.1.jar
    htrace-core-2.04.jar
    

    내 기계에는 다음과 같은 rpm이 있습니다.

    >> rpm -qa | grep cdh
    zookeeper-3.4.5+cdh5.2.1+84-1.cdh5.2.1.p0.13.el6.x86_64
    hadoop-2.5.0+cdh5.2.1+578-1.cdh5.2.1.p0.14.el6.x86_64
    hadoop-0.20-mapreduce-2.5.0+cdh5.2.1+578-1.cdh5.2.1.p0.14.el6.x86_64
    hbase-regionserver-0.98.6+cdh5.2.1+64-1.cdh5.2.1.p0.9.el6.x86_64
    cloudera-cdh-5-0.x86_64
    bigtop-utils-0.7.0+cdh5.2.1+0-1.cdh5.2.1.p0.13.el6.noarch
    bigtop-jsvc-0.6.0+cdh5.2.1+578-1.cdh5.2.1.p0.13.el6.x86_64
    parquet-1.5.0+cdh5.2.1+38-1.cdh5.2.1.p0.12.el6.noarch
    hadoop-hdfs-2.5.0+cdh5.2.1+578-1.cdh5.2.1.p0.14.el6.x86_64
    hadoop-mapreduce-2.5.0+cdh5.2.1+578-1.cdh5.2.1.p0.14.el6.x86_64
    hadoop-0.20-mapreduce-tasktracker-2.5.0+cdh5.2.1+578-1.cdh5.2.1.p0.14.el6.x86_64
    hbase-0.98.6+cdh5.2.1+64-1.cdh5.2.1.p0.9.el6.x86_64
    avro-libs-1.7.6+cdh5.2.1+69-1.cdh5.2.1.p0.13.el6.noarch
    parquet-format-2.1.0+cdh5.2.1+6-1.cdh5.2.1.p0.14.el6.noarch
    hadoop-yarn-2.5.0+cdh5.2.1+578-1.cdh5.2.1.p0.14.el6.x86_64
    hadoop-hdfs-datanode-2.5.0+cdh5.2.1+578-1.cdh5.2.1.p0.14.el6.x86_64
    

    여전히 어떤 rpm이 누락되어 있는지 궁금합니다.

  2. ==============================

    2.CDH 5.2.0에서도 같은 문제가 있습니다. 해결 방법으로 jar 파일을 hdfs에 수동으로 복사했는데 예외가 발생하지 않습니다.

    CDH 5.2.0에서도 같은 문제가 있습니다. 해결 방법으로 jar 파일을 hdfs에 수동으로 복사했는데 예외가 발생하지 않습니다.

  3. ==============================

    3.파일을 HDFS에 수동으로 추가하는 대신 hbase 라이브러리 경로를 .bashrc 파일에 추가 할 수 있습니다. hbase의 lib 폴더를 CLASSPATH에 추가하십시오. 또한 hbase의 클래스 경로를 HADOOP_CLASSPATH에 추가하십시오.

    파일을 HDFS에 수동으로 추가하는 대신 hbase 라이브러리 경로를 .bashrc 파일에 추가 할 수 있습니다. hbase의 lib 폴더를 CLASSPATH에 추가하십시오. 또한 hbase의 클래스 경로를 HADOOP_CLASSPATH에 추가하십시오.

    .bashrc 파일에는 다음이 포함되어야합니다.

    export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:`${HBASE_HOME}/bin/hbase classpath`
    export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:`${HBASE_HOME}/bin/hbase mapredcp`
    
    export CLASSPATH=${HBASE_HOME}/lib/*
    

    참고 : CLASSPATH는 hbase 설치 폴더의 lib 폴더를 가리켜 야합니다. 다음을 사용하여 Java 코드를 컴파일하고 실행하십시오.

    javac Example.java
    java -classpath $CLASSPATH:. Example
    
  4. from https://stackoverflow.com/questions/27374810/my-cdh5-2-cluster-get-filenotfoundexception-when-running-hbase-mr-jobs by cc-by-sa and MIT license