일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- arima
- dx
- kt aivle school
- 빅데이터분석기사
- Eda
- 소셜네트워크분석
- python
- 한국전자통신연구원 인턴
- 가나다영
- 다변량분석
- 하둡
- SQLD
- 웹크롤링
- matplot
- 시계열
- 하계인턴
- KT AIVLE
- 한국전자통신연구원
- 에이블스쿨
- 프로그래머스
- 빅분기
- 서평
- 기계학습
- 에이블러
- 시각화
- 머신러닝
- ggplot2
- httr
- hadoop
- ETRI
- SQL
- cnn
- KT 에이블스쿨
- 에트리 인턴
- Ai
- r
- 지도학습
- 딥러닝
- kaggle
- ML
- Today
- Total
소품집
HDFS (Hadoop Distributed File System) 본문
1. HDFS 기초
Hadoop Distributed File System
기존 대용량 파일 시스템
HDFS 설계 목표
- 장애복구
- 디스크 오류로 인한 데이터 저장 실패 및 유실과 같은 장애를 빠른 시간에 감지하고 대처
- 데이터를 저장하면, 복제 데이터도 함께 저장해서 데이터 유실을 방지
- 분산 서버 간 주기적인 상태 체크
- 스트리밍 방식의 데이터 접근
- 랜덤 엑세스 방식과 반대되는 개념
- 순차적으로 데이터에 접근하는 방식
- 낮은 접근 지연시간보다는 높은 데이터 처리율에 중점
- 파일 저장 및 조회를 위해 스트리밍 방식으로 데이터에 접근해야 함
- 배치 작업과 높은 데이터 처리량을 위해 스트리밍 방식을 사용
- 대용량 데이터 저장
- 하나의 파일이 기가바이트에서 테라바이트 이상의 사이즈로 저장될 수 있게 설계
- 높은 데이터 전송 대역폭, 하나의 클러스트에서 수백 대의 노드를 지원
- 하나의 인스턴스에서 수백만 개 이상의 파일을 지원
- 데이터 무결성
- 한 번 저장한 데이터를 수정할 수 없음(읽기만 가능)
- 파일이동, 삭제, 복사할 수 있는 인터페이스 제공
HDFS의 특징
- 대용량 데이터를 범용 서버로만으로도 처리 가능
- 데이터 파일 크기나 개별 장비의 파일 시스템 크기에 제한이 없음
- 용량 확장성
- 데이터가 증가하면 노드 추가로 처리 가능
- 높은 처리량을 실현
- 데이터의 부분 수정 불가, 랜덤 접근 불가, 큰 불록 크기 → 고속처리가 가능
- 슬레이브 노드의 일부가 고장 나도 데이터 손실을 방지 가능
- 복수개의 노드에 데이터 복제 유지
2. HDFS 아키텍처
블록 구조 파일 시스템
기본 블록 크기 64MB(하둡1.0), 128MB(하둡 2.0)
- 데이터 위치를 찾는 시간 감소
- 데이터 관리 정보(블록위치, 파일명, 디렉터리 구조, 권한) 크기 감소
블록의 수가 늘어날수록 노드의 수는 줄어든다
네임노드와 데이터노드
Q. 왜 클라이언트는 데이터 노드에 직접 요청하지 않고, 네임 노드에 제어를 요청할까?
A. 클라이언트는 데이터가 어디에 저장되어 있는지 모른다^__^
NameNode의 역할
-
메타 데이터 관리
- 파일 속성 정보나 파일 시스템 정보
- 디스크가 아닌 메모리에서 관리하므로 빠른 응답 가능 (Ram : 임시 저장소 (휘발))
-
HDFS 사용 상황 확인
- DataNode의 용량이 다 차면 다른 DataNode로 블록을 이동. 데이터 노드는 자신의 블록 자체만 관리
- 블록 복제본 수(count)도 관리 (새로 만들거나 삭제)
-
클라이언트의 HDFS 처리 요청 접수
-
클라이언트가 HDFS에 대해 파일 접근 요청
-
NameNode가 메타 데이터를 바탕으로 대상 블록을 보유한 DataNode 리스트를 클라이언트에게 전달 → 위치 index 전달
-
클라이언트가 해당 DataNode와 직접 통신
-
-
DataNode 다운 여부 감시
- DataNode가 NameNode에게 주기적으로 Heartbeat 송신 (만약 신호가 없으면, '꺼졌구나!')
메타데이터에 포함되는 정보
- 파일명
- 디렉터리 (DataNode중에서도 '위치')
- 데이터 블록 크기
- 소유자: 소속그룹
- 파일 속성
- DataNode와 블록 대응 정보
- 블록 ID와 해당 블록을 보유하고 있는 DataNode 정보 → Mapping 된 상태로 저장되어 있음
- DataNode가 하트비트를 3초 간격으로 전송할 때, 자신이 관리하는 블록 정보를 통지(block report)
- 이를 바탕으로 전체 블록 정보를 구축하고 복제수가 충분한지 판단
fsimage (fs이미지)
- 메모리 상에 관리되고 있는 메타데이터 내의 파일 시스템 이미지 (메모리는 '휘발성'이기 때문에, 메모리의 용량 한계 문제 때문에 주기적으로 저장해 둠)
- 체크 포인트라고 불리는 타이밍에 NamNode의 로컬 파일 시스템에 생성
- DataNode와 블록 대응 정보는 포함하지 않음
- 저장주기가 길다 (실시간이 아님!!)
edits (fs이미지 보완 ver.)
- 파일 처리 시 로컬 파일 시스템에 생성되는 편집 로그 (fs이미지보다 저장 주기가 짧다!!)
- 이 로그를 메모리 상에서 관리되고 있는 파일 시스템 이미지에 적용
SecondaryNameNode
- HA 클러스터(엑티브 네임노드+스탠바이 네임노드) 구성을 사용하지 않는 Hadoop 클러스터에서 사용
- 주기적으로 NameNode에서 fsimage와 edits를 받아서 이들을 합치고, HDFS에 대한 갱신내용을 반영한 새로운 fsimage를 생성
- 생성한 fsimage를 NameNode에 전송
- 체크 포인트를 실시하여 fsimage에 적용 완료한 edits를 삭제함(NameNode edits → 용량절약)으로써 디스크 공간 절약
- NameNode 재시작 시 fsimage에 대한 edits 적용 크기를 줄일 수 있어서 재시작시 시간 단축
- NameNode에 장애가 발생한 경우, 메타 데이터를 보존함으로써 완전 데이터 손실을 방지
HDFS의 파일 저장
- 클라이언트가 네임노드에게 파일 저장 요청
2. 클라이언트가 데이터 노드에게 패킷을 전송
3. 클라이언트가 파일 저장을 완료
스트림 : 파일저장 요청을 위한 제어정보
네임노드가 스트리머한테 데이터 목록을 반환한다!
HDFS의 파일읽기
1. 클라이언트가 HDFS에 저장된 블록 위치 조회
노드가 망가지면 복사본 노드를 사용한다. 근데 클라이언트들은 그 사실을 모르잖아?
그래서! 읽을 때 마다 어디에 저장되어있는지 확인한다 !!
2. 클라이언트가 HDFS에 저장된 실제 블록을 조회
4,5번 과정은 한 번더 체크하기 위해 추가요청을 함!
3. 클라이언트가 모든 블록을 읽은 후 입력 스트림을 닫음
Client끼리 충돌을 막기 위해 블록 읽기를 마치면 스트림을 닫음! ex) 전화받을 때 처럼
3. HDFS 명령어
사용법
- 해당 명령을 적용할 폴더로 이동 후
- hadoop fs - 명령어
파일 목록 보기
ls - 지정한 디렉터리에 있는 파일 정보 출력, 특정 파일 정보 출력
lsr - 지정한 디렉터리 및 하위 디렉터리 정보까지 출력
파일용량 확인
du - 지정한 디렉터리나 파일의 사용량을 확인. 바이트 단위로 출력
dus - 전체 합계 용량만 출력
파일 내용 보기
cat : 지정한 파일의 내용을 출력 (텍스트 파일만 가능하다!!)
- ex) hadoop fs -cat conf/hadoop-env.sh
text : zip 형태로 압축된 파일도 출력 가능
- ex) hadoop fs -text conf/hadoop-env.sh
디렉터리 생성
mkdir
- 지정한 경로에 디렉터리 생성
- hadoop fs -mkdir testDir
- hadoop fs -ls
- 이미 존재하는 디렉터리 생성시 오류 발생
파일복사
put (=copyFromLocal)
-
지정한 로컬 파일 시스템의 파일 및 디렉터리(실제 하드디스크)를 목적지 경로(하둡)로 복사
ex) hadoop fs -put conf testDir, hadoop fs-ls testDir
get(=copyTolocal)
- HDFS에 저장된 데이터를 로컬 파일 시스템으로 복사
- 무결성 확인을 위해 checksum 기능 사용 가능 (주고받는 과정에서 데이터가 깨질 것을 고려하여 몇 byte를 더 해줌) Q. 다 더 했을 때 0이 되는가? A. Yes. 성공한 거임!
- hadoop fs –getmerge wordcount_output/_logs/history wordcount_log
- head -5 wordcount_log
getmerge: 지정한 경로에 있는 모든 파일의 내용을 합친 후, 로컬 파일 시스템에 하나의 파일로 복사
- hadoop fs -getmerge wordcount_output/_logs/history wordcount_log
- head -5 wordcount_log
cp: 지정한 소스 디렉터리 및 파일을 목적지 경로롤 복사
- hadoop fs -cp conf/hadoop-env,sh conf/hadoop-env.bak
- hadoop fs -ls conf
파일이동
mv: 소스디렉터리 및 파일을 목적지 경로로 이동
- hadoop fs -mv conf conf2
- hadoop fs -ls conf2
moveFromLocal : 지정한 로컬 파일 시스템의 파일 및 디렉터리를 목적지 경로로 복사 후 소스 경로의 파일은 삭제
파일삭제
rm : 지정한디렉터리나 파일을 삭제. 디렉터리는 반드시 비어있는 경우에만 삭제 가능
- hadoop fs -rm conf2/hadoop-env.sh
rmr : 지정한 디렉터리 및 파일을 삭제. 비어있지 않은 디렉터리도 삭제 가능
- hadoop fs -rmr test*
'Hadoop' 카테고리의 다른 글
HADOOP - MapReduce (0) | 2020.05.22 |
---|---|
Hadoop 이란? 기본 동작구성과 프레임워크 (0) | 2020.05.12 |
Hadoop 이란 (0) | 2020.04.01 |