Link Search Menu Expand Document

과거 하둡 플랫폼 운영 당시 메모 형식으로 작성하였던 문서들을 옮겨 놓았어요. 당시 운영했던 플랫폼의 구성들과 운영을 위한 가이드 들을 작성했었네요. Hadoop CLI Command 에 익숙하지 않은 운영/관리자를 위해 Shell 들도 개발해 놓았고, 나중의 담당자를 위한 배려도 담겨있네요.

Version

  • Apache Hadoop 2.4.1

Cluster 구성

  • Replication : 2
  • Block size : 128M
  • Public / Private Neetwork
  • 클러스터 상태 확인
    • http://[namenode-ip]:40070/dfsclusterhealth.jsp
    • http://[namenode-ip]:40070/dfshealth.jsp

Nodes

  • Namenode * 2Ea
  • Journalnode * 3Ea
  • ZKFC * 3Ea
  • Datanode

Namenode

하둡 메타데이터 저장/관리 노드 , Namenode, DFSZKFailoverController 데몬 실행

  • Namenode : 네임노드 데몬, 하둡 메타 관리
  • DFSZKFailoverController : 주키퍼 클라이언트, 네임노드 헬스 체크, HA 컨트롤
  • 관리/운영 배치(추가 개발)
    • /monitor/daemon_hdfs_status.sh
    • /monitor/daemon_hdfs_balancer.sh
    • /monitor/daemon_hdfs_namenode.sh
    • /monitor/daemon_hdfs_snapshot.sh
    • /monitor/daemon_meta_backup.sh
    • /monitor/daemon_del_meta.php
  • 사용포트
    • 40000 : 네임노드 ipc 포트, 기본 주소 포트
    • 40070 : 네임노드 http 사용 포트

Journalnode

하둡 HA 구성을 위해 버전2 에서 등장한 노드로, 파일 추가/삭제 등으로 인한 메타 데이터 변경시 다수의 저널노드중 과반수 이상의 저널노드가 commit 되었을경우만 반영됨. active 노드만 쓰기 권한을 소유하고 standby 노드는 commit 된 로그를 주기적으로 동기화함.

클러스터의 HA 구성에는 1개 이상의 홀수개 저널노드를 설치하여 안정성 확보 가능. 과반수 이하의 저널노드 장애는 서비스에 영향을 주진 않지만 과반수 이상의 장애는 서비스 장애로 이어짐으로 모니터링이 필요함.

  • 실행 데몬명 : JournalNode
  • 사용포트 : 8485

주키퍼 노드

하둡 HA 구성을 위해 버전 2에서 등장한 노드로 네임노드의 DFSZKFailoverController 데몬은 주키퍼 노드와의 세션 유지를 통해 네임노드의 상태를 체크하여 네임노드의 active/standby 결정.

클러스터의 HA 구성에는 1개 이상의 홀수개 주키퍼노드를 설치하여 안정성 확보 가능. 주키퍼 노드의 장애는 서비스에 영향을 주진 않지만, 네임노드 장애가 동시에 발생하여 HA 전환이 필요할경우 standby-standby 상태에 빠질 수 있으니 모니터링이 필요함.

  • 실행 데몬명 : QuorumPeerMain
  • 사용포트 : 2181

데이터 노드

  • 데이터 저장 경로 : $HADOOP_HOME/conf/hdfs-site.xml 파일의 dfs.data.dir
  • 실행 데몬명 : DataNode
  • 사용포트
    • 40010 : 데이터노드 데이터 전송 포트
    • 40020 : 데이터노드 ipc 포트
    • 40075 : 데이터노드 http 포트

관리 / 운영

데몬 시작/종료

  • 주키퍼노드
    • zookeeper/bin/zkServer.sh [ start | stop ]
  • 주키퍼 노드를 제외한 노드
    • hadoop/sbin/hadoop-daemon.sh [start | stop ] [ namenode | zkfc | journalnode | datanode ]

하둡 명령어

  • bin/hdfs : 하둡 버전 1.x 의 “bin/hadoop” 명령어를 포함하는 명령어, 자세한 설명은 아파치 홈페이지 에서 확인 가능함.

