본문 바로가기

Study/class note

하둡 / 하둡 파일 시스템에 하이브에서 파티션 테이블 생성하기

ㅇ미국 항공 데이터 다운로드

데이터 설명 : 1987 ~ 2008년까지의 미국 내 모든 상업 항공편에 대한 항공편 도착,출발,세부사항에 대한 정보를 제공하는 데이터입니다. 이 모든 데이터를 다 내려받고 압축을 풀 경우 11GB입니다.

이 통계 데이터는 총 29개의 컬럼으로 구성되어 있습니다.

 


48 하둡 파일 시스템에 하이브에서 파티션 테이블 생성하기 

일반 테이블 파티션 테이블
하나의 서랍장에 모든 데이터를 다 넣어놓은 테이블 그룹별로 구분 지어서 데이터를 넣어놓은 테이블
(엑셀 sheet 생각하면 될 듯?)

파티션 테이블은 테이블을 전체 스캔하지 않고 특정 파티션만 스캔합니다.

일반 테이블 > select *
       from 옷장
       where 옷 = '파란 반팔 티셔츠';
       
파티션 테이블 > select *
                from 여름 옷장
                where 옷 = '파란 반팔 티셔츠';

 

 

예제1. 항공데이터 1997.csv를 리눅스 서버 /home/oracle 밑에 올리시오.

(모바텀을 통해서 올렸습니다.)

(base) [oracle@centos ~]$ ls -l 1997.csv
-rw-rw-r--. 1 oracle oracle 540347861  3월 28 16:14 1997.csv

 

 

예제2. /home/oracle 밑에 1997.csv의 첫번째 행을 지우고 1997b.csv로 저장하시오.

(base) [oracle@centos ~]$ head -5 1997.csv
Year,Month,DayofMonth,DayOfWeek,DepTime,CRSDepTime,ArrTime,CRSArrTime,UniqueCarrier,FlightNum,TailNum,ActualElapsedTime,CRSElapsedTime,AirTime,ArrDelay,DepDelay,Origin,Dest,Distance,TaxiIn,TaxiOut,Cancelled,CancellationCode,Diverted,CarrierDelay,WeatherDelay,NASDelay,SecurityDelay,LateAircraftDelay
1997,1,28,2,1615,1615,1728,1725,WN,1159,N683,73,70,60,3,0,ABQ,PHX,328,4,9,0,NA,0,NA,NA,NA,NA,NA
1997,1,29,3,1624,1615,1735,1725,WN,1159,N626,71,70,56,10,9,ABQ,PHX,328,4,11,0,NA,0,NA,NA,NA,NA,NA
1997,1,30,4,1626,1615,1730,1725,WN,1159,N321,64,70,52,5,11,ABQ,PHX,328,2,10,0,NA,0,NA,NA,NA,NA,NA
1997,1,31,5,1628,1615,1729,1725,WN,1159,N383,61,70,50,4,13,ABQ,PHX,328,4,7,0,NA,0,NA,NA,NA,NA,NA

1997.csv 컬럼명이 살아있음. 이 컬럼들을 다 지우고 하둡에 올려야함

(base) [oracle@centos ~]$ sed '1d' 1997.csv >> 1997b.csv

(base) [oracle@centos ~]$ head -5 1997b.csv
1997,1,28,2,1615,1615,1728,1725,WN,1159,N683,73,70,60,3,0,ABQ,PHX,328,4,9,0,NA,0,NA,NA,NA,NA,NA
1997,1,29,3,1624,1615,1735,1725,WN,1159,N626,71,70,56,10,9,ABQ,PHX,328,4,11,0,NA,0,NA,NA,NA,NA,NA
1997,1,30,4,1626,1615,1730,1725,WN,1159,N321,64,70,52,5,11,ABQ,PHX,328,2,10,0,NA,0,NA,NA,NA,NA,NA
1997,1,31,5,1628,1615,1729,1725,WN,1159,N383,61,70,50,4,13,ABQ,PHX,328,4,7,0,NA,0,NA,NA,NA,NA,NA
1997,1,14,2,1503,1425,1619,1535,WN,1221,N513,76,70,64,44,38,ABQ,PHX,328,4,8,0,NA,0,NA,NA,NA,NA,NA

 

 

