기록/그 외 프로젝트 기록

[Hadoop] Map Reduce - timed out after 600secs

5월._. 2022. 9. 28.
728x90

에러 해결 기록용 글이다.

1. 배경

1)  이 프로젝트에서는 형태소 단위로 wordcount를 진행하고자 했다. 하둡을 '하둡답게' 이용하고 싶었기 때문에 데이터 6기가 정도를 크롤링으로 모았다. 

2)  내가 짠 mapreduce 코드는 관광지명, 형태소가 key고 value가 카운팅횟수이기 때문에 한 줄에 관광지명, 텍스트가 전부 다 들어가있어야했다. 크롤링한 데이터는 일반적인 블로그글이라 미리 특수문자, 개행문자를 모두 제거하고 csv형식으로 정리해두었다.

3)  사용하던 하둡 클러스터 서버는 50대 정도의 서버를 묶은 것으로 내게 sudo권한이 없었다. 따라서 관리자권한이 필요한 설정변경은 할 수 없는 상황이었다.

 

2. 오류메세지

이렇게 mapreduce를 실행하면 timed out after 600secs라는 오류메세지가 계속 등장했다. 

몇번 반복하고나서는 아예 실행실패하는 것이 반복되었다.

 

3. 실행시도

1)  처음에는 데이터가 너무 큰건지 의심했다.

6기가를 6조각으로 쪼개서 실행시켜봤지만 여전히 실패하는 데이터가 존재했다.

2)  아직도 데이터가 큰 지 의심했다.

6기가를 60조각으로 쪼개서 실행시켜봤지만 결과는 여전했다.

3)  로그를 한 줄 한 줄 다시 읽어보았다.

작은 단위로 쪼갰을 때 정상실행되는 데이터가 있는걸 보아 코드 문제는 아니었다. 이 때 오류메세지를 검색해보니 설정을 바꾸라는 글만 나와서 너무 당황스러웠다. 설정을 바꿀 수 없는 환경이었기 때문이다.

처음으로 다시 돌아가서 로그를 한 줄 한 줄 다시 읽어보았다. "killed map tasks=숫자"는 초기에 배정된 map task가 전부 죽었다는 것 같았고, 느낌상으로 실행중에 여러 번 등장한 timed out after 600secs마다 죽는 것 같았다. 

정상적으로 실행되던 map이 10분만에 타임아웃되는 원인이 뭘까? 생각하니 어쩌면 데이터를 전처리한 후에 "한 줄이 엄청나게 길어진 것"이 문제가 되었을 수 있겠다는 가설이 세워졌다.

4) 앞에서 성공했던 작은 데이터를 확인했다.

정말로 엄청나게 긴 "한 줄"이 있는 데이터만 실패한 것을 발견했다. 확인해보니 가장 긴 한줄은 958,822자였다. (..)

5) 한 줄의 최대치 길이를 알아냈다.

33만자에서 실패하고, 30만자 길이는 성공하는 것을 알아냈다. 따라서 보수적으로 접근하기 위해 모든 csv 데이터를 최대 25만자 길이로 잘라냈다.

 

4. 성공

정말 거짓말처럼 최대 25만자 길이로 데이터를 다시 처리하고 나니 6기가 데이터가 한 번에 wordcount에 성공했다. 이 원인을 알아내기까지 거의 3일이 걸렸지만 해결해서 뿌듯하다. 

댓글