티스토리 뷰
MAHOUT / java.lang.NoSuchMethodError: org.apache.hadoop.yarn.proto.YarnProtos$LocalResourceProto.hashLong
개소왕 2018. 5. 14. 10:37* 개요
웹 프로젝트에 Mahout 넣어서 클러스터링 테스트 하자 다음 오류 발생함.
...
java.lang.NoSuchMethodError: org.apache.hadoop.yarn.proto.YarnProtos$LocalResourceProto.hashLong(J)I
at org.apache.hadoop.yarn.proto.YarnProtos$LocalResourceProto.hashCode(YarnProtos.java:11555)
at org.apache.hadoop.yarn.api.records.impl.pb.LocalResourcePBImpl.hashCode(LocalResourcePBImpl.java:62)
Maven 사용시 의존성의 버전 충돌 문제
* 환경
Spring MVC 5
Mahout 0.13.0
Maven
* 원인
- jar 파일 차이 때문이란 의견
- protobuf 버전 차이때문이란 의견
https://groups.google.com/d/topic/protobuf/-pwIkGzpsQs
- 실제로 (잘되던) 구 PRJ 는 2.5.0
새 PRJ 는 2.6.0 사용하고 있음..
- Mahout 0.13 (또는 0.12.2) 는 hadoop-hdfs, hadoop-yarn-api 등에 의존하고 있으며, 여기서는 다시 protobuf 2.5.0 에 의존
- 충돌하는 부분 : mysql-connector 8 에서 protobuf 2.6.0 을 사용하고 있고, 프로젝트 전체에 2.6.0 버전이 적용되는데 여기엔 hashLong() 이 없어서 생기는 문제.
(상위버전 2.6.0이 2.5.0 에 대한 하위호환성 backward compatibility 없어서 생긴 문제)
* 해결
- mysql connector 에서 protobuf 를 exclusion 하여 해결함.
- 프로젝트에서 사용하는 protobuf 버전은 2.5.0 으로 낮춰짐
- mysql connector 8 은 자신이 의존하고 있던 2.6.0 대신 2.5.0 사용하므로 문제 생길 수도 ...
- pom.xml 수정 내용
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
<exclusions>
<exclusion>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
</exclusion>
</exclusions>
</dependency>
* dependencyManagement 로 2.5.0으로 통일하는 방법도 가능.
https://blog.sapzil.org/2018/01/21/taming-maven-transitive-dependencies/
* 한 프로젝트에서 동일 패키지에 대해 2가지 다른 버전을 사용할 순 없나?
- 기본적으로 불가능한듯..
- 참고 링크
- OSGi 언급되는데 뭔지 모르겠음
- Maven shade 사용하라는 의견
의존 라이브러리를 통합하여 1개의 Jar 로 만들 수 있는 툴인데, 이 과정에서 패키지 명 변경도 가능한듯.
버전이 다른 2개 패키지 중 1개의 패키지명을 수정하여 사용이 가능한듯함.
예시)
https://medium.com/@minyodev/relocating-classes-using-apache-maven-shade-plugin-6957a1a8666d
- Maven shade 관련 내용
http://javacan.tistory.com/entry/mavenshadeplugin
http://asuraiv.blogspot.kr/2016/01/maven-shade-plugin-1-resource.html
'SW개발 > Machine Learning' 카테고리의 다른 글
MAHOUT / K평균 클러스터링 결과 (0) | 2018.05.21 |
---|---|
MAHOUT / java.lang.IllegalStateException: No input clusters found in /home/udell/180513clst/clst_180519_201534/vect/initVect/initVect.seq. Check your -c argument. (0) | 2018.05.19 |
Ubuntu / Mahout 설치 (0) | 2018.04.29 |
Mahout CanopyDriver.run 실행시 FileNotFoundException (0) | 2018.04.13 |
weka 외카 웨카 설치 (0) | 2018.01.13 |