예제3. 리눅스 /home/oracle 밑에 있는 1997b.csv 파일을 하둡 분산파일 시스템 /user/oracle/1997b.csv로 올리시오.

(기존에 있던 1997.csv파일 삭제하고 1997b.csv로 새로 올림)

(base) [oracle@centos ~]$ hadoop fs -rm /user/oracle/1997.csv
Deleted hdfs://localhost:9000/user/oracle/1997.csv

(base) [oracle@centos ~]$ hadoop fs -put 1997b.csv /user/oracle/1997b.csv

 

 

예제4. 항공 데이터를 저장할 테이블을 하이브에서 생성하시오.

(스칼라로 접속되어 있다면 접속을 해제하고 테이블 생성해야합니다.)

hive> CREATE TABLE airline_delay(
    > Year    INT,
    > Month    INT,
    > DayofMonth    INT,
    > DayOfWeek    INT,
    > DepTime    INT,
    > CRSDepTime    INT,
    > ArrTime    INT,
    > CRSArrTime    INT,
    > UniqueCarrier    STRING,
    > FlightNum    INT,
    > TailNum    STRING,
    > ActualElapsedTime    INT,
    > CRSElapsedTime    INT,
    > AirTime    INT,
    > ArrDelay    INT,
    > DepDelay    INT,
    > Origin    STRING,
    > Dest    STRING,
    > Distance    INT,
    > TaxiIn    INT,
    > TaxiOut    INT,
    > Cancelled    INT,
    > CancellationCode    STRING COMMENT 'A = carrier, B = weather, C = NAS, D=security' ,
    > Diverted    INT COMMENT '1 = yes, 0 = no',
    > CarrierDelay    STRING,
    > WeatherDelay    STRING,
    > NASDelay    STRING,
    > SecurityDelay    STRING,
    > LateAircraftDelay STRING
    > )
    > Partitioned by (DelayYear INT)
    > ROW FORMAT DELIMITED
    >     FIELDS TERMINATED BY ','
    >     LINES TERMINATED BY '\n'
    >     STORED AS TEXTFILE;
OK

>comment 안 달아도 되지만, 주석처럼 써두면 다른 사람들이 테이블 보기에 좋음.

> Partitioned by (DelayYear INT) 로 인해 DelayYear 컬럼을 기준으로 파티션 테이블을 생성함(연도별로 파티션 테이블로 생성할 예정)

 

 

예제5. 하둡 분산 파일 시스템에 /user/oracle/1997b.csv를 하이브에 airline_delay 테이블에 로드하시오.

hive> load data inpath '/user/oracle/1997b.csv'
    > overwrite into table airline_delay
    > partition (delayYear='1997');

 

 

문제308. (오늘의 마지막 문제) 1994.csv도 미국 항공 통계 사이트에서 내려받고 첫번째 줄 지우고 하둡 파일시스템에 올린 후 airline_delay 테이블에 입력하시오.

(모바텀으로 데이터 올리기)

(base) [oracle@centos ~]$ ls -l 1994.csv
-rw-rw-r--. 1 oracle oracle 501558665  3월 28 17:00 1994.csv
(base) [oracle@centos ~]$ vi 1994.csv

(base) [oracle@centos ~]$ head -3 1994.csv
1994,1,7,5,858,900,954,1003,US,227,NA,56,63,NA,-9,-2,CLT,ORF,290,NA,NA,0,NA,0,NA,NA,NA,NA,NA
1994,1,8,6,859,900,952,1003,US,227,NA,53,63,NA,-11,-1,CLT,ORF,290,NA,NA,0,NA,0,NA,NA,NA,NA,NA
1994,1,10,1,935,900,1023,1003,US,227,NA,48,63,NA,20,35,CLT,ORF,290,NA,NA,0,NA,0,NA,NA,NA,NA,NA

(base) [oracle@centos ~]$ hadoop fs -put 1994.csv /user/oracle/1994.csv
hive> load data inpath '/user/oracle/1994.csv'
    > overwrite into table airline_delay
    > partition (delayYear='1994');
    
hive> select year, count(*)
    > from airline_delay
    > group by year;

1994    5180048
1997    5411843

 

반응형