복붙노트

[HADOOP] 작은 파일과 128Mb 블록 크기의 HDFS 동작

HADOOP

작은 파일과 128Mb 블록 크기의 HDFS 동작

나는 각각 10-100 Kb의 작은 파일들을 (수십만 개까지) 가지고있다. HDFS 블록 크기가 128MB와 같습니다. 나는 복제 계수 1을 가진다.

작은 파일마다 HDFS 블록을 할당 할 때 단점이 있습니까?

나는 꽤 모순적인 대답을 보았다.

이 답변에서와 같은 테스트를했고, 두 번째 옵션이 정확하다는 것을 증명합니다. HDFS는 작은 파일에 대해 전체 블록을 할당하지 않습니다.

그러나 HDFS에서 10.000 개의 작은 파일을 일괄 적으로 읽는 방법은 어떨까요? 10,000 블록과 메타 데이터 때문에 속도가 느려 집니까? 단일 블록 내에 여러 개의 작은 파일을 보관해야하는 이유가 있습니까?

1.000에서 500.000 사이의 작은 파일에 대해서는 하나의 유스 케이스 만 있습니다. 나는 그 파일을 한 번 계산하고 저장하고 한꺼번에 읽는 것보다.

1) 내가 알기에, NameNode 공간 문제는 저에게 문제가되지 않습니다. 500.000은 절대 최대 값입니다. 각 작은 파일이 NN에서 150 바이트를 차지하는 경우, 절대적인 최대 값보다 - 71.52MB가 적당합니다.

2) Apache Spark가 MapReduce 문제를 제거합니까? 시퀀스 파일 또는 HAR이 문제를 해결하는 데 도움이됩니까? 내가 알기 론, 스파크는 하둡 MR에 의존해서는 안되지만, 너무 느리다. 490 파일은 38 초, 3420 파일 - 266 초를 읽습니다.

sparkSession
    .read()
    .parquet(pathsToSmallFilesCollection)
    .as(Encoders.kryo(SmallFileWrapper.class))
    .coalesce(numPartitions);

해결법

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

    1.이미 알았 듯이 HDFS 파일은 필요 이상의 공간을 차지하지 않지만 HDFS 클러스터에 작은 파일을 갖는 데는 다른 단점이 있습니다. 일괄 처리를 고려하지 않고 문제를 먼저 살펴 보겠습니다.

    이미 알았 듯이 HDFS 파일은 필요 이상의 공간을 차지하지 않지만 HDFS 클러스터에 작은 파일을 갖는 데는 다른 단점이 있습니다. 일괄 처리를 고려하지 않고 문제를 먼저 살펴 보겠습니다.

    이제 일괄 처리에 대해 말하면 HAR, Sequence File, Avro 스키마 등 몇 가지 옵션을 사용할 수 있습니다. 사용 사례에 따라 정확한 답을 얻을 수 있습니다. 파일을 병합하고 싶지 않다고 가정 해 봅시다.이 경우 HAR 파일 (또는 효율적인 아카이빙 및 색인 기능을 갖춘 다른 솔루션)을 사용할 수 있습니다. 이 경우 NN 문제는 해결되지만 Mappers 수는 여전히 스플릿 수와 같습니다. 큰 파일에 파일을 병합하는 것이 옵션 인 경우 Sequence File을 사용할 수 있습니다. Sequence File은 기본적으로 작은 파일을 더 큰 파일로 집계하여 일부 문제를 해결함으로써 두 가지 문제를 모두 해결합니다. 두 시나리오 모두에서 작은 파일로 수행 할 수있는 것처럼 정보를 직접 업데이트 / 삭제할 수는 없으므로 이러한 구조를 관리하는 데보다 복잡한 메커니즘이 필요합니다.

    일반적으로 작은 파일을 많이 유지하는 주된 이유는 빠른 읽기를 시도하기 때문에 일괄 처리가 아닌 빠른 데이터 액세스를 위해 만들어진 HBase와 같은 다른 시스템을 살펴볼 것을 제안합니다.

  2. from https://stackoverflow.com/questions/43849821/hdfs-behavior-on-lots-of-small-files-and-128-mb-block-size by cc-by-sa and MIT license