복붙노트

[HADOOP] 왜 hbase에서 hbase / lib 폴더를 유지해야합니까?

HADOOP

왜 hbase에서 hbase / lib 폴더를 유지해야합니까?

나는 Hbase에 어떤 데이터를 가지고있는 메인 클러스터를 가지고 있으며 그것을 복제하려고한다. 이미 백업 클러스터를 만들고 복제하려는 테이블의 스냅 샷을 만들었습니다. 원본 클러스터에서 스냅 샷을 대상으로 내보내려고 시도했지만 일부 오류가 발생합니다. 나는 실행 중이다.

./hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot mySnap -copy-to hdfs://198.58.88.11:9000/hbase

그리고 실행의 결과로서 나는 도착했다

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/vagrant/hbase/lib/slf4j-log4j12-1.7.7.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/vagrant/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
2015-03-05 10:58:43,155 INFO  [main] snapshot.ExportSnapshot: Copy Snapshot Manifest
2015-03-05 10:58:43,596 INFO  [main] Configuration.deprecation: session.id is deprecated. Instead, use dfs.metrics.session-id
2015-03-05 10:58:43,597 INFO  [main] jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker, sessionId=
2015-03-05 10:58:43,890 INFO  [main] mapreduce.JobSubmitter: Cleaning up the staging area file:/home/vagrant/hadoop/hadoop-datastore/mapred/staging/vagrant1489762780/.staging/job_local1489762780_0001
2015-03-05 10:58:43,892 ERROR [main] snapshot.ExportSnapshot: Snapshot export failed
java.io.FileNotFoundException: File does not exist: hdfs://namenode:9000/home/vagrant/hbase/lib/hbase-client-1.0.0.jar
    at org.apache.hadoop.hdfs.DistributedFileSystem$17.doCall(DistributedFileSystem.java:1072)
    at org.apache.hadoop.hdfs.DistributedFileSystem$17.doCall(DistributedFileSystem.java:1064)
    at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)
    at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:1064)
    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:389)
    at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1285)
    at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1282)
    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:1282)
    at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1303)
    at org.apache.hadoop.hbase.snapshot.ExportSnapshot.runCopyJob(ExportSnapshot.java:775)
    at org.apache.hadoop.hbase.snapshot.ExportSnapshot.run(ExportSnapshot.java:934)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
    at org.apache.hadoop.hbase.snapshot.ExportSnapshot.innerMain(ExportSnapshot.java:1008)
    at org.apache.hadoop.hbase.snapshot.ExportSnapshot.main(ExportSnapshot.java:1012)

그래서, 내가 알기 론, 그것은 base-client-1.0.0.jar을 찾는다. 그러나 로컬 저장소가 아닌 hdfs : // namenode : 9000 / home / vagrant / hbase / lib / hbase-client-1.0.0.jar 파일을 찾고 있습니다. 왜 그런 일이 벌어지고있는가?

해결법

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

    1.필자의 경우 문제의 원인은 원사의 잘못된 구성과지도 축소입니다. 올바르게 구성한 후에는 문제없이 스냅 샷을 내보낼 수있었습니다.

    필자의 경우 문제의 원인은 원사의 잘못된 구성과지도 축소입니다. 올바르게 구성한 후에는 문제없이 스냅 샷을 내보낼 수있었습니다.

    mapred-site.xml을 다음과 같이 만듭니다.

    <configuration>
       <property>
          <name>mapreduce.framework.name</name>
          <value>yarn</value>
       </property>
       <property>
          <name>mapreduce.jobtracker.address</name>
          <value>cluster2.master:8021</value>
       </property>
    </configuration>
    

    그리고 yarn-site.xml

    <property>
      <name>yarn.resourcemanager.hostname</name>
      <value>cluster2.master</value>
      <description>The hostname of the RM.</description>
    </property>
    <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value>
      <description>shuffle service that needs to be set for Map Reduce to run </description>
    </property>
    

    cluster2.master는 설정에 따라 변경되어야합니다.

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

    2.나는 Cloudera 5의 HBase 1.0과 HDFS 2.6.0에서 이것을 발견했습니다.

    나는 Cloudera 5의 HBase 1.0과 HDFS 2.6.0에서 이것을 발견했습니다.

    내가 사용한 것과 실제로 작동하게 만든 해결 방법은 실제로 그 JAR을 HDFS에 복사하는 것입니다. 나는 그것이 추한 것을 알고 있지만 그것은 효과가있어 아무 것도 좋습니다.

    시작 :

    export CLUSTER_NAME=<your_hdfs_cluster_name>
    

    .. 다음 필요한 디렉토리를 만듭니다 :

    hdfs dfs -mkdir -p hdfs://$CLUSTER_NAME/usr/lib/hbase/lib/
    hdfs dfs -mkdir -p hdfs://$CLUSTER_NAME/usr/lib/zookeeper
    hdfs dfs -mkdir -p hdfs://$CLUSTER_NAME/usr/lib/hadoop-mapreduce
    hdfs dfs -mkdir -p hdfs://$CLUSTER_NAME/usr/lib/hadoop
    

    ... 그리고 모든 JAR을 복사하십시오 :

    hdfs dfs -cp file:///usr/lib/hbase/lib/*.jar hdfs://$CLUSTER_NAME/usr/lib/hbase/lib/
    hdfs dfs -cp file:///usr/lib/zookeeper/*.jar hdfs://$CLUSTER_NAME/usr/lib/zookeeper
    hdfs dfs -cp file:///usr/lib/hadoop-mapreduce/*.jar hdfs://$CLUSTER_NAME/usr/lib/hadoop-mapreduce
    hdfs dfs -cp file:///usr/lib/hadoop/*.jar hdfs://$CLUSTER_NAME/usr/lib/hadoop
    
  3. from https://stackoverflow.com/questions/28877600/why-do-i-need-to-keep-hbase-lib-folder-in-hdfs by cc-by-sa and MIT license