I will make this presentation for seminar of NIPA
For more information of the seminar, please go to http://www.software.kr/user/seminar.mbs?id=swkr_050102000000&command=view&idx=376830
I will make this presentation for seminar of NIPA
For more information of the seminar, please go to http://www.software.kr/user/seminar.mbs?id=swkr_050102000000&command=view&idx=376830
빅데이터, 클라우드, IoT, 머신러닝. 왜 이렇게 많은 것들이 나타날까?Yongho Ha
클라우드라는 말이 들리더니, 어느새 빅데이터가 유행했습니다. 데이터가 중요하다는 것을 겨우 받아들일까 하는 판국에, 이제는 IoT라던가 머신러닝이 중요하다고 합니다. 이 많은 유행들은 그냥 일시적인 걸까요? 아니면 동시에 나타나게된 이유가 있는 걸까요? 이것들 뒤에 큰 흐름이 있지는 않을까요? 있다면 그것은 어디에서 시작되고 있을까요? numberworks.io
저장장치에서 익혀야 할 기본적인 개념들을 정리해 보았습니다.
우선 디스크 측면에서 HDD와 SSD에 대한 물리적인 성질을 정리해보았고
다음으로 논리 layer에서 볼륨과 파일시스템을 대략 정리해보았습니다.
그리고 linux와 windows 에서 많이 사용되는 local 파일시스템을 정리하였습니다.
마지막으로 엔터프라이즈 환경에서 다루는 DAS, NAS, SAN에 대해 정리를 해보았습니다.
그 이상의 아키텍쳐에서는 필요해졌고 분산파일시스템을 언급하였습니다. 대표적인 HDFS, Gluster, Ceph 등을 정리해보았지만 이부분은 잘 몰라서 아주 간단히 언급하였습니다.
3. 네임노드 - VERSION
• layoutVersion : 음의 정수로 정의
• namespaceID : 파일시스템 식별자, 데이터 노드 식별
• cTime : 네임노드 저장소 생성시간 표시
• storageType : 네임노드에 데이터 구조 표시
TUE Mar 10 19:21:36 GMT 2009
namespaceID=134368441
cTime=0
storageType=NAME_NODE
layoutVersion=-18
4. 에디트 로그
• 클라이언트가 쓰기 동작할 때 마다 에디트로그
에 기록.
• 네임노드는 FS메타데이터를 메모리에 올려서 인
메모리 자료구조로 관리, 에디트로그가 수정된
후에 업데이트.
• 인메모리 데이터는 읽기 요청을 수행하는데 사
용
• edits 파일 크기의 제한은 없음.
5. fsimage
• 파일시스템 메타데이터 영속적인 체크포
인트 파일.
• 개별 쓰기 동작 때마다 갱신 되지 않음.
• 파일시스템에 존재하는 모든 디렉토리와
파일 inode 정보를 바이트로 직렬화.
• inode
• 파일, 파일의 복제단위, 변경및 접근 시간, 접
근권한 블록의 크기
6. edits 파일 크다면
• 네임노드가 구동중일때 영향없음.
• 네임노드가 재시작하는 경우 에디트로그
의 개별 동작을 메모리에 반영 하기 위해
상당한 시간이 소요.
• 해결책 : 보조 네임노드를 구동.
• 보조 네임노드의 용도는 주 네임노드의 인
메모리 메타데이터에 체크포인트를 생성.
8. 보조 네임노드 디렉터리 구조
•네임노드가 시작할때 importCheckpint 옵션을 사용하면
보조네임노드가 주네임노드로
9. 데이터노드 디렉터리 구조
• 디렉터리 내 블록 수는 64개(dfs.datanode.numblocks)
• dfs.data.dir은 여러 디렉터리 지정가능, 블록은 라운드 로빈
방식으로 각 디렉터리에 쓰여짐.
10. 안전모드
1. 네임노드는 시작직후 fsimage를 메모리에 적제하고
edits로그의 변경사항을 반영
2. 완전한 메타데이타가 재구성되면 새로운 fsimage와
빈 edit 로그를 생성.
3. 안전모드 실행 시 읽기 전용의 RPC와 HTTP 요청이
수락된다.
4. 데이터 노드들로부터 블락정보를 넘겨받는다.
5. 최소 복제 상태가 되면 30초후 안전모드가 해제된다.
11. 안전모드 속성
속성명 타입 기본값 설명
dfs.replication.min 정수 1 쓰기 작업이 성공하기 위해서
쓰여져야 하는 최소 복제본수
dfs.safemode.threshold.pct 실수 0.999 최소 복제 수준을 충족하는 시
스템내의 블록의 비율.
이 값을 0이하나 그 이하로 설
정하면 네임노드는 안전모드
없이 시작.
dfs.safemode.extension 정수 30,000 최소 복제본수가 만족하고 나
서 안전모드 상태 유지 시간
(ms 단위)
12. 안전모드 진입과 해제
• 안전모드인지 확인하기
% hadoop dfsadmin –safemode get
• 특정 명령이 실행 되기 전 안전모드가 빠져 나오
기를 기다리게 하기
% hadoop dfsadmin –safemode wait
• 안전모드 진입
% hadoop dfsadmin –safemode enter
• 안전모드 빠져 나오기
% hadoop dfsadmin –safemode leave
13. 감사 로깅
• HDFS는 모든 파일시스템 접근 요청을 기
록.
• 감사 로깅은 log4j를 이용.
• 기본값은 WARN
• http://wiki.apache.org/hadoop/HowToConfigure
14. dfsadmin
• HDFS 상태 정보를 조회 및 다양한 관리 동작
을 수행하는 다목적 도구.
• Superuser 권한이 필요.
• 명령어
-help, -report, -metasave, -safemode,
-saveNamespace, -refreshNodes,
-upgradeProgress, -finalzeUpgrade,
-setQuota, -clrQuota, -setSpaceQuota,
-clrSpaceQuota, -refreshServiceAlc
15. fsck
• HDFS내에 있는 파일 상태 점검을 위한 유틸리티
제공.
• 데이터노드를 점검하여 사라지거나, 적게 또는
많이 복제된 블록을 찾아줌.
• 파일을 점검하기 위해서 파일 블록의 메타데이
터를 조회하고 문제점이나 불일치 한 것을 찾는
다.
16. fsck – 체크 상태
• 과잉 복제된 블록
• 부족하게 복제된 블록
• 잘못 복제된 블록
• 오염된 블록
• 없어진 복제본
17. 데이터노드 블록 스캐너
• 모든 데이터노드는 블록 스캐너를 실행 하며 저
장된 블록을 주기적으로 점검
• 문제있는 블록은 클라이언트가 읽기 전에 삭제
하거나 수정.
• 3주마다 주기적으로 점검
• dfs.datanode.scan.preiod.hours
• 기본값은 504시간.
• http://datanode:50075/blockScannerRepo
rt
18. 데이터노드 블록 스캐너
• http://datanode:50075/blockScannerReport?
listblock
• 최근의 점검 상태
• blk_2880642477235589345_1712 : status : ok type :
local scan time : 1328684200718 2012-02-08 01:56:40,718
blk_-8383560827245098225_1470 : status : ok type :
remote scan time : 1328736508026 2012-02-08
16:28:28,026
blk_-1634356630613489001_3191 : status : ok type :
none scan time : 0 not yet verified
19. 밸런서
• 블록을 재분배해주는 하둡 데몬.
• 자주 사용되는 블록을 덜 사용되는 데이터노드의 블
록으로 옮겨줌.
• 균형 상태가 될 때 까지 실행
• 각각의 데이터노드 이용률과 클러스터의 이용률과 비교하
여 주어진 임계치 이내
• -threshold 인자로 임계치 지정, 지정 하지 않으면 10%
• 클러스터는 오직 하나의 밸런서만 실행
• dfs.balance.bandwidthPerSec
• 기본은 초당 1MB
20. 모니터링
• 기대 수준 이하의 서비스를 제공하는 클러스터
를 발견하는 것.
• 주 네임노드, 보조 네임노드, 잡트래커와 같은 데
몬을 관찰.
21. 로깅
• 문제를 파악하기 위한 로그 수준의 레벨을 일시
적으로 변경 가능.
• % hadoop daemonlog -setlevel jobtracker-host:50050
org.apache.hadoop.mared.JobTracker DEBUG
• 잡트래커 재시작 시 로그레벨 변경
• 로그 레벨을 영속적인 변화를 주고 싶을때
• conf 디렉터리의 log4j.properties
• 스택 트레이스 제공
• 웹UI/stacks
• http://jobtracker-host:5003/stacks
22. 매트릭스
• 매트릭스로 알려진 이벤트와 측정치를 수집
• 매트릭스는 context에 속하고, 하둡은 현재 ‘dfs’,
‘mapred’, ‘rpc‘, ‘jvm’을 사용.
• context 내의 매트릭스를 수집.
• conf/hadoopmetrics.properties 파일에서 설정.
• 기본적으로 모든 context는 게시되지 않도록 설
정. (NullContext)
23. Context 종류
• FileContext
• 디버깅 용도로 적합
• 대규모 클러스터 환경(X)
• GangliaContext
• 규모가 큰 클러스터를 위한 오픈 소스 분산 모니터링 시스
템
• http://ganglia.info
• NullContextWithUpdateThread
• JMX류를 위해 구현. GraniaContext도 이와 같은 동작이 진
행됨. 메트릭스가 기본 5초 주기로 갱신
• CompositeContext
• Context들을 여러개 같이 사용할 때 사용
24. 자바 관리 익스텐션(JMX)
• JMX는 모니터링과 관리를 위한 표준 JAVA API
• NullContextWithUpdateThread 를 사용하면
JConsole로 JVM에 접속해 MBean의 최신 상태
값들을 확인
• 일반적으로 Nagios와 갱글리아를 연계해서 하둡
클러스터를 모니터링
• Nagios는 JMX를 접속할 수 있도록 권한,과 원격
접속 활성화등의 설정
25. 하둡 Mbean
MBean class 데몬 매트릭스
NameNodeActivityMBean 네임노드 네임노드 동작 매트릭스
예: 파일 생성 횟숫
FSNameSystemMBean 네임노드 네임노드 상태 매트릭스
예: 연결된 데이터노드 수
DataNodeActivityMBean 데이터노드 데이터노드 동작 매트릭스
예: 읽은 바이트수
FSDataSetMBean 데이터노드 Datanode storage metrics
such as capacity and free
storage space
RpcActivityMBean RPC를 사용하는
모든 데몬 (네임노
드, 데이터노드,
잡트래커, 태스크
트래커)
RPC 통계
예: 평균처리시간
26. 일상적인 관리 절차
• 메타데이터 백업
• 보조 네임노드의 이전 체크포인트 하위 디렉토리를
스크립트로 원격지에 주기적으로 저장.
• 데이터 백업
• 데이터 우선 순위를 정하여 백업
• 백업한다고 100% 안전한 것은 아니다.
• 파일시스템 점검
• 파일시스템 밸런서
27. 노드 위임과 해제
• 클러스터에 가용한 저장공간을 늘리기 위해서
노드 위임.
• 클러스터를 줄이고 싶을 때 노드를 해제.
• 노드는 보통 데이터노드와 태스크트래커가 모두
구동.
• 네임노드에 연결이 허용되는 데이터노드는
dfs.hosts 파일에 기재.
• 잡트래커에 연결하는 태스크트래커는
mapred.hosts 파일에 기재.
28. 새로운 노드 위임하기
1. 인클루드 파일에 새 노드의 네트워크 주소를 추가
2. 아래 명령어를 이용해 네임노드에 허가된 데이터
노드 집합 반영
% hadoop dfsadmin -refreshNodes
3. 새 노드가 하둡 제어 스크립트에 의해 클러스터에
서 사용될 수 있게 slaves 파일 갱신
4. 새 데이터노드 시작
5. 맵리듀스 클러스터를 재시작
(mapred.jobtracker.restart.recover=true 로 설정하
면 재시작시 실행되던 잡들이 복구됨)
6. 새로운 새로운 데이터노드와 태스크트래커가 웹 UI
에 나타나는지 확인
29. 오래된 노드 해제
1. 해제할 노드의 네트워크 주소를 exclude 파일에 추가.
include 파일은 그대로
2. 해제할 노드의 태스크트래커를 중지하기 위해 맵리듀스 클
러스터를 재시작
3. 허가된 새로운 데이터노드를 가지고 네임노드를 갱신
% hadoop dfsadmin -refreshNodes
4. 웹 UI에 접속해서 해제할 데이터노드들의 관리 상태가
'Decommisioning in Progress'로 변했는지 확인
5. 모든 데이터노드가 블록 복사를 완료하면 관리 상태가
'Decommeissioned'
6. 해제된 노드 중단
7. include 파일에서 해당 노드 삭제 후
% hadoop dfsadmin -refreshNodes
8. slaves 파일에서 해당 노드 삭제
30. include ,exclude 파일 우선순위
include exclude 해석
아니오 아니오 접속 불가능 노드
아니오 예 접속 불가능 노드
예 아니오 접속 가능 노드
예 예 접속 가능 노드, 곧 해제
31. 업그레이드
• 업그레이드 할 때는 철저한 계획을 세워서.
• 데이터 유실 위험성이 존재 하므로 데이터와 메
타데이터 백업은 필수.
• 작은 클러스터에서 테스트 후 진행.
• 파일시스템 레이아웃 변경 없이 업그레이드는
비교적 간단.
• 레이아웃버젼이 다르면 네임노드는 구동되지 않
음.
32. 파일시스템 레이아웃 변경 없이
1. HDFS와 맵 리듀스의 새버전 설치
2. 환경 설정 파일 수정
3. 새 데몬 구동
4. 사용자가 새로운 라이브러리를 사용
5. 클러스터에서 오래된 설치 및 설정 파일 삭제
6. 코드와 설정에서 발생하는 디프리케이션 경고
수정
33. 파일시스템 레이아웃 변경
1. 먼저 진행한 업그레이드가 모두 완료 되었는지를 확인하고
나서 다른 업그레이드 진행
2. 맵 리듀스 종료, 테스크트래커의 좀비나, 스레드 종료
3. HDFS 종료. 네이몬드 디렉토리 백업.
4. 클러스터와 클라이언트들에 새 하둡 HDFS와 맵 리듀스 버전
설치
5. -upgrade 옵션으로 HDFS 구동
6. 끝날때까지 대기
7. HDFS에서 새너티 체크
8. 맵리듀스 시작
9. 롤백 or 업그레이드 최종 확인