Namenode HA

  • 하둡 HA는 버전 2 에서 추가된 기능으로 하둡 자체적으로 지원한다.
  • namespace federation 으로 구성된 Cluster 개념 , namenode 는 HA 구성된 2개의 네임노드를 말한다.
  • namespace, namenode 이름은 서버의 [하둡홈]/conf/hdfs-site.xml 에서 확인 가능하다.
  • 현재 namenode의 상태 확인
    • [namenode]/hadoop/bin/hdfs haadmin –ns [namespace] –getServiceState [namenode]
    • ex) bin/hdfs haadmin -ns ns01 -getServiceState ns01nn1
  • HA 전환
    • [namenode]/hadoop/bin/hdfs haadmin –ns [namespace] –failover [active nn] [standby nn]
    • ex) bin/hdfs haadmin –ns ns01 –failover ns01nn1 ns01nn2

체크포인팅

체크포인팅 작업은 editslog 의 내용을 fsimage 로 머지 시키는 작업으로 하둡 버전 1 에서는 세컨더리 네임노드가 당당하였는데, 하둡 버전 2 에서는 세컨더리 네임노드는 사리지고 HA 구성된 standby 노드에서 역할을 수행함.

밸런싱

  • 데이터노드간 디스크 사용량 이 불균형 할 경우 노드간 블록을 이동시켜 균형화 하는 작업
  • 밸런싱 수행중에 데이터노드의 시작/종료/추가/제거 가 발생할경우 밸런싱을 재시작 하여야 한다.
  • threshold : 밸런싱 작업을 수행할 노드 선정 기준값
  • threshold가 3일경우, 클러스터의 전체 용량 퍼센트 전후로 -3, +3 까지 밸런싱 작업을 수행
    • ex) 평균 사용량 85%, A 노드 사용량 83% : 밸런싱 미대상
    • ex) 평균 사용량 85%, A 노드 사용량 80% : 밸런싱 대상

계획된 데이터 노드 제거

  • conf/dfs.exclude 파일에 제거할 데이터노드의 address 추가
  • /manager/cmd_refreshNodes.sh 실행
  • 클러스터 정보 웹페이지(dfshealth.jsp) 혹은 하둡 리포트(/manager/cmd_report.sh) 에서 제거할 데이터노드의 상태가 Decommissioning Nodes 로 변경되었는지 확인
  • 제거 대상이 된 데이터 노드의 블록들은 시간을 가지고 다른 노드로 이동되어진다.
  • 블록 이동이 완료되면 대상 노드는 DeadNode 로 상태가 변경된다.
  • conf/dfs.exclude 에서 대상 노드 address를 제거한다.

네트워크 토폴로지

  • 하둡으로 신규 파일이 업로드시에 1개의 리플리카는 자신의 데이터노드에 위치하고 그외의 리플리카는 자신 외의 노드에 위치시키는데 이러한 리플리카를 어디에 위치시킬 것인지에 대한 규칙.
  • hadoop/topology.sh, hadoop/topology.data data 파일에 토폴로지 규칙을 설정할 수 있다.
  • 토폴로지로 한번 등록된 서버는 토폴로지 변경이 불가능하다.

디스크 손상

  • 데이터노드가 사용하는 디스크 손상시 데몬은 다운된다. 이를 막기 위해 손상된 디스크를 몇 개까지 허용할 것인지에 대한 설정이 필요한다
  • hdfs-site.xml 파일의 dfs.datanode.failed.volumes.tolerated 에 설정된 개수

블록이름으로 파일 찾기

블록명으로 하둡의 파일을 찾을경우 최근 파일일 경우 네임노드 로그를 통해 찾을 수 있다.

  • 네임노드는 파일 업로드 시에 파일에 블록을 할당하는 로그를 남긴다
    • ex) BLOCK* NameSystem.allocateBlock: /hdfs/path/filename. blk_-3299320753949086868_7367814
  • 로그에서 블록명을 검색하면 하둡 파일 명을 찾을 수 있다.
  • 최근에 업로드된 파일이 아닐 경우, 모든 메타 정보를 체크해야 한다. 이러한 작업은 수분의 시간이 소요되고, 시스템의 부하를 줄 수 있으므로 중복 혹은 반복 실행은 피해야 한다.
  • 네임노드에서 /manager/cmd_fsck.sh /hdfs/path –files –blocks > fsck-temp.log 를 수행하여 모든 파일의 블록 정보를 파일로 기록한다.

장애/복구 시나리오

