부하 상황에서 hadoop
- Posted at 2009/06/24 14:41
- Filed under project/lucene_hadoop
최근 Neptune의 부하 상황에 대해 지속적으로 테스트를 수행하고 있습니다. 부하 상황에서 다양한 오류가 발생하고 있는데 많은 부분이 Hadoop의 원인으로 나타나고 있습니다. hadoop을 단순히 MapRedude 작업용으로만 사용할 때에는 발생하지 않던 문제들이 실시간 Multi Thread 환경에서 사용되면서 다양한 문제가 나오고 있습니다.
그중 하나가 BlockReport 시간이 오래 걸리는 문제입니다. 다음 이슈에서 확인할 수 있습니다. https://issues.apache.org/jira/browse/HADOOP-4584
DataNode가 1시간 주기로 자기가 가지고 있는 모든 block 정보를 읽어 NameNode로 전송하는데 이 시간이 10분 이상 소요될 때도 있습니다. 문제는 이 시간 동안 다양한 lock이 발생하면서 NameNode에서는 해당 DataNode가 죽은 것으로 판단하기도 하고 DataNode 자체에서는 디렉토리 생성, 파일 읽기 작업 등에 문제가 발생하기도 합니다.
두번째 문제는 Hadoop의 DataNode가 동시에 서비스 가능한 Block의 갯수의 제한입니다. default 값은 256개입니다. 파라미터로 수정 가능하지만 hadooop-default.xml 에는 나와 있지 않고 소스에서 찾아야 합니다. Property 이름은 "dfs.datanode.max.xcievers" 입니다. 무작정 늘릴 수는 없고 허용 가능한 Socket 갯수 정도로 지정하면 됩니다.
일단 Neptune에서는 이런 문제에 대해 Neptune의 성능을 조금 다운그레이딩 하는 차원에서 해결할려고 합니다. Hadoop을 수정할 수는 없으니까요...
마지막으로 이런 문제들이 주로 DataNode가 수행되는 노드에 hdfs를 사용하는 프로그램(TabletServer 등)을 수행했을 때 많이 발생하였습니다.
사용한 Hadoop 버전은 0.19.0 입니다.
그중 하나가 BlockReport 시간이 오래 걸리는 문제입니다. 다음 이슈에서 확인할 수 있습니다. https://issues.apache.org/jira/browse/HADOOP-4584
DataNode가 1시간 주기로 자기가 가지고 있는 모든 block 정보를 읽어 NameNode로 전송하는데 이 시간이 10분 이상 소요될 때도 있습니다. 문제는 이 시간 동안 다양한 lock이 발생하면서 NameNode에서는 해당 DataNode가 죽은 것으로 판단하기도 하고 DataNode 자체에서는 디렉토리 생성, 파일 읽기 작업 등에 문제가 발생하기도 합니다.
두번째 문제는 Hadoop의 DataNode가 동시에 서비스 가능한 Block의 갯수의 제한입니다. default 값은 256개입니다. 파라미터로 수정 가능하지만 hadooop-default.xml 에는 나와 있지 않고 소스에서 찾아야 합니다. Property 이름은 "dfs.datanode.max.xcievers" 입니다. 무작정 늘릴 수는 없고 허용 가능한 Socket 갯수 정도로 지정하면 됩니다.
일단 Neptune에서는 이런 문제에 대해 Neptune의 성능을 조금 다운그레이딩 하는 차원에서 해결할려고 합니다. Hadoop을 수정할 수는 없으니까요...
마지막으로 이런 문제들이 주로 DataNode가 수행되는 노드에 hdfs를 사용하는 프로그램(TabletServer 등)을 수행했을 때 많이 발생하였습니다.
사용한 Hadoop 버전은 0.19.0 입니다.
Posted by 김형준
- Response
- No Trackback , No Comment
Trackback URL : http://www.jaso.co.kr/trackback/360





