복붙노트

[HADOOP] HDFS의 저장소 형식

HADOOP

HDFS의 저장소 형식

HDFS는 어떻게 데이터를 저장합니까?

거대한 파일을 압축 된 방식으로 저장하고 싶습니다.

예 : 파일 크기가 1.5GB이고 기본 복제 계수가 3입니다.

(1.5) * 3 = 4.5GB의 공간이 필요합니다.

나는 현재 데이터의 암묵적인 압축은 일어나지 않는다고 믿는다.

디스크 공간을 절약하기 위해 파일을 압축하고 HDFS에 저장하는 기술이 있습니까?

해결법

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

    1.HDFS는 모든 파일을 여러 '블록'으로 저장합니다. 블록 크기는 파일 단위로 구성 할 수 있지만 기본값은 64/128/256 MB입니다.

    HDFS는 모든 파일을 여러 '블록'으로 저장합니다. 블록 크기는 파일 단위로 구성 할 수 있지만 기본값은 64/128/256 MB입니다.

    따라서 1.5GB의 파일과 128MB의 블록 크기가 주어지면 hadoop은 파일을 ~ 12 블록 (12 x 128 MB ~ = 1.5GB)으로 분할합니다. 각 블록은 구성 가능한 횟수만큼 복제됩니다.

    데이터가 잘 압축되면 (텍스트 파일과 같은 경우) 파일을 압축하고 HDFS에 압축 파일을 저장할 수 있습니다. 위와 동일하게 적용되므로 1.5GB 파일이 500MB로 압축되면 4 블록으로 저장됩니다.

    그러나 압축을 사용할 때 고려해야 할 한 가지 방법은 압축 방법이 파일 분할을 지원하는지 여부입니다. 즉 파일에서 임의로 위치를 찾아 압축 된 스트림을 복구 할 수 있습니다 (예 : GZIp는 분할을 지원하지 않으므로 BZip2는 지원합니다).

    이 방법이 분할을 지원하지 않더라도 hadoop은 여전히 ​​여러 블록에 파일을 저장하지만 블록이 클러스터 주변에 널리 퍼져 있기 때문에 '데이터 지역성'의 이점을 잃을 수 있습니다.

    맵 축소 코드에서 Hadoop은 기본적으로 여러 압축 코덱을 설치하고 있으며 특정 파일 확장명 (예 : GZip 파일의 경우 .gz)을 자동으로 인식하여 입출력 압축 여부를 걱정하지 않도록합니다.

    희망이 말이 되네.

    주석에 대한 응답으로 일부 추가 정보 편집 :

    Map Reduce 작업의 출력으로 HDFS에 쓸 때 FileOutputFormat API를 참조하십시오. 특히 다음과 같은 방법이 있습니다.

    HDFS로 파일을 업로드 할 때 예 압축 파일을 미리 압축하고 해당 압축 유형에 대한 관련 파일 확장명을 사용해야합니다 (기본 제공, hadoop는 .gz 확장자를 갖는 gzip을 지원하므로 file.txt.gz는 gzipped 파일을 나타냄) )

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

    2.언젠가 전에 나는 블로그 포스트에 그것을 요약하려고 노력했다. 기본적으로 이는 파일 분할이 복제를위한 기본 블록 인 블록으로 분할되므로 데이터 분할 가능성 문제입니다. 이름 노드는 하나의 파일에 속한 모든 블록을 추적합니다. 압축을 선택할 때 블록이 자율적이어야합니다. 모든 코덱이 분할 가능하지는 않습니다. format + codec이 splittable이 아니라면 압축을 풀려면 mapreduce의 병렬 처리에 큰 영향을주는 한 곳에서 처리해야한다는 의미입니다. 기본적으로 단일 슬롯에서 실행됩니다. 희망이 도움이됩니다.

    언젠가 전에 나는 블로그 포스트에 그것을 요약하려고 노력했다. 기본적으로 이는 파일 분할이 복제를위한 기본 블록 인 블록으로 분할되므로 데이터 분할 가능성 문제입니다. 이름 노드는 하나의 파일에 속한 모든 블록을 추적합니다. 압축을 선택할 때 블록이 자율적이어야합니다. 모든 코덱이 분할 가능하지는 않습니다. format + codec이 splittable이 아니라면 압축을 풀려면 mapreduce의 병렬 처리에 큰 영향을주는 한 곳에서 처리해야한다는 의미입니다. 기본적으로 단일 슬롯에서 실행됩니다. 희망이 도움이됩니다.

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

    3.프레젠테이션 @ Hadoop_Summit, 특히 슬라이드 6 및 슬라이드 7을 살펴보십시오.

    프레젠테이션 @ Hadoop_Summit, 특히 슬라이드 6 및 슬라이드 7을 살펴보십시오.

  4. ==============================

    4.이 질문에 대한 대답은 오늘 Hadoop에서 사용 가능한 파일 형식을 먼저 이해하는 것입니다. HDFS 내에서 파일 형식 및 압축 기술을 관리 할 수있는 선택이 가능합니다. LZO 또는 BZIP를 사용한 명시 적 인코딩 및 분할의 대체 방법. 현재는 블록 압축과 원통형 행 압축을 지원하는 다양한 형식이 있습니다.

    이 질문에 대한 대답은 오늘 Hadoop에서 사용 가능한 파일 형식을 먼저 이해하는 것입니다. HDFS 내에서 파일 형식 및 압축 기술을 관리 할 수있는 선택이 가능합니다. LZO 또는 BZIP를 사용한 명시 적 인코딩 및 분할의 대체 방법. 현재는 블록 압축과 원통형 행 압축을 지원하는 다양한 형식이 있습니다.

    저장 형식은 정보를 저장하는 방법을 정의하는 방법입니다. 이것은 대개 파일의 확장자로 표시되는 경우가 있습니다. 예를 들어, 이미지는 여러 저장 형식, PNG, JPG 및 GIF 등이 될 수 있습니다. 이러한 모든 형식은 동일한 이미지를 저장할 수 있지만 각각 특정 저장 특성을 가지고 있습니다.

    Hadoop 파일 시스템에는 사용자가 원하는 모든 전통적인 저장 형식 (예 : HDFS에 PNG 및 JPG 이미지를 저장할 수 있음)이 있지만 구조화 된 데이터와 구조화되지 않은 데이터에 사용할 수있는 Hadoop 중심의 파일 형식도 있습니다.

    이러한 형식을 아는 것이 중요한 이유는 무엇입니까?

    성능 저하로 MapReduce, Hive, HBase 및 Spark와 같은 HDFS 지원 응용 프로그램의 병목 현상은 특정 위치에서 관련 데이터를 찾고 다른 위치로 데이터를 다시 기록하는 데 걸리는 시간입니다. 이러한 문제는 대규모 데이터 세트를 관리 할 때 두드러집니다. Hadoop 파일 형식은 많은 유스 케이스에서 이러한 문제를 완화하기 위해 발전해 왔습니다.

    적절한 파일 형식을 선택하면 몇 가지 중요한 이점을 얻을 수 있습니다.

    일부 파일 형식은 일반 용도로 설계되었으며, 다른 파일 형식은보다 특수한 사용 사례 (예 : 데이터베이스 성능 향상)로 설계되었으며 일부는 특정 데이터 특성을 염두에두고 설계되었습니다. 따라서 Hadoop에 데이터를 저장할 때 실제로 많은 선택이 있으며 HDFS에 데이터를 최적으로 저장하려면 알아야합니다. 현재 저장소로 이동하는 방법은 ORC 형식입니다.

    빅 데이터 구성 요소 (Spark, Hive, HBase 등)가 이러한 형식을 지원하는지 확인하고 그에 따라 결정하십시오. 예를 들어, 현재 하이브에 데이터를 주입하고 그것을 압축 및 성능면에서 저에게 적합한 ORC 형식으로 변환하고 있습니다.

    Hadoop의 일반적인 저장 형식은 다음과 같습니다.

    일반 텍스트 저장 (예 : CSV, TSV 파일, 구분 파일 등)

    데이터는 각 행이 레코드 인 행에 배치됩니다. 행은 전형적인 유닉스 환경에서 개행 문자 \ n에 의해 종료된다. 텍스트 파일은 본질적으로 분할 가능합니다. 하지만 압축하려면 BZIP2와 같이 분할을 지원하는 파일 수준 압축 코덱을 사용해야합니다. 이는 효율적이지 않으며 MapReduce 작업을 수행 할 때 약간의 작업이 필요합니다.

    시퀀스 파일

    원래 MapReduce 용으로 설계되었으므로 Hadoop MapReduce 프로세스와의 통합이 매우 쉽습니다. 그들은 각 레코드에 대한 키와 값을 인코딩합니다. 텍스트 기반 형식보다 작은 이진 형식으로 저장됩니다. 여기에서도 키와 값을 인코딩하지 않습니다. 시퀀스 파일의 한 가지 이점은 블록 수준 압축을 지원하기 때문에 파일의 내용을 압축하면서 여러 맵 작업을 위해 파일을 세그먼트로 분할하는 기능을 유지할 수 있다는 것입니다. Parquet 및 ORC 같은 통계 당 여전히 효율적이지는 않지만.

    유로

    이 형식은 내용의 스키마를 파일에 직접 인코딩하므로 복잡한 객체를 기본적으로 저장할 수 있습니다. 직렬화 및 비 직렬화 프레임 워크를위한 추가 프레임 워크가있는 파일 형식. 일반적인 오래된 시퀀스 파일을 사용하면 복잡한 객체를 저장할 수 있지만 프로세스를 관리해야합니다. 또한 블록 수준 압축을 지원합니다.

    마루

    요즘 가장 좋아하고 인기있는 형식입니다. 그것은 디스크에 인코딩하고 쓰는 동안 그것의 컬럼 형 파일 저장 구조입니다. 따라서 데이터 세트는 수평 및 수직으로 분할됩니다. 컬럼 기반 파일 포맷의 큰 이점 중 하나는 같은 컬럼의 데이터가 함께 압축되어 대규모 스토리지 최적화를 생성 할 수 있다는 것입니다 (동일한 컬럼의 데이터가 유사한 경향이 있음). 처리에서 열 저장을 최적으로 사용할 수 있으면이 방법을 사용해보십시오. 원주 형 저장 장치의 장점을 참조 할 수 있습니다.

    정기적으로 데이터 세트를 잘라내어 자르면 이러한 형식이 애플리케이션의 속도에 매우 도움이 될 수 있지만 일반적으로 데이터의 전체 행이 필요한 애플리케이션을 사용하는 경우 솔직히 기둥 형식이 실제로 성능에 손실을 줄 수 있습니다 증가 된 네트워크 활동에 필요합니다.

    ORC

    ORC는 Optimized Row Columnar의 약자로 다른 파일 형식보다 최적화 된 방식으로 데이터를 저장할 수 있습니다. ORC는 원본 데이터의 크기를 최대 75 %까지 줄입니다 (예 : 100GB 파일은 25GB가됩니다). 결과적으로 데이터 처리 속도도 빨라집니다. ORC는 텍스트, 시퀀스 및 RC 파일 형식보다 우수한 성능을 보여줍니다.  ORC 파일에는 파일 바닥 글과 함께 줄무늬라고하는 그룹의 행 데이터가 들어 있습니다. ORC 형식은 하이브가 데이터를 처리 할 때 성능을 향상시킵니다.

    그것은 마루와 유사하지만 다른 인코딩 기법을 사용합니다. 이 스레드는 아니지만 Google에서 차이점을 찾을 수 있습니다.

  5. from https://stackoverflow.com/questions/10857880/storage-format-in-hdfs by cc-by-sa and MIT license