Hadoop

[Hadoop3] Erasure Coding

Sencia 2021. 3. 25. 16:17
반응형

Hadoop3에서 가장 중요한 특징 중 하나는 Erasure Coding이다. 
On-premise 환경에서 운영하다보면 사실 가장 큰 문제는 용량 이슈이다.

서버 한대를 추가하는 것은 큰 비용이 들고 유휴시간을 생각하면 꼭 서버를 추가해야하나 의문도 든다.
기존 데이터를 지우고 또 지워도 충분한 용량이 확보되지 않을 수도 있다.
그런 관점에서 봤을때 EC는 이 용량이슈를 도와줄 수 있다. 


(물론 모든 데이터에 EC 정책을 지원하는 것보다는 데이터의 쓰임새나 접근 빈도, 형태 등에 따라 각기 적용하는 것이 좋다. 
EC정책을 적용할 경우 복잡성이 추가되고 장애 복구 비용이 많이 들기 때문에 사전에 고려할 사항이 많다. 
이는 운영자의 숙련도에 따라 효율성이 다를 수 있음을 말한다. ) 

 

출처: https://m.blog.naver.com/limoremo /220553762165

 

EC와 RAID 5의 parity cell을 사용한 복구방식은 유사해보이나 다르다. 
데이터 복구를 지원해줄 수는 있으나 EC를 완전히 데이터 백업 용도로 사용하기엔 성능 이슈 등이 있기 때문이다.
실제 장애가 발생했을때 RAID를 사용하여 데이터를 복구하는 것이 EC를 이용하는 것보다 훨씬 속도도 빠르고 장애복구 비용도 적다. 
EC가 좀 더 발전한다면 RAID를 대체할 수 있지 않을까 하는 의견들도 있다. 

 

EC는 Erauser code를 사용해 데이터를 인코딩하고 데이터를 손실시 디코딩 과정을 통해 원본 데이터를 복구한다. 
인코딩한 데이터는 원본 데이터에 비해(EC 정책에 따라 다르지만) 적은 용량으로 저장할 수 있다. 

 

정책 설명
RS-DEFAULT-3-2-64k Data Block 3개, Parity Block 2개, 블럭사이즈 64KB (최소 구성노드 5개)
RS-DEFAULT-6-3-64k Data Block 6개, Parity Block 3개, 블럭사이즈 64KB (최소 구성노드 9개)
RS-DEFAULT-10-4-64K Data Block 10개, Parity Block 4개, 블럭사이즈 64KB (최소 구성노드 14개)
RS-LEGACY-6-3-64K description mia ! (최소 구성노드 9개)
XOR-2-1-64k XOR 오류 정정 방식. 블럭사이즈 64KB (최소 구성노드 3개)

 

EC 정책의 경우 적합한 데이터의 크기에 따라 결정해야 한다. 
아래 그래프를 보면 데이터 파일 크기와 블록의 개수에 따라 가장 효율적인지 확인할 수 있다. 

만약 데이터 크기가 256mb보다 작다면 블록 수의 관점에서 EC를 적용하면 오히려 손해이다. 

출처: https://joonyon.tistory.com/149?category=760357

 

EC를 적용하려면 실제 데이터 파일의 크기와 EC를 적용했을때 파일의 크기, 데이터의 상태, 성격을 고려해야한다. 

저장 방식 실제 데이터 저장 용량  가용 크기/전체 크기  손실 허용
블록 갯수 
Replication-Factor 3 1/3 3TB / 9TB 2
Erasure Coding-RS-6-3 2/3 6TB / 9TB 3

 


EC 복구 절차 

1. 실패한 EC 블록은 namenode가 감지하여 복구 작업을 datanode에 위임 

2. EC 정책에 따라 나머지 데이터와 패리티 블록의 수를 병렬로 읽고 해등 블록에서 새 데이터나 패리티 블록을 계산 
삭제된 데이터는 각 데이터 블록과 패리티 블록이 서로 다룬 datanode에 있거나 다른 rack에 있으므로(이상적인 구조에서는) 네트워크를 많이 사용

3. 디코딩이 완료되면 복구된 블록이 datanode에 기록 

RS(6,3)의 경우 블록을 재구성하려면 6개의 다른 랙에서 데이터를 가져와야 한다. 
그렇기 때문에 랙간 네트워크 비용이 들어가고 복구 속도가 느릴 수 있다. 
이 복구 과정에서 CPU도 사용되므로 전체 클러스터에 영향을 미칠 수도 있다. 

자세한 내용은 아래 cloudera의 글을 참고하면 좋을 것 같다. 

blog.cloudera.com/hdfs-erasure-coding-in-production/


명령어 

# ec policy 리스트 
hdfs ec -listPolices 

# policy enable 
hdfs ec -enablePolicy RS-6-3-1024k

# policy 적용 
hdfs ec -setPolicy -path [path] RS-6-3-1024k 

# policy 적용 확인 
hdfs ec -getPolicy -path [path] 

# policy 제거 
hdfs ec -unsetPolicy -path [path] 

 


참고 

blog.naver.com/PostView.nhn?blogId=redhattt&logNo=221386458958&parentCategoryNo=28&categoryNo=22&viewDate=&isShowPopularPosts=false&from=postView

www.popit.kr/hadoop-3-0%EA%B3%BC-erasure-coding-%ED%8E%B8%EC%A7%91%EC%A6%9D/

m.blog.naver.com/PostView.nhn?blogId=ezkun78&logNo=20010825605&proxyReferer=https:%2F%2Fwww.google.com%2F

joonyon.tistory.com/149?category=760357

hadoop.apache.org/docs/r3.0.0/hadoop-project-dist/hadoop-hdfs/HDFSErasureCoding.html#Configuration_keys

반응형

'Hadoop' 카테고리의 다른 글

ZKFC란 무엇인가  (0) 2021.03.29
[Hadoop3] Observer Namenode  (0) 2021.03.25
Hadoop 설치시 os kernel parameter 설정  (0) 2021.03.22