은하 우주 정거장 운영 최적화

HadoopBeginner
지금 연습하기

소개

머나먼 미래, 인류는 광대한 우주로 활동 영역을 넓혔습니다. 성간 우주 정거장 관리국 (Interstellar Spaceport Authority, ISA) 은 은하계 전역에 흩어져 있는 복잡한 우주 정거장 네트워크를 관리하는 책임을 맡고 있습니다. ISA 의 최고 사령관으로서, 여러분의 임무는 Hadoop 의 파티셔닝 (partitioning) 및 버킷팅 (bucketing) 기능을 활용하여 우주 정거장의 운영을 최적화하는 것입니다.

우주 정거장의 데이터 센터는 비행 로그, 화물 목록, 승객 기록 등 방대한 양의 정보를 보관하고 있습니다. 원활한 운영과 정보에 입각한 의사 결정을 위해서는 효율적인 데이터 관리가 필수적입니다. 여러분의 목표는 Hadoop 생태계 내에서 쿼리 성능과 데이터 구성을 향상시키기 위해 파티셔닝 및 버킷팅 전략을 구현하는 것입니다.

파티션 테이블 생성

이 단계에서는 쿼리 성능을 향상시키고 효율적인 데이터 관리를 가능하게 하기 위해 비행 로그 데이터를 저장할 파티셔닝된 테이블을 생성합니다.

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

su - hadoop

그런 다음, 다음 명령을 실행하여 Hive 쉘을 시작합니다.

hive

이제 데이터베이스가 존재하지 않는 경우 생성합니다.

CREATE DATABASE IF NOT EXISTS spaceport;

spaceport 데이터베이스로 전환합니다.

USE spaceport;

다음으로, 비행 로그에 대한 파티셔닝된 테이블을 생성합니다.

