본문 바로가기
카테고리 없음

Tez 실행 시 NoSuchMethodError 해결하기

by 오피스포디 2024. 3. 16.
반응형

도커로 apache/hive 이미지를 이용해서 hive 를 올리고 bde2020/hadoop 이미지를 이용해 3.3.6 버전의 hadoop을 깔고서 tez job 을 실행했는데 자꾸 아래 에러가 났습니다.

 

ERROR : Failed
java.lang.NoSuchMethodError: org.apache.hadoop.fs.FsTracer.get(Lorg/apache/hadoop/conf/Configuration;)Lorg/apache/htrace/core/Tracer;
        at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:323) ~[hadoop-hdfs-client-3.3.1.jar:?]
        at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:308) ~[hadoop-hdfs-client-3.3.1.jar:?]
        at org.apache.hadoop.hdfs.DistributedFileSystem.initDFSClient(DistributedFileSystem.java:201) ~[hadoop-hdfs-client-3.3.1.jar:?]
        at org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:186) ~[hadoop-hdfs-client-3.3.1.jar:?]
        at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:3611) ~[hadoop-common-3.3.6.jar:?]
        at org.apache.hadoop.fs.FileSystem.access$300(FileSystem.java:174) ~[hadoop-common-3.3.6.jar:?]
        at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:3712) ~[hadoop-common-3.3.6.jar:?]
        at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:3663) ~[hadoop-common-3.3.6.jar:?]
        at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:557) ~[hadoop-common-3.3.6.jar:?]
        at org.apache.hadoop.fs.Path.getFileSystem(Path.java:365) ~[hadoop-common-3.3.6.jar:?]

 

미쳐버릴 거 같았는데, 원인은 해당 이미지에 포함된 tez 가 사용하는 하둡 라이브러리 버전이 안 맞아서 났었습니다.

 

원인

  • tez 0.10.2 는 $TEZ_HOME/share/ 폴더에 hadoop-hdfs-client-3.3.1.jar 를 포함하고 있음
  • 실제로 실행 시 필요한 method 는 hadoop-hdfs-client-3.3.6.jar 에 포함되어 있음
  • 3.3.1.jar 에 없는 걸 불러오려고 하니까 NoSuchMethodError 가 남

 

해결 방법

hive 컨테이너를 만들 때, docker-compose.yml 에다가 아예 volumes 에 hadoop-hdfs-client-3.3.6.jar 를 바인딩해주면 됩니다. 아래와 같습니다.

 

실제로 필요한 건 라이브러리이고 jar 파일의 이름은 중요하지 않기 때문에, 다른 애가 원래대로 3.3.1.jar 를 호출하게 하면서 그 jar 의 내용 면에서는 hdfs client 3.3.6 을 담고 있도록 하면 에러가 나지 않습니다.

 

services:
  hive:
    volumes:
      - hue_data:/var/lib/mysql
      - type: bind
        source: /d/docker/hadoop-hdfs-client-3.3.6.jar
        target: /opt/tez/share/hadoop-hdfs-client-3.3.1.jar

 

 

 

 

Tez 실행 시 NoSuchMethodError 해결하기
Tez 실행 시 NoSuchMethodError 해결하기

반응형

댓글