[HADOOP] TableMapper를 사용할 때 HBase Mapreduce 종속성 문제
HADOOPTableMapper를 사용할 때 HBase Mapreduce 종속성 문제
CDH5.3을 사용하고 있으며 mapreduce 프로그램을 작성하여 테이블을 스캔하고 일부 처리를 수행하려고합니다. TableMapper를 확장하는 매퍼를 만들었고 예외는 다음과 같습니다.
java.io.FileNotFoundException: File does not exist: hdfs://localhost:54310/usr/local/hadoop-2.5-cdh-3.0/share/hadoop/common/lib/protobuf-java-2.5.0.jar
at org.apache.hadoop.hdfs.DistributedFileSystem$17.doCall(DistributedFileSystem.java:1093)
at org.apache.hadoop.hdfs.DistributedFileSystem$17.doCall(DistributedFileSystem.java:1085)
at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)
at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:1085)
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:267)
at org.apache.hadoop.mapreduce.JobSubmitter.copyAndConfigureFiles(JobSubmitter.java:388)
그러나 여기에서 알 수 있듯이 hdfs 경로에서 protobuf-java-2.5.0.jar을 찾고 있지만 실제로는 로컬 경로에 있습니다-/usr/local/hadoop-2.5-cdh-3.0/share/hadoop/ common / lib / protobuf-java-2.5.0.jar, 나는 확인했다. 이것은 일반적인 mapreduce 프로그램에서는 일어나지 않습니다. TableMapper를 사용하는 경우에만이 오류가 발생합니다.
내 드라이버 코드는 다음과 같습니다.
public class AppDriver {
public static void main(String[] args) throws Exception{
Configuration hbaseConfig = HBaseConfiguration.create();
hbaseConfig.set("hbase.zookeeper.quorum", PropertiesUtil.getZookeperHostName());
hbaseConfig.set("hbase.zookeeper.property.clientport", PropertiesUtil.getZookeperPortNum());
Job job = Job.getInstance(hbaseConfig, "hbasemapreducejob");
job.setJarByClass( AppDriver.class );
// Create a scan
Scan scan = new Scan();
scan.setCaching(500); // 1 is the default in Scan, which will be bad for MapReduce jobs
scan.setCacheBlocks(false); // don't set to true for MR jobs
// scan.setStartRow(Bytes.toBytes(PropertiesUtil.getHbaseStartRowkey()));
// scan.setStopRow(Bytes.toBytes(PropertiesUtil.getHbaseStopRowkey()));
TableMapReduceUtil.initTableMapperJob(PropertiesUtil.getHbaseTableName(),scan, ESportMapper.class, Text.class, RecordStatusVO.class, job);
job.setReducerClass( ESportReducer.class );
job.setNumReduceTasks(1);
TableMapReduceUtil.addDependencyJars(job);
// Write the results to a file in the output directory
FileOutputFormat.setOutputPath( job, new Path( args[1] ));
boolean b = job.waitForCompletion(true);
if (!b) {
throw new IOException("error with job!");
}
}
속성 파일을 args [0]로 사용하고 있습니다.
더 밑줄 정보 :
내 gradle.build는 다음과 같습니다 :
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'application'
// Basic Properties
sourceCompatibility = 1.7
targetCompatibility = '1.7'
version = '3.0'
mainClassName ="com.ESport.mapreduce.App.AppDriver"
jar {
manifest {
attributes "Main-Class": "$mainClassName"
}
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
zip64 true
}
repositories {
mavenCentral()
maven { url "http://clojars.org/repo" }
maven { url "http://repository.cloudera.com/artifactory/cloudera- repos/" }
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.+'
compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
compile 'org.apache.storm:storm-core:0.9.4'
compile 'org.apache.commons:commons-compress:1.5'
compile 'org.elasticsearch:elasticsearch:1.7.1'
compile('org.apache.hadoop:hadoop-client:2.5.0-cdh5.3.0'){
exclude group: 'org.slf4j'
}
compile('org.apache.hbase:hbase-client:0.98.6-cdh5.3.0') {
exclude group: 'org.slf4j'
exclude group: 'org.jruby'
exclude group: 'jruby-complete'
exclude group: 'org.codehaus.jackson'
}
compile 'org.apache.hbase:hbase-common:0.98.6-cdh5.3.0'
compile 'org.apache.hbase:hbase-server:0.98.6-cdh5.3.0'
compile 'org.apache.hbase:hbase-protocol:0.98.6-cdh5.3.0'
compile('com.thinkaurelius.titan:titan-core:0.5.2'){
exclude group: 'org.slf4j'
}
compile('com.thinkaurelius.titan:titan-hbase:0.5.2'){
exclude group: 'org.apache.hbase'
exclude group: 'org.slf4j'
}
compile('com.tinkerpop.gremlin:gremlin-java:2.6.0'){
exclude group: 'org.slf4j'
}
compile 'org.perf4j:perf4j:0.9.16'
compile 'com.fasterxml.jackson.core:jackson-core:2.5.3'
compile 'com.fasterxml.jackson.core:jackson-databind:2.5.3'
compile 'com.fasterxml.jackson.core:jackson-annotations:2.5.3'
compile 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.1.2'
}
그리고이 명령을 사용하여 항아리를 실행하고 있습니다.
해결법
-
==============================
1.의사 분산 모드에서 hbase로 설정하려는 경우,이 추가로 인한 가장 가능성이 높은 원인은 $ PATH에 홈입니다. $ PATH에서 hadoop home을 제거하면 의사 분산 모드에서 hbase를 시작할 수 있습니다. 기본적으로 일부 사람들은 .bashrc에 hadoop home을 추가합니다. .bashrc에 추가하면 hadoop home을 제거하십시오.
의사 분산 모드에서 hbase로 설정하려는 경우,이 추가로 인한 가장 가능성이 높은 원인은 $ PATH에 홈입니다. $ PATH에서 hadoop home을 제거하면 의사 분산 모드에서 hbase를 시작할 수 있습니다. 기본적으로 일부 사람들은 .bashrc에 hadoop home을 추가합니다. .bashrc에 추가하면 hadoop home을 제거하십시오.
from https://stackoverflow.com/questions/34349720/hbase-mapreduce-dependency-issue-when-using-tablemapper by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 스파크 구성 파일 (0) | 2019.08.08 |
---|---|
[HADOOP] 돼지의 한 줄 입력에서 여러 줄 출력 생성 (0) | 2019.08.08 |
[HADOOP] hadoop mapreduce의 출력을 압축하는 가장 효율적인 방법 (0) | 2019.08.08 |
[HADOOP] Hadoop MapRed를 사용하여 순서 정렬 (0) | 2019.08.08 |
[HADOOP] Hadoop-Reducer가 매퍼 입력을 기다리고 있습니까? (0) | 2019.08.08 |