CREATE TABLE flight_logs (
    flight_id STRING,
    spacecraft STRING,
    departure_time TIMESTAMP,
    arrival_time TIMESTAMP,
    destination STRING
)
PARTITIONED BY (year INT, month INT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

마지막으로, 다음 명령으로 Hive 를 종료합니다.

EXIT;

위 코드에서, 우리는 flight ID, spacecraft, 출발 시간, 도착 시간 및 목적지 열을 가진 파티셔닝된 테이블 flight_logs를 생성합니다. 이 테이블은 yearmonth 열로 파티셔닝되므로, 데이터는 연도 및 월 값에 따라 별도의 파티션으로 구성됩니다.

파티션 테이블에 데이터 로드

이 단계에서는 이전 단계에서 생성한 파티셔닝된 테이블에 샘플 비행 로그 데이터를 로드합니다.

먼저, 몇 개의 샘플 비행 로그 데이터 파일을 생성합니다.

cat > /home/hadoop/flight_logs_1.txt << EOF
FL001,Andromeda Explorer,2023-06-01 08:00:00,2023-06-02 12:30:00,Andromeda Galaxy
FL002,Milky Way Voyager,2023-06-15 10:15:00,2023-06-16 06:45:00,Milky Way Galaxy
EOF

cat > /home/hadoop/flight_logs_2.txt << EOF
FL003,Cygnus Cruiser,2023-07-20 14:30:00,2023-07-21 09:00:00,Cygnus Constellation
FL004,Orion Shuttle,2023-07-25 18:00:00,2023-07-26 03:15:00,Orion Nebula
EOF

그런 다음, 파티셔닝된 테이블에 데이터를 로드합니다.

hive -e "LOAD DATA LOCAL INPATH '/home/hadoop/flight_logs_1.txt' INTO TABLE spaceport.flight_logs PARTITION (year=2023, month=6);"
hive -e "LOAD DATA LOCAL INPATH '/home/hadoop/flight_logs_2.txt' INTO TABLE spaceport.flight_logs PARTITION (year=2023, month=7);"

위 코드에서, 우리는 먼저 네 개의 비행 기록이 있는 몇 개의 샘플 비행 로그 데이터 파일 flight_logs_1.txtflight_logs_2.txt를 생성합니다. 그런 다음, Hive 에서 LOAD DATA 명령을 사용하여 데이터를 파티셔닝된 테이블 flight_logs에 로드합니다. 우리는 데이터를 두 번 로드하는데, 한 번은 year=2023month=6 파티션에 대해, 다른 한 번은 year=2023month=7 파티션에 대해 로드합니다.

버킷 테이블 생성

이 단계에서는 cargo_type 열과 관련된 쿼리의 쿼리 성능을 향상시키기 위해 화물 명세서 데이터를 저장할 버킷팅된 테이블을 생성합니다.

먼저, 다음 명령을 실행하여 Hive 쉘을 시작합니다.

hive

그런 다음, spaceport 데이터베이스로 전환합니다.

USE spaceport;

이제 화물 명세서에 대한 버킷팅된 테이블을 생성합니다.

CREATE TABLE cargo_manifests (
    manifest_id STRING,
    cargo_type STRING,
    destination STRING,
    weight DOUBLE,
    volume DOUBLE
)
CLUSTERED BY (cargo_type) INTO 4 BUCKETS
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

마지막으로, 다음 명령으로 Hive 를 종료합니다.

EXIT;

위 코드에서, 우리는 manifest ID, 화물 유형, 목적지, 무게 및 부피 열을 가진 버킷팅된 테이블 cargo_manifests를 생성합니다. 이 테이블은 cargo_type 열과 관련된 쿼리의 쿼리 성능을 향상시키기 위해 cargo_type 열을 기준으로 4 개의 버킷으로 버킷팅 (클러스터링) 됩니다.

버킷 테이블에 데이터 로드

이 단계에서는 이전 단계에서 생성한 버킷팅된 테이블에 샘플 화물 명세서 데이터를 로드합니다.

먼저, 샘플 화물 명세서 데이터 파일을 생성합니다.

cat > /home/hadoop/cargo_manifests.txt << EOF
CM001,Electronics,Andromeda Galaxy,5.2,2.1
CM002,Machinery,Milky Way Galaxy,12.8,8.5
CM003,Food,Cygnus Constellation,3.1,1.5
CM004,Electronics,Orion Nebula,7.9,3.2
EOF

그런 다음, 데이터를 버킷팅된 테이블에 로드합니다.

hive -e "LOAD DATA LOCAL INPATH '/home/hadoop/cargo_manifests.txt' OVERWRITE INTO TABLE spaceport.cargo_manifests;"

위 코드에서, 우리는 먼저 네 개의 화물 기록이 있는 샘플 화물 명세서 데이터 파일 cargo_manifests.txt를 생성합니다. 그런 다음, Hive 에서 LOAD DATA 명령을 사용하여 데이터를 버킷팅된 테이블 cargo_manifests에 로드합니다.

요약

이 랩에서는 Hadoop Hive 에서 파티션 (partition) 과 버킷 (bucket) 의 구현을 살펴보았습니다. 먼저, 연도와 월별로 파티션된 비행 로그 데이터를 저장하기 위해 파티션된 테이블을 생성했습니다. 이 접근 방식은 특정 기준에 따라 데이터를 별도의 파티션으로 구성하여 효율적인 쿼리 및 데이터 관리를 가능하게 합니다.

다음으로, LOAD DATA 명령을 사용하여 샘플 비행 로그 데이터를 파티션된 테이블에 로드하여 데이터가 연도와 월별로 올바르게 파티션되도록 했습니다.

그런 다음, cargo_type 열을 기준으로 버킷팅된 화물 명세서 데이터를 저장하기 위해 버킷팅된 테이블을 생성했습니다. 버킷팅은 특정 열을 기반으로 데이터를 더 작고 관리하기 쉬운 청크 (chunk) 로 나누어 쿼리 성능을 향상시키는 데 도움이 됩니다.

마지막으로, LOAD DATA 명령을 사용하여 샘플 화물 명세서 데이터를 버킷팅된 테이블에 로드했습니다.

이 랩을 통해, 우리는 데이터 저장, 쿼리 성능 및 전반적인 데이터 관리를 최적화하기 위한 Hadoop 생태계에서 파티션 및 버킷팅의 중요성을 배웠습니다. 이러한 기술을 구현함으로써, 우리는 Interstellar Spaceport Authority 에서 효율적인 운영을 보장하고, 방대한 양의 데이터를 기반으로 정보에 입각한 결정을 내릴 수 있습니다.