린아저씨의 잡학사전

지난 글에서는 Erasure Coding(EC)란 무엇이고 EC의 알고리즘과 정책은 어떤 것이 있는지에 대해 이야기해 보았습니다.

 

2020/11/26 - [IT 정보/Hadoop Eco System] - Hadoop 3에서 Erasure Coding이란 - 1

 

Hadoop 3에서 Erasure Coding이란 - 1

앞선 글에서는 하둡 3버전을 도입해야하는 3가지 이유에 대해서 이야기 해보았습니다. 2020/11/15 - [IT 정보/Hadoop Eco System] - Hadoop 3 버전을 도입해야하는 3가지 이유 Hadoop 3 버전을 도입해야하는 3가

joonyon.tistory.com

 

이어서 이번 글에서는 그렇다면 우리는 EC를 사용하는 것이 정말 기존의 3 copy 복제 정책보다 좋기만 한 것인지, 고려해야 할 사항에는 어떤 것이 있는지에 대해 이야기해보려 합니다.

 

Erasure Coding은 늘 좋은 것인가?

우리는 하둡 3에 EC라는 아주 좋은 기능이 새로이 구현된 것을 알게 되었습니다. 그렇다고 무작정 EC를 우리가 가지고 있는 데이터 또는 앞으로 쌓을 데이터에 적용하는 게 맞는 것일까요? 답정너이긴 하지만 당연히 아.닙.니.다! 분명히 스토리지 효율성에서는 EC가 엄청 좋다고 했는데 그럼 어떤 부분에서 문제가 있는 것일까요?

 

하둡을 처음 구성하고 특별히 설정값을 바꾸지 않았다면 데이터 블록의 기본 단위는 128MB로 되어 있을 것입니다. 따라서 각 데이터의 블록 수는 "데이터 크기/128MB의 올림 정수 값"이 될 것입니다. 예를 들어 120MB짜리 데이터라면 데이터 블록 1개로 저장이 될 것이고, 200MB짜리 데이터라면 데이터 블록 2개로 저장이 될 것입니다. HDFS에서 Replication Factor 3일 경우, 120MB짜리 데이터는 총 3개의 데이터 블록을 저장하게 되고 200MB짜리 데이터라면 총 6개의 데이터 블록을 저장하게 될 것입니다. 

 

반면 EC의 경우 RS-6-3-1024k 정책을 예로 이야기해 보겠습니다. RS-6-3-1024k 정책은 6개의 데이터 블록과 3개의 페러티 블록으로 이루어지며 1개의 데이터 블록은 1024KB 셀 128개로 구성되는 정책입니다. 그리고 6개의 데이터 블록이 하나의 데이터 블록 그룹을 형성하여, RS-6-3-1024k 정책의 데이터 블록 그룹의 크기는 최소 1MB에서 최대 768MB(128MB x 6)가 됩니다. 이때 위 예시와 동일하게 120MB 데이터를 EC로 저장한다면, 1MB 120개의 셀이 6개의 데이터 블록에 분산 저장되어 페러티 블록 3개까지 총 9개의 블록으로 저장됩니다. 200MB 데이터라도 1MB 200개의 셀이 6개의 데이터 블록에 저장되는 것만 다를 뿐 여전히 데이터 블록 6개와 페러티 블록 3개로 총 9개의 블록이 저장됩니다.

 

자 여기에 답이 나왔습니다. 기존의 Replication Factor 3인 경우에는 120MB짜리 데이터는 3개의 블록만 저장하면 되었고, 200MB짜리 데이터도 6개의 블록만 저장하면 되었습니다. 그런데 동일한 데이터에서 EC를 적용했을 경우에는 9개의 블록을 저장해야 하는 상황이 되었습니다. 물론 같은 데이터 크기라면 EC가 9개의 블록을 저장함에도 스토리지에 대한 효율은 Replication Factor 3의 경우보다 1/2 정도 적을 것입니다. 그러나 이렇게 블록 수가 많아진다는 것은 블록 메타정보를 관리하는 Namenode에 더욱 많은 블록 정보를 관리를 요구하게 됨으로 이에 따른 오버헤드를 더욱 악화시키는 문제가 발생하게 되는 것입니다.

 

Erasure Coding을 적용하기에 적합한 데이터 크기

그렇다면 EC를 적용하기에 적합한 데이터 크기는 어느 정도 돼야 할까요? 정답은 다음 그림을 참고하시면 됩니다.

출처 : Cloudera Blog

위의 그림에서 파란색은 EC(RS-6-3-1024k)를 적용한 경우, 빨간색은 Replication Factor 3을 적용한 경우, 노란색은 Replication Factor 1을 적용한 경우입니다. 앞서 이야기한 데로 256MB보다 작은 크기의 데이터에 EC를 적용하는 것은 블록 수 관점에서 손해를 보게 됩니다. 따라서 RS-6-3-1024k EC 정책을 적용할 경우 257MB 이상의 데이터에 적용하는 것이 이상적인 방향으로 볼 수 있습니다. 단, 주의하실 점은 RS-6-3-1024k 정책일 경우에만 257MB 이상의 데이터를 적용하는 것이 이상적인 것이지 RS-10-4-1024k의 정책의 경우에는 훨씬 큰 641MB 이상의 데이터에 적용해야만 블록 수에서 손해를 보지 않을 수 있습니다.

 

결론

오늘은 Erasure Coding 적용 시에 반드시 고려해야 할 부분인 적용할 데이터 파일의 크기와 이상적인 데이터 파일 크기는 얼마 정도 되어야 하는지에 대해서 이야기해보았습니다. 그러나 우리가 EC를 적용하고자 하는 실제 데이터는 이상적인 데이터 파일 크기보다 훨씬 작은 수많은 스몰 파일들로 이루어져 있을 가능성이 높습니다. 따라서 EC를 적용하기 전 저장되어 있는 데이터의 상태와 성격을 고려하여 작은 크기의 파일을 큰 파일로 병합할 수 있을지에 대한 논의가 EC를 적용하기 전 필수로 이루어져야할 것입니다. 끝!

 

공유하기

facebook twitter kakaoTalk kakaostory naver band