티스토리 뷰

반응형

HDFS Short Circuit Read 코드 테스트를 위해서 도커에 컨테이너 세팅을 하고 원격 디버거로 붙어서 보다가 Short Circuit Read 설정으로 안들어가서 찾아보니 로그에 다음과 같은 내용이 찍혀 있었다.

19/12/02 20:46:04 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
19/12/02 20:46:05 WARN shortcircuit.DomainSocketFactory: The short-circuit local reads feature cannot be used because libhadoop cannot be loaded.

 

Hadoop Client가 데이터 노드와 같은 호스트에 위치할 때, 데이터노드를 거치지 않고 바로 파일에서 읽을 수 있도록 도메인 소켓을 사용하는 Short Circuit Read 기능이 있다. 

 

Short Circuit Read 기능을 사용하기 위해서는 도메인 소켓을 사용해야하는데, HDFS 코드 중에 

if (DomainSocket.getLoadingFailureReason() != null) {
    return PathInfo.NOT_CONFIGURED;
}

위와 같은 부분이 있다. 'DomainSocket.getLoadingFailureReason()' 메소드에서 "libhadoop cannot be loaded"라는 문자열이 리턴되고 있어 Short Circuit Read 기능이 제대로 동작하지 않았다. 결과적으로는 데이터 노드를 거쳐서 정상적으로 읽어오긴 하지만 ShortCircuitRead를 사용할 수 있음에도 불필요하게 데이터 노드를 거치는 오버헤드가 생겼다.

해결방법

해결방법은 간단하게 libhadoop을 찾도록 해주면 된다.

 

libhadoop.so 파일은 $HADOOP_HOME/lib/native 디렉토리에 위치하고 있다. 따라서 이 경로를 자바 프로그램 구동시 참조할 수 있게 해주면 된다. LD_LIBRARY_PATH 환경 변수에 $HADOOP_HOME/lib/native 경로를 추가해주자. 

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native

.bashrc 파일과 hadoop-env.sh 파일에 추가해주자. 이제 다시 프로그램을 구동하면 ShortCircuit Read를 정상적으로 사용할 수 있게 되었다. 경고 메시지 로그도 더 이상 찍히지 않는다.

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함