Hadoop 을 이용한 보석 분석

HadoopBeginner
지금 연습하기

소개

마법 왕립 아카데미의 매혹적인 세계에서, 숙련된 보석학자 팀은 마법 세계를 움직이는 신비로운 보석의 미스터리를 풀기 위해 헌신했습니다. 그들 중에는 뛰어난 연구원 아리아가 있었는데, 그녀의 변함없는 호기심과 예리한 지성은 그녀를 무시할 수 없는 존재로 만들었습니다.

최근, 아카데미는 이러한 보석의 특성과 응용에 관한 방대한 양의 데이터를 확보했습니다. 이는 마법 혁신의 새로운 길을 열어줄 수 있는 풍부한 지식이었습니다. 그러나 정보의 방대한 양은 강력한 분석 도구의 도움이 필요한 어려운 과제를 제시했습니다.

아리아는 이에 굴하지 않고, 데이터의 무질서한 광활함을 다룰 수 있는 잠재력을 인식하고, 유서 깊은 Hadoop 생태계에 의존했습니다. 그녀의 목표는 두 가지였습니다. 보석의 복잡한 행동을 더 깊이 파고들어 마법을 활용하고 사용하는 방식을 혁신할 수 있는 숨겨진 패턴을 발견하는 것이었습니다.

보석 데이터 세트 탐색

이 단계에서는 보석 데이터 세트와 구조에 익숙해져서, 이후 분석을 위한 기반을 마련할 것입니다.

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

su - hadoop

이제 예제를 만들어 보겠습니다. 다음 명령줄을 터미널에 복사하여 샘플 파일을 만듭니다.

mkdir -p hadoop/gemstone_data
cd hadoop/gemstone_data
echo "gem_id,gem_name,color,hardness,density,refractive_index" > gem_properties.csv
echo "1,Ruby    ,Red      ,9.0 ,4.0,1.77" >> gem_properties.csv
echo "2,Emerald ,Green    ,8.0 ,3.1,1.58" >> gem_properties.csv
echo "3,Sapphire,Blue     ,9.0 ,4.0,1.76" >> gem_properties.csv
echo "4,Diamond ,Colorless,10.0,3.5,2.42" >> gem_properties.csv
echo "5,Amethyst,Purple   ,7.0 ,2.6,1.54" >> gem_properties.csv
echo "6,Topaz   ,Yellow   ,8.0 ,3.5,1.63" >> gem_properties.csv
echo "7,Pearl   ,White    ,2.5 ,2.7,1.53" >> gem_properties.csv
echo "8,Agate   ,Multi    ,7.0 ,2.6,1.53" >> gem_properties.csv
echo "9,Rose    ,Pink     ,7.0 ,2.7,1.54" >> gem_properties.csv
echo "10,CatsEye,Green    ,6.5 ,3.2,1.54" >> gem_properties.csv
echo "gem_id,application" > gem_applications.csv
echo "1,Fire Magic       " >> gem_applications.csv
echo "2,Earth Magic      " >> gem_applications.csv
echo "3,Water Magic      " >> gem_applications.csv
echo "4,Enhancement Magic" >> gem_applications.csv
echo "5,Psychic Magic    " >> gem_applications.csv
echo "6,Lightning Magic  " >> gem_applications.csv
echo "7,Illusion Magic   " >> gem_applications.csv
echo "8,Strength Magic   " >> gem_applications.csv
echo "9,Love Magic       " >> gem_applications.csv
echo "10,Stealth Magic   " >> gem_applications.csv

이제 이미 gemstone_data 디렉토리에 있으므로, 잠시 시간을 내어 이 디렉토리의 내용을 검토해 보겠습니다.

ls

디렉토리를 탐색하면서, 각기 보석 데이터의 다른 측면에 전념하는 이 두 파일을 볼 수 있습니다. gem_properties.csv는 보석의 물리적 특성을 자세히 살펴보고, gem_applications.csv는 다양한 마법적 용도에 대한 통찰력을 제공합니다.

데이터 세트에 대한 더 깊은 통찰력을 얻기 위해, 이 파일 중 하나의 처음 몇 줄을 살펴보겠습니다.

head -n 5 gem_properties.csv

결과는 다음과 같아야 합니다.

gem_id,gem_name,color,hardness,density,refractive_index
1,Ruby ,Red ,9.0 ,4.0,1.77
2,Emerald ,Green ,8.0 ,3.1,1.58
3,Sapphire,Blue ,9.0 ,4.0,1.76
4,Diamond ,Colorless,10.0,3.5,2.42

