IT world

리눅스 - Hive 본문

리눅스

리눅스 - Hive

엄킹 2019. 11. 26. 17:55



이번 포스팅은 hive의 사용에 대해서 알아보려고 한다.


하이브란?


하둡 에코시스템 중에서 데이터를 모델링하고 프로세싱하는 경우 가장 많이 사용하는 데이터 웨어하우징용 솔루션이다.


RDB의 데이터베이스, 테이블과 같은 형태로 HDFS에 저장된 데이터의 구조를 정의하는 방법을 제공하며, 이 데이터를 대상으로 SQL과 유사한 HiveQL 쿼리를 이용하여 데이터를 조회하는 방법을 제공한다.







 

하이브의 정보가 담긴 압축파일을 다운받아 압축을 푼 후 local 경로로 이동시킨다.


이동이 완료 되었다면 편하게 사용하기 위해 hive로 링크를 연결한다.


[하이브 파일 압축 해제]



[local로 파일을 옮긴 후 hive로 링크를 연결했다.]






hive를 PATH에 연결 (vi /etc/profile 에서 설정)


export HIVE_HOME=/usr/local/hive // 하이브의 위치

- export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HIVE_HOME/bin:$PATH 이렇게 HIVE_HOME // 하이브의 위치를 PATH에 연결







경로를 hive 내의 conf로 이동한 후 conf폴더 내부에 있는 4개의 파일중 2개의 템플릿 파일들만 사용할 것이다. (local에서 cd hive/conf)


각각의 템플릿 파일에 대한 폴더를 만들어서 그 폴더에 템플릿을 옮길 것(디렉토리명은 템플릿 파일과 동일하게 생성)

hive-exec-log4j.properties.template , hive-log4j.properties.template 








폴더를 생성했다면 vi 편집기를 사용해서 해당 폴더를 작업한다. (두개 폴더 동일하게 수행)


- 편집기에서 /jvm을 통해 jvm을 검색하여 나온 소스를 수정

log4j.appender.EventCounter=org.apache.hadoop.log.metrics.EventCounter 이렇게 수정한다 // metrics앞에 .log를 작성하고 뒤에 jvm을 지운다.


- 변경이 완료 되었다면 하둡을 실행한다.(hadoop namenode -format / start-all.sh)

- 하둡을 실행할 때 sps, ips, mr, tr 작업 수행 (앞에 포스팅에 내용 확인)



[jvm 검색]





[변경 전]



[변경 후]





생성된 두 폴더 수행

vi hive-exec-log4j.properties, vi hive-log4j.properties




하둡 수행

hadoop namenode -format

start-all.sh




hive프로젝트에 진행될 파일들이나 자료를 저장하기 위해 Temp 폴더에 hive폴더를 생성하여 해당 폴더에서 작업을 수행한다.


임의의 폴더 hive1을 생성했고 해당 경로로 이동하여 hive를 입력하면 hive database에 접속하게 된 것이다.


hive는 sql에 사용하는 것과 같이 명령을 입력해주면 된다.




[이렇게 하이브 데이터베이스에 접속해서 show databases로 db를 검색해보았고 기본 db인 default가 출력되었다.]






airdelay라는 테이블 생성


CREATE TABLE airdelay(

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; 


생성된 테이블을 보기 위해 desc airdelay 명령을 통해 확인




1999~2002년 까지의 비행기 딜레이정보, 결항정보 등등 다양한 정보가 담긴 빅데이터 엑셀 파일을 해당 테이블에 적용하여 db를 운영해볼 것이다. 


작성자의 hive1파일 안에는 엑셀파일들이 존재하고 해당 데이터들을 하나의 테이블에 모두 넣는 것은 작업을 수행하는데 너무 오래걸린다. 데이터를 테이블의 모든 row정보를 읽어서 작업을 수행하는 것이기 때문에 빅데이터의 작업은 오래걸린다.


따라서 partition을 사용해서 각각의 엑셀 파일에 대해 별도의 공간에 각각 저장하는 것과 같은 효과를 적용해서 별도의 공간에 데이터를 저장했다가 필요 시 불러와서 처리속도를 향상시킨다.





이렇게 hive폴더에 있는 엑셀파일을 불러와서 테이블에 작성하는데 partition을 사용해서 2000이라는 공간에 별도로 저장하겠다는 의미이다. 


이런식으로 1999,2000,2001,2002 엑셀파일을 똑같이 수행해준다.


이렇게 엑셀파일을 서버를 통해 데이터를 관리하는 이유는 엑셀에서 저장할 수 있는 데이터의 한계가 있고 500만개정도의 데이터를 저장할 수 가 없다 따라서 빅데이터를 관리하기 위해 서버에서 작업을 수행하고 관리하여 무수히 많은 데이터를 손쉽게 관리할 수가 있다.



여기까지 완료되었다면 해당 값들을 테이블에 넣었고 준비된 것이므로 사용자가 원하는 sql명령을 통해 출력을 할 수 있다.




예제1

비행기별로 최대 지연을 일으킨 지연시간과 모든 비행기중에서 가장 많은 지연을 일으킨 비행기와 지연시간을 찿아내시오?



[위 사진처럼 sql명령을 입력하면 되고 limit를 통해 10개까지만 출력하도록 설정]


select문을 통해 flightnum속성과 arrdelay속성을 사용하는데 max()를 통해 가장 큰 값을 출력하고 가장 큰 값을 찾은 arrdelay를 maxdelay로 사용하겠다는 뜻이다


group by를 통해 flightnum로 묶었고


order by를 통해 maxdelay 값들을 내림차순으로 정렬하였다.



[출력 값]


1열의 정보는 flightnum속성이고 2열의 정보는 maxdelay의 속성값들이다.






예제2

가장많이 취소된 비행일정은 몇월에 주로 나타나는가?




[sql 명령문]




[출력 값]


이렇게 month속성별로 묶어서 month의 오름차순으로 정렬했고 order by의 기본 값은 오름차순이다.




'리눅스' 카테고리의 다른 글

리눅스 Makefile  (0) 2019.11.26
리눅스 wordcount를 사용해서 데이터 값 시각화하기  (0) 2019.11.26
리눅스 하둡1  (0) 2019.11.26
리눅스 ssh key 생성  (0) 2019.11.25
리눅스 간단한 예제  (0) 2019.11.22
Comments