Abyss 에서 Hadoop 저장소 마스터하기

HadoopBeginner
지금 연습하기

소개

지옥불 심연 (Hellfire Abyss) 의 불타는 심연 속에서, 사악한 분노로 불꽃이 춤추는 위험한 영역에서, 인페르누스 (Infernus) 라는 강력한 불의 군주가 지배합니다. 그의 지배는 광대하게 뻗어 있으며, 고대 문명과 잃어버린 지식의 비밀을 담고 있는 방대한 데이터 저장소를 포함합니다.

인페르누스의 목표는 이 데이터의 힘을 활용하여 심연에 대한 그의 지배력을 강화하고, 그 뜨거운 경계를 넘어 그의 영향력을 확장하는 것입니다. 그러나 데이터의 엄청난 양과 복잡성은 강력한 도전을 제기하며, 이러한 방대한 저장소를 처리하고 효율적으로 처리할 수 있는 강력한 시스템이 필요합니다.

빅 데이터 (Big Data) 의 과제를 정복하도록 설계된 강력한 프레임워크인 Hadoop 의 영역으로 들어오세요. 분산 파일 시스템 (distributed file system) 과 강력한 데이터 처리 능력을 갖춘 Hadoop 은 인페르누스의 데이터 보관소 안에 숨겨진 비밀을 푸는 열쇠를 쥐고 있습니다. 불의 군주는 궁극적인 권력을 위한 그의 탐구에 도움을 줄, Hadoop 내에서 적절한 저장 형식 (storage formats) 을 선택하는 기술에 정통한 재능 있는 개인을 찾고 있습니다.

Hadoop 저장 형식 탐색

이 단계에서는 Hadoop 저장 형식 (storage formats) 의 영역을 탐구하고, 다양한 데이터 유형과 워크로드에 대한 강점, 약점 및 적합성을 탐색합니다.

먼저, 터미널에서 다음 명령을 실행하여 hadoop 사용자로 로그인했는지 확인합니다.

su - hadoop

그런 다음, 데이터 파일을 보관할 디렉토리를 생성해 보겠습니다.

mkdir /home/hadoop/data

다음으로, 작업할 샘플 데이터 파일을 생성합니다.

echo "Alice,25,New York" >> /home/hadoop/data/people.csv
echo "Bob,32,Los Angeles" >> /home/hadoop/data/people.csv
echo "Charlie,19,Chicago" >> /home/hadoop/data/people.csv

이제 다양한 저장 형식과 사용 사례를 살펴보겠습니다.

  1. 텍스트 파일 (Text Files): 텍스트 파일은 가장 단순하고 사람이 읽기 쉬운 형식입니다. 작은 데이터 세트와 프로토타입 제작에는 적합하지만, 압축 및 스키마 적용이 부족하여 대규모 데이터 세트에는 비효율적일 수 있습니다.

  2. 시퀀스 파일 (Sequence Files): 시퀀스 파일은 바이너리 키 - 값 쌍으로 구성된 플랫 파일입니다. 압축 가능하고 분할 가능하므로 비교적 작은 레코드를 가진 대규모 데이터 세트에 효율적입니다. 그러나 스키마 적용이 부족하고 복잡한 데이터 유형으로 작업하기 어려울 수 있습니다.

  3. Avro 파일 (Avro Files): Apache Avro 는 스키마 적용 및 효율적인 압축을 지원하는 행 기반 데이터 직렬화 형식입니다. 복잡한 데이터 유형을 가진 대규모 데이터 세트에 적합하며, 다양한 프로그래밍 언어 간의 뛰어난 상호 운용성을 제공합니다.

  4. Parquet 파일 (Parquet Files): Apache Parquet 은 뛰어난 압축과 효율적인 데이터 건너뛰기를 제공하는 열 지향 저장 형식입니다. 복잡한 스키마와 많은 열을 가진 대규모 데이터 세트를 포함하는 분석 워크로드에 특히 적합합니다.

  5. ORC 파일 (ORC Files): ORC(Optimized Row Columnar) 형식은 복잡한 스키마를 가진 대규모 데이터 세트에 최적화된 또 다른 열 지향 저장 형식입니다. 뛰어난 압축, 데이터 건너뛰기 기능 및 분석 워크로드에 대한 효율적인 읽기를 제공합니다.

이러한 형식을 더 자세히 탐색하려면 Hadoop 의 내장 도구 또는 Apache Hive 또는 Apache Spark 와 같은 라이브러리를 사용할 수 있습니다. 예를 들어, 텍스트 형식을 사용하여 Hive 테이블을 만들려면 다음을 수행합니다.

다음 명령을 실행하여 Hive 셸을 시작합니다.

hive

텍스트 형식을 사용하여 Hive 테이블을 만듭니다.

