본문 바로가기

IT for researcher/Cloud Computing

Hadoop - 마소 10.3월호 요약

HDFS는 64MB 단위의 블록으로 쪼개서 분산 저장.
블록정보를 조회 관리 - 네임노드
실제 블록을 저장하는 기능 - 데이터 노드
3개의 서버에 복제해서 저장한다.

저장방법은 파이프라인 방식 

네임노드로 부터 클라이언트가 파일을 저장할 데이터 노드들을 가져온 후
블럭을 A노드에 저장 -->A 노드에서 B노드로 복제 저장 --> B노드에서 C노드로 복제 저장

TCP 소켓을 통해 데이터를 읽기/쓰기를 위한 통신 수행
RPC를 통해 클라이언트와 네임노드간 통신이나 데이터노드와 네임노드간 컨트롤, 관리를 위한 통신 수행


설정 파일

설정파일에 대한 디폴트 값은 xxx-default.xml에 존재한다. 디폴트 값을 변경하려면 ${HADOOP_HOME}/conf/xxx-site.xml 파일에 설정하면 된다.

hadoop-evn.sh
하둡이 실행하는 모든 프로세스에 적용되는 시스템 환경 값을 설정 (이 스크립트를 실행한 후 다른 스크립트들이 실행된다.)
(0.21.0  버전에는 hadoop-config.sh로 변경됨 .. 다른버전은 어쩐지 확인 못함)
masters와 slaves 파일
서버 목록을 관리하는 파일
slaves :데이터노드에 대한 목록 - 전체 데이터 노드에 명령을 수행할 때 사용
maters : 세컨드 네임노드에 대한 목록 

core-site.xml 파일 설정
로그파일, 네트워크 튜닝, 파일시스템 튜닝, 압축 등 하부시스템에 대한 설정


  • fs.default.name: 하둡의 디폴트 파일시스템 설정. 네임노드가 해당 hostname과 port를 가지고 수행된다.
  • hadoop.tmp.dir: 하둡의 모든 데이터 저장 및 임시 공간에 대한 최상위 패스 지정.

hdfs-site.xml 파일 설정
데이터 저장 경로 변경

  • dfs.name.dir : 네임노드가 메타데이터와 트랙잭션 로그를 저장하는 경로
  • dfs.data.dir: 데이터노드가 블록 데이터를 저장하는 경로

hadoop-metrics.properties 파일 설정
가상머신, 파일시스템, 맵리듀스 모니터링 데이터를 수집하는 방식을 설정


설정을 모든 노드에 동일하게 적용하려면 각 클러스터에 복사한다.
또한 네임노드에서 데이터노드로 접속이 가능하게 하기 위해서는 ssh key를 네임노드에 생성하고 나머지 노드에 공개키를 등록해야함.
$ sudo su -
# ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
# cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
 
포멧하기 - 안해줘도 무방.
#hadoop namenode -format


하둡 데몬 실행하기

디폴트 포트들
네임노드의 관리자 웹UI - 50070 dfs.http.address
데이터노드의 TCP 서버포트 - 50010 dfs.datanode.address
데이터노드의 RPC 서버 포트 - 50020 dfs.datanode.ipc.address
데이터노드의 웹UI- 50075 - dfs.datanode.http.address

HDFS 실행 및 중지 명령어
${HADOOP_HOME}/bin/start-dfs.sh
${HADOOP_HOME}/bin/stop-dfs.sh

파일시스템 정보 확인하기
#hadoop dfsadmin -report


HDFS 튜닝

파일 디스크립터
HDFS는 하나의 파일을 읽더라도 최소 2개 이상의 파일 디스크립터가 필요하다.
리눅스에서 파일 디스크립터를 설정하는 방법
  • 시스템 전체 디스크립터 수 /proc/sys/fs/file-max
  • 프로세스당 파일 디스크립터 설정 /etc/security/limits.conf 
데이터노드 핸들러
파일블럭에 대한 읽기/쓰기를 수행하기 위해 데이터노드와 통신한다. hdfs-site.xml 파일에 설정한다.

네임노드 핸들러-hdfs-site.xml 파일에 설정한다.

시스템 Listen 대기 큐 - core-site.xml 파일에 설정한다.
네임노드와 데이터노드 RPC 서버에서 연결 큐 크기.