우주 레이싱 데이터 최적화

HadoopBeginner
지금 연습하기

소개

미래에는 우주 전역의 위험한 경주 트랙에서 치열한 은하계 레이싱 토너먼트가 개최됩니다. 우주 레이싱 안전 관리자로서, 여러분의 주요 책임은 우주 경주 트랙과 참가 우주선을 면밀히 모니터링하여 이러한 우주 경주의 안전과 공정성을 보장하는 것입니다.

임무는 경주 트랙의 다양한 섹션에서 수집된 원격 측정 데이터를 분석하여 잠재적인 위험을 식별하고, 위반 사항을 추적하며, 경쟁자와 관람객 모두를 위해 레이싱 경험을 최적화하는 것입니다. Hadoop 의 강력한 데이터 처리 능력을 활용하여, 우주 경주의 무결성과 흥미를 유지하는 데 도움이 되는 귀중한 통찰력을 얻을 수 있습니다.

Hive 에서 컬렉션 연산 함수 탐색

이 단계에서는 Hive 에서 컬렉션 연산 함수를 사용하여 경주 트랙에서 수집된 원격 측정 데이터를 처리하고 분석하는 방법을 배우게 됩니다.

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

su - hadoop

그런 다음, 작업할 샘플 데이터 세트를 생성해 보겠습니다. 텍스트 편집기를 열고 racetrack_data.txt라는 새 파일을 만들고 다음 내용을 입력합니다.

1,Sector1,Benny,32.5,12.7,45.2
2,Sector2,Zara,28.9,14.1,43.0
3,Sector1,Alex,30.2,11.5,41.7
4,Sector3,Benny,35.7,10.2,45.9
5,Sector2,Zara,31.1,12.8,43.9
6,Sector3,Alex,29.8,15.7,45.5

이 데이터 세트는 경주 트랙의 서로 다른 섹션에서 수집된 원격 측정 데이터를 나타내며, 열은 레코드 ID, 섹터 이름, 레이서 이름, 속도, 고도 및 총 점수를 나타냅니다.

이제 Hive CLI 를 시작해 보겠습니다.

hive

다음으로, 이 데이터를 저장할 새 Hive 테이블을 생성합니다.