CREATE TABLE people (
    name STRING,
    age INT,
    city STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

테이블에 데이터를 로드합니다.

LOAD DATA LOCAL INPATH '/home/hadoop/data/people.csv' INTO TABLE people;

이렇게 하면 지정된 스키마를 가진 people이라는 Hive 테이블이 생성되고 데이터가 텍스트 형식으로 저장됩니다.

올바른 저장 형식 선택

이 단계에서는 데이터 특성 및 워크로드 요구 사항에 따라 적절한 저장 형식을 선택하는 방법을 배웁니다.

저장 형식을 선택할 때 다음 요소를 고려하십시오.

  1. 데이터 크기 (Data Size): 대규모 데이터 세트의 경우, 압축되지 않은 텍스트 파일보다 Parquet, ORC 및 Avro 와 같은 압축되고 분할 가능한 형식이 더 효율적입니다.

  2. 데이터 스키마 (Data Schema): 데이터에 잘 정의된 스키마가 있는 경우, 스키마 적용을 지원하는 Parquet, ORC 및 Avro 와 같은 형식이 유용할 수 있습니다. 스키마가 없는 (schema-less) 또는 반구조적 데이터의 경우 텍스트 파일 또는 Avro 가 더 적합할 수 있습니다.

  3. 데이터 액세스 패턴 (Data Access Patterns): 열 수준 작업 또는 데이터 건너뛰기를 포함하는 분석 워크로드의 경우, Parquet 및 ORC 와 같은 열 지향 형식이 최적입니다. 행 수준 작업 또는 데이터 스트리밍의 경우 Avro 또는 텍스트 파일과 같은 행 기반 형식이 더 적합할 수 있습니다.

  4. 데이터 처리 엔진 (Data Processing Engine): 특정 처리 엔진은 특정 저장 형식에 대해 더 나은 지원 또는 성능 최적화를 가질 수 있습니다. 예를 들어, Apache Spark 는 Parquet 및 ORC 를 훌륭하게 지원하는 반면, Apache Hive 는 다양한 형식을 내장적으로 지원합니다.

  5. 상호 운용성 (Interoperability): 다른 시스템 또는 프로그래밍 언어와 데이터를 공유해야 하는 경우, Avro 또는 텍스트 파일과 같은 형식이 독점 형식보다 더 상호 운용 가능할 수 있습니다.

웹 서버에서 대량의 로그 데이터를 저장하고 분석해야 하는 예시 시나리오를 고려해 보겠습니다. 이 경우, Parquet 형식이 좋은 선택이 될 것입니다. Parquet 은 효율적인 압축, 열 지향 저장소 및 데이터 건너뛰기 기능을 제공하며, 이는 대규모 데이터 세트에 대한 분석 워크로드에 적합합니다.

Hive 에서 Parquet 테이블을 만들려면:

CREATE TABLE web_logs (
    log_timestamp STRING,
    ip_address STRING,
    request STRING,
    response_code INT,
    bytes_served BIGINT
)
STORED AS PARQUET;

이제 Parquet 형식의 성능 이점을 활용하여 web_logs 테이블에 대한 분석 쿼리를 실행할 수 있습니다.

저장 형식 구성 최적화

적절한 저장 형식을 선택하는 것도 중요하지만, 구성을 최적화하면 성능과 효율성을 더욱 향상시킬 수 있습니다. 이 단계에서는 다양한 구성 옵션과 모범 사례를 살펴보겠습니다.

예를 들어, Parquet 파일을 사용할 때 압축률, 읽기 성능 및 쓰기 성능의 균형을 맞추기 위해 압축 코덱 (compression codecs), 행 그룹 크기 (row group sizes) 및 데이터 페이지 크기 (data page sizes) 를 구성할 수 있습니다.

CREATE TABLE optimized_logs (
    log_timestamp STRING,
    ip_address STRING,
    request STRING,
    response_code INT,
    bytes_served BIGINT
)
STORED AS PARQUET
TBLPROPERTIES (
    'parquet.compression'='SNAPPY',
    'parquet.row.group.size'='512MB',
    'parquet.page.size'='8MB'
);

이 예제에서는 Snappy 압축, 512MB 행 그룹 크기 및 8MB 데이터 페이지 크기를 사용하도록 Parquet 테이블을 구성했습니다. 이러한 설정은 데이터 및 워크로드의 특성에 따라 압축률, 읽기 성능 및 쓰기 성능 간의 균형을 제공할 수 있습니다.

또한, 사전 인코딩 (dictionary encoding), 데이터 블록 크기 (data block sizes) 및 Bloom 필터 (bloom filters) 와 같은 다른 구성 옵션을 탐색하여 저장소 및 쿼리 성능을 더욱 최적화할 수 있습니다.

요약

이 랩에서는 Hadoop 저장 형식의 세계와 다양한 데이터 유형 및 워크로드에 대한 적합성을 탐구했습니다. 우리는 Fire Lord Infernus 가 고대 데이터 저장소의 힘을 활용하려 했던 Hellfire Abyss 의 깊숙한 곳을 탐구했습니다. Hadoop 내에서 저장 형식을 선택하고 구성하는 기술을 마스터함으로써, 우리는 이러한 광대한 데이터 보물 속에 숨겨진 비밀을 풀었습니다.

실습을 통해 텍스트 파일, 시퀀스 파일, Avro, Parquet 및 ORC 를 포함한 다양한 저장 형식을 사용하여 실질적인 경험을 얻었습니다. 적절한 형식을 선택할 때 데이터 크기, 스키마, 액세스 패턴, 처리 엔진 및 상호 운용성과 같은 요소를 평가하는 방법을 배웠습니다.

또한, 최적의 성능과 효율성을 달성하기 위해 압축 코덱, 행 그룹 크기 및 데이터 페이지 크기와 같은 매개변수를 미세 조정하여 저장 형식 구성을 최적화하는 기술을 탐구했습니다.

이 랩은 우리에게 Big Data 의 위험한 풍경을 탐색할 수 있는 지식과 기술을 제공하여, 앞으로 닥칠 가장 강력한 도전 과제조차 정복할 수 있도록 힘을 실어주었습니다. 저장 형식 선택 및 최적화에 대한 확고한 이해를 바탕으로, 우리는 Hadoop 의 잠재력을 최대한 발휘하여 고대 문명의 비밀을 풀고 전례 없는 지배력을 향한 길을 열 수 있습니다.