이레이저 코딩
더 많은 작업
이레이저 코딩(Erasure Coding, EC)은 데이터를 k 개의 데이터 조각으로 나누고 그로부터 계산한 m 개의 패리티 조각을 더해 서로 다른 디스크나 노드에 나누어 저장함으로써, 조각 m 개까지를 잃어도 나머지로 원래 데이터를 되살리게 하는 데이터 보호 기법이다.
분산 저장 시스템은 흔히 같은 데이터를 여러 벌 복제해 장애에 대비한다. 복제는 단순하지만 공간을 많이 쓴다. 아파치 하둡의 HDFS 는 기본으로 블록을 3벌 복제하는데, 하둡 문서는 이 방식이 저장 공간과 네트워크 대역폭에서 200% 의 오버헤드를 낸다고 설명한다. 이레이저 코딩은 같은 수준의 고장 허용을 훨씬 적은 공간으로 얻는 방법으로, 전형적인 구성에서 저장 오버헤드가 50% 를 넘지 않는다.[1]
원리는 RAID 의 패리티와 같다. 연속된 데이터를 일정 크기의 셀로 잘라 여러 디스크에 차례로 나누어 쓰는 스트라이핑을 하고, 한 스트라이프의 데이터 셀들로부터 패리티 셀을 계산해(인코딩) 함께 저장한다. 어느 셀이 망가지면 남은 데이터 셀과 패리티 셀로 계산해(디코딩) 되살린다.[1] RAID 5 는 패리티 하나(m = 1), RAID 6 은 패리티 둘(m = 2)을 쓰는 이레이저 코드로 볼 수 있다. 세프(Ceph) 문서는 이레이저 코드를 전진 오류 정정(forward error correction) 부호의 한 갈래로 소개한다.[2]
- k - 원래 데이터를 나눈 데이터 조각(data chunk) 수
- m - 추가로 만든 패리티 조각(coding chunk) 수. 동시에 잃어도 되는 조각(디스크, 노드) 수와 같다
- 공간 배수 - (k + m) / k. 세프 문서의 예로 k = 4, m = 2 이면 1.5배로, 1GiB 를 저장하는 데 1.5GiB 를 쓴다. 3벌 복제의 3.0배와 대비되지만, 복구할 때 성능 부담이 크다는 대가가 있다[2]
- 부호 - 리드-솔로몬(Reed-Solomon, RS) 부호가 표준이고, 패리티가 하나일 때는 XOR 로 충분하다
| 방식 | 원본 6블록을 저장하는 데 드는 블록 | 견디는 고장 | 공간 배수 |
|---|---|---|---|
| 3벌 복제 | 6 × 3 = 18 | 2개 | 3배(오버헤드 200%) |
| RS(6, 3) 이레이저 코딩 | 6 + 3 = 9 | 3개 | 1.5배(오버헤드 50%) |
| RS(10, 4) 이레이저 코딩 | 10 + 4 = 14 (원본 10블록 기준) | 4개 | 1.4배 |
하둡 문서는 3벌 복제한 6블록 파일이 18블록을 쓰는 데 비해 데이터 6, 패리티 3 의 EC 로는 9블록이면 된다고 든다.[1]
HDFS 이레이저 코딩은 하둡 3.0.0(2017년 12월)에서 새로 들어온 기능이다. 하둡 3.0.0 릴리스 문서는 2.x 대비 주요 개선으로 자바 최소 버전 8, HDFS 이레이저 코딩, YARN 타임라인 서비스 v.2, 셸 스크립트 재작성, 기회적 컨테이너(opportunistic container), 세 개 이상의 네임노드 지원 등을 들고, Reed-Solomon(10, 4) 은 공간 오버헤드가 1.4배로 표준 3벌 복제의 3배보다 훨씬 작다고 적는다.[3]
- 정책 이름은 '부호-데이터 블록 수-패리티 블록 수-셀 크기' 꼴이다. RS-3-2-1024k, RS-6-3-1024k, RS-10-4-1024k, XOR-2-1-1024k 등이 내장되어 있고 기본 정책은 RS-6-3-1024k 이다[1]
- EC 를 적용한 파일의 복제 계수는 의미가 없어 항상 1 이다[1]
- 데이터노드가 고장 난 블록을 다른 블록들로부터 디코딩해 되살리며, 복원할 때 여러 노드에서 읽어 와야 해 네트워크와 CPU 부담이 크다. 그래서 자주 읽지 않는 차가운(cold) 데이터에 주로 쓴다[3]
- YARN(자원 관리)과 ResourceManager 는 하둡 2.0 에서 들어왔고, Secondary NameNode 는 하둡 1.x 부터 있던 구성 요소이다. 하둡 3.0 에서 처음 들어온 기능과 구별한다
| 구분 | 복제(replication) | 이레이저 코딩 |
|---|---|---|
| 공간 효율 | 낮다(3벌이면 3배) | 높다(보통 1.4~1.5배) |
| 쓰기 | 사본을 그대로 보낸다 | 패리티를 계산해야 해 CPU 를 더 쓴다 |
| 읽기 | 가까운 사본 하나만 읽는다 | 정상일 때는 데이터 조각을 모아 읽고, 고장이 나면 디코딩이 필요하다 |
| 복구 | 남은 사본을 복사한다 | k 개 조각을 읽어 다시 계산한다(복구 트래픽이 크다) |
| 알맞은 데이터 | 자주 읽고 쓰는 뜨거운 데이터 | 오래 보관하는 차가운 데이터, 대용량 객체 저장 |
- ↑ 1.0 1.1 1.2 1.3 1.4 「HDFS Erasure Coding」, Apache Hadoop 3.0.0 문서, https://hadoop.apache.org/docs/r3.0.0/hadoop-project-dist/hadoop-hdfs/HDFSErasureCoding.html, 확인일: 2026-11-04.
- ↑ 2.0 2.1 「Erasure code」, Ceph Documentation, https://docs.ceph.com/en/latest/rados/operations/erasure-code/, 확인일: 2026-11-04.
- ↑ 3.0 3.1 「Apache Hadoop 3.0.0」 릴리스 개요, Apache Hadoop, https://hadoop.apache.org/docs/r3.0.0/index.html, 확인일: 2026-11-04.