언더/커럽트/오버 블록 찾기

  • 기본적인 손상/언더/오버 블록의 정보는 하둡 리포트를 통해 확인할 수 있다.
    • ex) 네임노드의 /manager/cmd_report.sh
  • 모든 메타를 체크하여 손상/언더/오버 블록의 정보를 확인한다.
    • ex) /manager/cmd_fsck.sh / > fsck-tmp.log
  • 언더/손상 블록의 정보가 보이며 결과의 맨 마지막에 클러스터 전체에 대한 요약 정보가 출력된다.

커럽트 블록 찾기

  • 커럽트 파일이 있을경우 /manager/cmd_findCorrupt.sh 쉘을 수행하면 커럽트 파일 목록을 찾을 수 있다. 이러한 작업은 수분의 시간이 소요되고, 시스템의 부하를 줄 수 있으므로 중복 혹은 반복 실행은 피해야 한다.

Namenode 디스크 손상

Namenode 디스크가 손상되었을때 HA 전환되어 서비스 장애가 발생하진 않습니다. 디스크 손상이 해결되었을 경우 각각의 노드를 복구할 필요가 있습니다.

  • Namenode 복구
    • bin/hdfs namenode –bootstrapStandby namenode disk로 fsimage 파일외의 파일들이 복사 된다.
  • Journalnode 복구
    • 다른 저널노드의 /journal/data/path 디렉토를 복사해 온다.
  • 휴지통/스냅샷 파일 복구
    • 삭제된 파일은 설정된 보관기간동안 휴지통에 보관되어지며, 휴지통의 파일은 복구가 가능합니다.
    • 휴지통의 경로는 /user/[하둡사용자]/.Trash
    • 휴지통에서도 삭제된 파일의 경우 스냅샷이 남아있을 경우 복구가 가능
    • 스냅샷의 경로는 /user/[스냅샷대상디렉토리]/.snapshot

관리자용 쉘 프로그램

Hadoop CLI Command 에 익숙하지 않은 운영/관리자를 위해 개발

  • /manager/cmd_fsck.sh : 하둡내 파일/블록/노드 등의 정보 확인용 쉘, 관리자 실행권한. 대상 디렉토리가 많거나, 표시하는 정보가 자세할수록 시스템 부하 유발됨
    • ex) ./cmd_fsck.sh /hdfs/path/
    • ex) ./cmd_fsck.sh /hdfs/path/filename –files –blocks -locations
  • /manager/cmd_get.sh : 하둡 파일 읽기
    • ex) ./cmd_get.sh /hdfs/path/filename /local/path/filename
  • /manager/cmd_ls.sh : 하둡 파일 리스트( 리눅스 ls)
    • ex) ./cmd_ls /hdfs/path/filename
  • /manager/cmd_metasave.sh : 리플리케이션 대기 파일/블록 정보를 파일로 저장
    • ex ) ./cmd_metasave.sh ms0306.log
  • /manager/cmd_refreshNodes.sh : 계획된 데이터노드 삭제시 노드 정보 갱신
  • /manager/cmd_report.sh : 하둡 현재 상태에 대한 관리자 리포트 출력, 루트 실행권한
  • /manager/cmd_safemode.sh : 하둡 읽기전용 ON/OFF
    • ex) ./cmd_safemode.sh enter
    • ex) ./cmd_safemode.sh leave
  • /manager/cmd_setBalancerBandwidth.sh : 밸런싱 작업중 사용할 대역폭, 바이트, 설정된 바이트 * 10 만큼의 대역폭 사용
    • ex) ./cmd_setBalancerBandwidth.sh 52428800
  • /manager/cmd_startBalancer.sh : 밸런싱 시작
  • /manager/cmd_stopBalancer.sh : 밸런싱 중지
  • /monitor/daemon_del_meta.sh : 24H 이전 백업메타파일 삭제
  • /monitor/daemon_meta_backup.sh : 네임노드 메타데이터 압축/백업, 매 1시간
  • /monitor/daemon_hdfs_balancer.sh : 주기적인 밸런싱 시작, 매 1시간
  • /monitor/daemon_hdfs_status.sh : 하둡 정보 리포트, 매 15분
  • /monitor/daemon_hdfs_namenode.sh : 하둡2 namenode 데몬 다운시 재시작
  • [datanode]/manager/start_khdfs.sh [local ip] : 데이터노드 시작
  • [datanode]/manager/stop_khdfs.sh : 데이터노드 중지
  • [datanode]/manager/set_loglevel.sh [local ip] : 데이터노드 로그레벨 WARN 설정