복붙노트

[HADOOP] HDFS의 대형 블록 크기! 사용되지 않은 공간은 어떻게 계산됩니까?

HADOOP

HDFS의 대형 블록 크기! 사용되지 않은 공간은 어떻게 계산됩니까?

우리는 HDFS의 블록 크기가 전통적인 파일 시스템의 블록 크기에 비해 꽤 큽니다 (64M 또는 128M). 이것은 전송 시간에 비해 탐색 시간의 비율을 줄이기 위해 수행됩니다 (전송 속도의 향상은 디스크 탐색 시간의 향상보다 훨씬 더 큰 규모 였기 때문에 파일 시스템을 설계하는 동안의 목표는 항상 전송할 데이터의 양과 비교하여 탐색 횟수). 그러나 이것은 내부 단편화의 또 다른 단점을 가지고 있습니다 (전통적인 파일 시스템 블록 크기가 그렇게 크지 않고 단지 몇 KB (일반적으로 4K 또는 8K) 정도입니다).

나는 Hadoop, Definitive Guide를 살펴보고 HDFS의 블록 크기보다 작은 파일이 전체 블록을 차지하지 않고 전체 블록의 공간을 고려하지 못했지만 어딘가에 쓰여진 것을 발견했다. 누군가는 이것에 약간의 빛을 던질 수 있습니까?

해결법

  1. ==============================

    1.HDFS의 블록 분할은 논리적으로 기본 파일 시스템의 물리적 블록 (예 : ext3 / fat)을 기반으로합니다. 파일 시스템은 블록으로 물리적으로 분할되지 않습니다 (예 : 64MB 또는 128MB 또는 블록 크기 일 수 있음). NameNode에 메타 데이터를 저장하는 것은 단순한 추상화입니다. NameNode는 전체 메타 데이터를 메모리에로드해야하므로 메타 데이터 항목 수가 제한되어 큰 블록 크기가 필요하다는 것을 설명합니다.

    HDFS의 블록 분할은 논리적으로 기본 파일 시스템의 물리적 블록 (예 : ext3 / fat)을 기반으로합니다. 파일 시스템은 블록으로 물리적으로 분할되지 않습니다 (예 : 64MB 또는 128MB 또는 블록 크기 일 수 있음). NameNode에 메타 데이터를 저장하는 것은 단순한 추상화입니다. NameNode는 전체 메타 데이터를 메모리에로드해야하므로 메타 데이터 항목 수가 제한되어 큰 블록 크기가 필요하다는 것을 설명합니다.

    따라서 HDFS에 저장된 3 개의 8MB 파일은 논리적으로 3 블록 (NameNode의 메타 데이터 항목 3 개)을 차지하지만 기본 파일 시스템에서 물리적으로 8 * 3 = 24MB 공간을 차지합니다.

    큰 블록 크기는 NameNode의 메모리 한계를 고려하면서 적절한 저장 공간 사용을 고려합니다.

  2. ==============================

    2.Hadoop - The Definitive Guide에 따르면

    Hadoop - The Definitive Guide에 따르면

    HDFS의 각 블록은 기본 OS 파일 시스템 (ext3, ext4 등)의 데이터 노드에 파일로 저장되며 해당 세부 정보는 이름 노드에 저장됩니다. 파일 크기가 200MB이고 블록 크기가 64MB라고 가정 해 봅시다. 이 시나리오에서는 64MB, 64MB, 64MB 및 8MB 크기의 데이터 노드에 4 개의 파일에 해당하는 4 개의 블록이 있습니다 (복제가 1 인 경우).

    데이터 노드의 ls -ltr에 블록 세부 정보가 표시됩니다.

  3. ==============================

    3.일반 파일 시스템에서 빈 파일을 만들면 블록에 저장된 그대로 4k 크기를 유지합니다. HDFS에서는 1GB 파일의 경우 1GB 메모리 만 사용되지만 4GB는 사용되지 않습니다. 더 명확하게.

    일반 파일 시스템에서 빈 파일을 만들면 블록에 저장된 그대로 4k 크기를 유지합니다. HDFS에서는 1GB 파일의 경우 1GB 메모리 만 사용되지만 4GB는 사용되지 않습니다. 더 명확하게.

    IN OS : 파일 크기 1KB, 블록 크기 : 4KB, Mem Used : 4KB, Wastage : 3KB. IN HDFS : 파일 크기 1GB, 블록 크기 : 4GB, 사용 된 메모리 : 1GB, 낭비 : 0GB, 나머지 블록은 다른 블록에서 자유롭게 사용할 수 있습니다.

    * 숫자를 진지하게 생각하지 말고, 숫자를 정리하여 명확하게 작성하십시오.

    당신이 1GB의 2 개의 다른 파일이있는 경우에 1GB의 각각 2 개의 구획이있을 것이다. 파일 시스템에서 각각 1KB의 파일 2 개를 저장하면 4KB + 4KB = 8KB, 6KB 낭비의 2 가지 파일이 생성됩니다.

    그래서 이것은 HDFS를 파일 시스템보다 훨씬 잘 만듭니다. 그러나 아이러니하게도 HDFS는 로컬 파일 시스템을 사용하며 결국 같은 문제로 끝납니다.

  4. from https://stackoverflow.com/questions/13012924/large-block-size-in-hdfs-how-is-the-unused-space-accounted-for by cc-by-sa and MIT license