이 명령은 gem_properties.csv 파일의 처음 다섯 줄을 표시하여 구조와 내용을 엿볼 수 있게 해줍니다.

Hive 테이블 생성

이제 데이터 세트에 익숙해졌으므로, 보석 속성 데이터를 저장하고 쿼리하기 위해 Hive 테이블을 생성하는 단계로 넘어가겠습니다.

먼저, Hive CLI 를 실행합니다.

hive

Hive CLI 내에서, 보석 데이터를 저장할 gemstone_analysis라는 새 데이터베이스를 생성합니다.

CREATE DATABASE gemstone_analysis;

다음으로, 새로 생성된 데이터베이스로 전환합니다.

USE gemstone_analysis;

데이터베이스가 설정되었으므로, gem_properties.csv 파일의 데이터를 저장하기 위해 gem_properties라는 테이블을 생성해 보겠습니다. 이 테이블에는 보석 ID, 이름, 색상, 경도, 밀도 및 굴절률에 대한 정보가 포함됩니다.

CREATE TABLE gem_properties (
  gem_id INT COMMENT 'Unique ID for the gem',
  gem_name STRING COMMENT 'Name of the gem',
  color STRING COMMENT 'Color of the gem',
  hardness FLOAT COMMENT 'Hardness of the gem',
  density FLOAT COMMENT 'Density of the gem',
  refractive_index FLOAT COMMENT 'Refractive index of the gem'
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
TBLPROPERTIES ('skip.header.line.count'='1');

이 문은 열 이름과 데이터 유형을 지정하여 gem_properties 테이블의 구조를 정의합니다. ROW FORMAT 절은 데이터가 쉼표로 구분됨을 나타내고, STORED AS TEXTFILE 절은 데이터가 일반 텍스트 파일로 저장되어야 함을 지정합니다.

이제 gem_properties.csv 파일의 데이터를 새로 생성된 gem_properties 테이블로 로드해 보겠습니다.

LOAD DATA LOCAL INPATH '/home/hadoop/hadoop/gemstone_data/gem_properties.csv'
INTO TABLE gem_properties;

이 명령은 지정된 파일 경로에서 gem_properties 테이블로 데이터를 로드합니다.

데이터가 로드되면, gem_properties 테이블의 처음 다섯 행을 표시하는 간단한 SELECT 쿼리를 실행하여 데이터가 올바르게 로드되었는지 확인해 보겠습니다.

SELECT * FROM gem_properties LIMIT 5;

이 쿼리는 gem_properties 테이블의 처음 다섯 행을 표시하여 데이터가 올바르게 로드되었는지 확인할 수 있게 해줍니다. 결과는 다음과 같아야 합니다.

OK
1 Ruby     Red       9.0 4.0 1.77
2 Emerald  Green     8.0 3.1 1.58
3 Sapphire Blue      9.0 4.0 1.76
4 Diamond  Colorless 10.0 3.5 2.42
5 Amethyst Purple    7.0 2.6 1.54
Time taken: 1.234 seconds, Fetched: 5 row(s)

보석 속성 분석

이 단계에서는 Hive 의 DISTRIBUTE BY 절을 활용하여 보석 속성 데이터를 효율적으로 분석합니다.

시작하려면, gem_name 열을 기준으로 데이터를 분할하기 위해 distributed_gem_properties라는 새 테이블을 생성합니다.

(시간이 조금 걸릴 수 있으니 잠시만 기다려 주세요)

CREATE TABLE distributed_gem_properties
AS
SELECT * FROM gem_properties
DISTRIBUTE BY gem_id;

이 테이블은 원래의 gem_properties 테이블의 구조를 미러링하지만, 데이터를 효과적으로 구성하고 분산하기 위한 추가 절을 통합합니다.

AS SELECT * FROM gem_properties: 이 문장의 부분은 기존 gem_properties 테이블에서 모든 열과 행을 선택합니다. 기본적으로 원본 테이블에서 새 분산 테이블로 데이터를 복사하는 것입니다.

DISTRIBUTE BY gem_id: 이 절은 gem_id 열을 기반으로 리듀서 간의 데이터 분산을 지정합니다. 이러한 방식으로 데이터를 분산함으로써 병렬 처리를 활용하여 보석 속성을 보다 효율적으로 분석할 수 있습니다.

이제 분산 테이블이 설정되었으므로, 향상된 효율성으로 보석 속성 데이터에 대한 다양한 분석을 수행할 수 있습니다.

경도가 8.0 과 9.0 사이인 보석을 찾기 위해 쿼리를 실행해 보겠습니다. 이 코드를 복사하여 터미널에 붙여넣어 실행합니다.

SELECT * FROM distributed_gem_properties WHERE hardness BETWEEN 8.0 AND 9.0;

이 쿼리는 지정된 범위 내에 경도가 있는 분산 테이블에서 보석 데이터를 검색합니다. 결과는 다음과 같아야 합니다.

OK
6 Topaz    Yellow    8.0 3.5 1.63
3 Sapphire Blue      9.0 4.0 1.76
2 Emerald  Green     8.0 3.1 1.58
1 Ruby     Red       9.0 4.0 1.77
Time taken: 0.388 seconds, Fetched: 4 row(s)

다음으로, GROUP BY를 활용하는 다음 코드 조각을 시도해 보겠습니다.

SELECT color, COUNT(*) AS count FROM distributed_gem_properties GROUP BY color;

이 코드는 distributed_gem_properties 분산 테이블에서 각 색상에 대한 보석의 수를 계산하는 데 사용되는 쿼리 문입니다. 결과는 다음과 같아야 합니다.

OK
Blue      1
Colorless 1
Green     2
Multi     1
Pink      1
Purple    1
Red       1
White     1
Yellow    1
Time taken: 18.566 seconds, Fetched: 9 row(s)

다음은 PARTITION BY를 사용하는 또 다른 예제 쿼리입니다.

SELECT gem_name, color, COUNT(*) OVER(PARTITION BY color) AS color_count
FROM distributed_gem_properties;

이 쿼리는 distributed_gem_properties 테이블에서 gem_namecolor를 선택하고 각 color에 대한 보석의 수를 계산합니다. PARTITION BY 절은 카운트를 분할할 열을 지정합니다. 이 경우 color 열입니다. 이렇게 하면 각 보석 색상에 대해 별도의 카운트가 생성됩니다. 결과는 다음과 같아야 합니다.

OK
Sapphire Blue      1
Diamond  Colorless 1
Emerald  Green     2
CatsEye Green     2
Agate    Multi     1
Rose     Pink      1
Amethyst Purple    1
Ruby     Red       1
Pearl    White     1
Topaz    Yellow    1
Time taken: 20.865 seconds, Fetched: 10 row(s)

이것들은 DISTRIBUTE BY로 분산된 테이블의 분석 및 적용에 대한 예비적인 이해를 돕기 위한 두 가지 간단한 예일 뿐이며, PARTITION BYGROUP BY와 같은 명령을 통합합니다. 이것으로 이 레슨을 마치며, 이제 어느 정도 이해하셨으리라 생각합니다.

요약

이 랩에서는 마법 세계의 재능 있는 보석 감정사 아리아의 안내를 받아 보석 분석의 매혹적인 여정을 시작했습니다. Hadoop 과 Hive 의 힘을 활용하여 광대한 데이터 저장소를 탐구하고, 이 매혹적인 영역의 마법을 뒷받침하는 신비로운 보석 안에 숨겨진 비밀을 밝혀냈습니다.

일련의 신중하게 구성된 단계를 통해 보석 데이터 세트의 복잡성을 탐구하고, 데이터를 저장하고 쿼리하기 위한 강력한 Hive 테이블을 생성했으며, 궁극적으로 DISTRIBUTE BY 절을 활용하여 분석을 최적화했습니다. 이 강력한 기술을 통해 데이터를 효율적으로 분할하고 분산하여 더 빠르고 집중적인 쿼리를 수행할 수 있었으며, 이러한 놀라운 보석의 속성과 응용 분야에 대한 귀중한 통찰력을 얻을 수 있었습니다.

이 랩을 통해 Hadoop 과 Hive 에 대한 실질적인 경험을 얻었을 뿐만 아니라 빅 데이터 분석이 마법 세계의 미스터리를 푸는 데 미치는 변혁적인 잠재력을 목격했습니다. 이러한 도구를 마스터함으로써, 우리는 새로운 모험을 시작하는 데 필요한 지식과 기술을 갖추게 되었으며, 데이터가 무한한 가능성을 열고 마법 혁신의 경계를 넓히는 열쇠를 쥐고 있습니다.