[HADOOP] 하둡 MapReduce의 자바 프로그램 예외 : java.lang.NoSuchMethodError [중복]
HADOOP하둡 MapReduce의 자바 프로그램 예외 : java.lang.NoSuchMethodError [중복]
이것은 하둡 내 첫 경험이고, 나는 (제목에서와 같이) 난에 갇혀하고 문제를 해결하는 데 도움이 필요합니다.
내가 찾고 된 프로젝트를 발견 https://github.com/tzulitai/distributed-svm
빌드 정보가 말했다으로 맵리 듀스 작업을 실행하려면 시작하기 전에, 나는, 터미널이 세 가지 명령을 실행 :
$ git clone https://github.com/tzulitai/distributed-svm.git
$ cd distributed-svm
$ mvn clean install
jar 파일 캐스케이드-SVM-MR-0.0.1-SNAPSHOT.jar이 발생하고, 나는 맵리 듀스 작업을 실행하기 위해 아래의 명령에 사용되었다 :
$ '/usr/local/hadoop/bin/hadoop' jar \
>'/home/hduser/distributed-svm/cascade-svm-mr/target/cascade-svm-mr-0.0.1-SNAPSHOT.jar'\
> ncku.hpds.tzulitai.mapreduce.svm.cascade.CascadeSvm input output
여기에 예외의 일부 충족은 다음과 같습니다
Job[] prepartitionJobs = new Job[prepartitionJobCount];
prepartitionJobs[0] = new Job(prepartitionConfs[0], "Cascade SVM: Partitioning training data, Phase 1");
prepartitionJobs[0].setJarByClass(CascadeSvm.class);
prepartitionJobs[0].setNumReduceTasks(0); // map-only job
prepartitionJobs[0].setMapperClass(PreStatCounterMapper.class);
prepartitionJobs[0].setOutputKeyClass(NullWritable.class);
prepartitionJobs[0].setOutputValueClass(Text.class);
FileInputFormat.addInputPath(prepartitionJobs[0], new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(prepartitionJobs[0], new Path(otherArgs[1]+"/tmp"));
prepartitionJobs[0].waitForCompletion(true);
(전체 코드 CascadeSvm.java은 위의 링크에서 확인할 수 있습니다).
이 오류는 위 코드의 마지막 줄에서 만난되었다 :
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.ipc.RPC.getProxy(Ljava/lang/Class;JLjava/net/InetSocketAddress;Lorg/apache/hadoop/security/UserGroupInformation;Lorg/apache/hadoop/conf/Configuration;Ljavax/net/SocketFactory;ILorg/apache/hadoop/io/retry/RetryPolicy;Z)Lorg/apache/hadoop/ipc/VersionedProtocol;
at org.apache.hadoop.mapred.JobClient.createRPCProxy(JobClient.java:505)
at org.apache.hadoop.mapred.JobClient.init(JobClient.java:496)
at org.apache.hadoop.mapred.JobClient.<init>(JobClient.java:479)
at org.apache.hadoop.mapreduce.Job$1.run(Job.java:563)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
at org.apache.hadoop.mapreduce.Job.connect(Job.java:561)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:549)
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:580)
at ncku.hpds.tzulitai.mapreduce.svm.cascade.CascadeSvm.main(CascadeSvm.java:485)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
예외에 따라, 나는 맵리 듀스에서 패키지 작업을 수입하는 경우에도, 메소드에서 waitForCompletion 인식되지 않거나 클래스 작업에 존재하지 않는 것으로 나타났습니다.
나는 프로젝트가 하둡 2.4.1 이전 버전을 사용하고 있었고, 난 현재 하둡 2.7.2을 사용하고 어쩌면 생각, 그래서 문제가 해결되지 STIL pom.xml 파일에서 하둡 버전을 수정하지만.
이 pom.xml 파일입니다 :
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>ncku.hpds.tzulitai</groupId>
<artifactId>distributed-svm</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>distributed-svm</name>
<description>Distributed SVM approaches implemented with MapReduce</description>
<modules>
<module>cascade-svm-mr</module>
<module>bagging-svm-mr</module>
</modules>
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.2</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-core</artifactId>
<version>2.7.2</version>
</dependency>
<dependency>
<groupId>tw.edu.ntu.csie</groupId>
<artifactId>libsvm</artifactId>
<version>3.17</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
내 질문이 너무 깁니다,하지만 난 정말이 오류를 해결해야하는 경우 죄송합니다, 어떤 도움이 안부 이해할 수있을 것이다.
해결법
from https://stackoverflow.com/questions/37501168/hadoop-mapreduce-java-program-exception-java-lang-nosuchmethoderror by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 어떻게 혼자 HIVE에 대한 HDFS 복제 요인을 변경하려면 (0) | 2019.10.19 |
---|---|
[HADOOP] HDFS에 디렉토리를 업로드 할 수 없습니다. `/ usr / 지방 / tmp를 / ': 해당 파일이나 디렉토리 (0) | 2019.10.19 |
[HADOOP] 하이브 정규 표현식 (0) | 2019.10.19 |
[HADOOP] 여기서 절 어떻게 다른과 하이브에 덮어 쓰기 표를 삽입? (0) | 2019.10.19 |
[HADOOP] 아파치 스파크의 배포 문제 (클러스터 모드) 하이브로 (0) | 2019.10.19 |