CREATE TABLE racetrack_data (
    id INT,
    sector STRING,
    racer STRING,
    speed DOUBLE,
    altitude DOUBLE,
    total_score DOUBLE
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

racetrack_data.txt 파일에서 Hive 테이블로 데이터를 로드합니다.

LOAD DATA LOCAL INPATH '/home/hadoop/racetrack_data.txt' OVERWRITE INTO TABLE racetrack_data;

이제 Hive 에서 몇 가지 컬렉션 연산 함수를 살펴보겠습니다.

  1. 고유한 레이서 이름 목록을 가져옵니다.
SELECT DISTINCT racer FROM racetrack_data;
  1. 섹터 이름 목록과 각 섹터의 레코드 수를 가져옵니다.
SELECT sector, COUNT(*) AS record_count FROM racetrack_data GROUP BY sector;
  1. 각 레이서의 최대 속도를 가져옵니다.
SELECT racer, MAX(speed) AS max_speed FROM racetrack_data GROUP BY racer;
  1. 레이서 목록과 평균 점수를 가져옵니다.
SELECT racer, AVG(total_score) AS avg_score FROM racetrack_data GROUP BY racer;

이 예제는 DISTINCT, COUNT, MAX, 및 AVG와 같은 함수를 사용하여 원격 측정 데이터를 분석하고 귀중한 통찰력을 추출하는 방법을 보여줍니다.

Named Struct 컬렉션을 사용하여 데이터 분석

이 단계에서는 Hive 에서 named_struct 함수를 사용하여 복잡한 데이터 구조를 생성하고 원격 측정 데이터를 보다 효과적으로 분석하는 방법을 배우게 됩니다.

먼저, 추가 레이서 정보를 저장하기 위해 중첩된 구조를 가진 새 Hive 테이블을 생성해 보겠습니다.

CREATE TABLE racer_info (
    id INT,
    racer STRUCT<name:STRING, team:STRING, age:INT>,
    performance STRUCT<speed:DOUBLE, altitude:DOUBLE, total_score:DOUBLE>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '#'
STORED AS TEXTFILE;

이제 racer_info 테이블에 샘플 데이터를 삽입해 보겠습니다.

INSERT INTO TABLE racer_info
VALUES
    (1, named_struct('name', 'Benny', 'team', 'Cosmic Racers', 'age', 28), named_struct('speed', CAST(32.5 AS DOUBLE), 'altitude', CAST(12.7 AS DOUBLE), 'total_score', CAST(45.2 AS DOUBLE))),
    (2, named_struct('name', 'Zara', 'team', 'Stellar Speeders', 'age', 32), named_struct('speed', CAST(28.9 AS DOUBLE), 'altitude', CAST(14.1 AS DOUBLE), 'total_score', CAST(43.0 AS DOUBLE))),
    (3, named_struct('name', 'Alex', 'team', 'Galactic Gliders', 'age', 25), named_struct('speed', CAST(30.2 AS DOUBLE), 'altitude', CAST(11.5 AS DOUBLE), 'total_score', CAST(41.7 AS DOUBLE))),
    (4, named_struct('name', 'Benny', 'team', 'Cosmic Racers', 'age', 28), named_struct('speed', CAST(35.7 AS DOUBLE), 'altitude', CAST(10.2 AS DOUBLE), 'total_score', CAST(45.9 AS DOUBLE))),
    (5, named_struct('name', 'Zara', 'team', 'Stellar Speeders', 'age', 32), named_struct('speed', CAST(31.1 AS DOUBLE), 'altitude', CAST(12.8 AS DOUBLE), 'total_score', CAST(43.9 AS DOUBLE))),
    (6, named_struct('name', 'Alex', 'team', 'Galactic Gliders', 'age', 25), named_struct('speed', CAST(29.8 AS DOUBLE), 'altitude', CAST(15.7 AS DOUBLE), 'total_score', CAST(45.5 AS DOUBLE)));

이제 named_struct 함수를 사용하여 데이터를 분석해 보겠습니다.

  1. 레이서 이름과 팀을 가져옵니다.
SELECT racer.name, racer.team FROM racer_info;
  1. 레이서 이름과 최대 속도를 가져옵니다.
SELECT racer.name, performance.speed AS max_speed FROM racer_info;
  1. 레이서 이름, 팀 및 평균 점수를 가져옵니다.
SELECT racer.name, racer.team, AVG(performance.total_score) AS average_score
FROM racer_info
GROUP BY racer.name, racer.team;

이 예제는 named_struct 함수를 사용하여 복잡한 데이터 구조를 생성하고 데이터를 분석하는 방법을 보여줍니다.

컬렉션 Set 함수를 사용한 데이터 분석

이 단계에서는 Hive 에서 collect_set 함수를 사용하여 원격 측정 데이터에 대한 집합 연산을 수행하는 방법을 배우게 됩니다.

먼저, 레이서 순위를 저장할 새 Hive 테이블을 생성해 보겠습니다.

CREATE TABLE racer_rankings (
    race_id INT,
    sector STRING,
    racer_names ARRAY<STRING>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '#'
STORED AS TEXTFILE;

이제 racer_rankings 테이블에 샘플 데이터를 삽입해 보겠습니다.

INSERT INTO TABLE racer_rankings
VALUES
    (1, 'Sector1', ARRAY('Benny', 'Alex')),
    (2, 'Sector2', ARRAY('Zara', 'Alex')),
    (3, 'Sector3', ARRAY('Benny', 'Zara', 'Alex')),
    (4, 'Sector1', ARRAY('Benny', 'Zara')),
    (5, 'Sector2', ARRAY('Zara', 'Alex')),
    (6, 'Sector3', ARRAY('Benny', 'Alex'));

이제 collect_set 함수를 사용하여 데이터를 분석해 보겠습니다.

  1. 모든 섹터에서 고유한 레이서 목록을 가져옵니다.
SELECT DISTINCT racer_name
FROM racer_rankings
LATERAL VIEW EXPLODE(racer_names) rn AS racer_name;
  1. 모든 섹터에 참여한 레이서 목록을 가져옵니다.
SELECT racer_name
FROM (
  SELECT collect_set(racer_names) AS all_racers
  FROM racer_rankings
) t
LATERAL VIEW EXPLODE(all_racers) rn AS racer_name;
  1. 두 개 이상의 섹터에 참여한 레이서 목록을 가져옵니다.
SELECT racer_name
FROM (
  SELECT racer_name, COUNT(DISTINCT sector) AS num_sectors
  FROM racer_rankings LATERAL VIEW explode(racer_names) exploded_table AS racer_name
  GROUP BY racer_name
) t
WHERE num_sectors >= 2;

이 예제는 collect_set 함수를 사용하여 원격 측정 데이터에 대해 DISTINCT, INTERSECTION, 및 UNION과 같은 집합 연산을 수행하는 방법을 보여줍니다.

요약

이 랩에서는 Hive 에서 DISTINCT, COUNT, MAX, AVG, named_struct, LATERAL VIEW, EXPLODE, 그리고 collection_set과 같은 다양한 컬렉션 연산 함수를 탐구했습니다. 우주 레이싱 토너먼트의 원격 측정 데이터를 나타내는 샘플 데이터 세트를 사용하여 복잡한 데이터 구조에서 가치 있는 통찰력을 분석하고 추출하는 방법을 배웠습니다.

실습을 통해 중첩된 데이터 구조를 생성하고, 집합 연산을 수행하며, 특정 기준에 따라 데이터를 집계하는 실질적인 경험을 얻었습니다. 이러한 지식은 우주 레이싱 안전 관리자로서의 역할에 매우 중요하며, 경주 트랙을 효과적으로 모니터링하고, 잠재적인 위험을 식별하며, 우주 레이스의 공정성과 무결성을 보장하는 데 도움이 될 것입니다.

전반적으로, 이 랩은 Hive 의 컬렉션 연산 함수에 대한 포괄적인 소개를 제공하여 Hadoop 생태계에서 대규모 데이터 세트를 효율적으로 분석하고 처리하는 데 필요한 기술을 갖추도록 했습니다.