Hadoop/Apache Hive

Apache Hive 설치 3 ( HIVE 테스트 )

데이터공부방 2021. 9. 24. 16:52

HIVE 설치가 완료되었으므로 정상적으로 작동하는지 간단 실습을 진행해보도록 하겠습니다.

 

1. HIVE로 가져올 데이터 파일 확인

 

HIVE가 설치된 경로에서 테스트파일을 가져옵니다.

ls /(hive 경로)/examples/files

 

 

파일 리스트

 

조회하게 되면 위 사진처럼 파일 리스트가 출력될 것 입니다.

 

2. HIVE 접속 및 table 생성

 

hive 명령어를 통해 hive로 접속합니다.

hive는 sql과 비슷한 hql 언어를 사용하여 테이블을 만듭니다.

 

먼저, events라는 table을 만들고 이 테이블에 우리가 필요한 파일을 넣을 것입니다.

create table events(key int, value string);

 

pokes라는 table을 만듭니다.

create table pokes(foo int,bar string);

 

invites라는 테이블을 만듭니다. 이 테이블은 partition을 사용합니다.

partition이란, 데이터를 넣을 때 part로 구분하기 위해 사용합니다. 주로 날짜로 많이 활용합니다.

 

create table invites(foo int, bar string) partitioned by(ds string);

 

테이블들이 잘 만들어졌는지 확인합니다.

그리고 한번 invites 테이블의 구조를 확인해보도록 하겠습니다.

 

 

테이블 생성 결과

 

3. pokes 테이블에 열 추가

 

pokes 테이블에 new_col이라는 열을 추가해보겠습니다.

그리고 잘 추가 되었는지 pokes 테이블을 살펴보겠습니다.

 

alter table pokes add columns(new_col int);

describe pokes;

 

pokes 테이블 결과

 

 

4. pokes 테이블에 데이터 넣기

 

이번엔 hive example에 있는 kv1.txt 파일을 pokes 테이블에 넣어보겠습니다.

 

load data local inpath '/(hive 설치 경로)/examples/files/kv1.txt' overwrite into table pokes;

 

 

load data 실행 경로

 

위와 같이 결과가 나왔으면 load data 성공입니다.

 

load data가 성공했다면 pokes 테이블을 hive에서 출력해보겠습니다.

 

select * from pokes limit 10;

 

 

pokes 테이블 10개 행 조회 결과

 

 

위 조회 결과와 같이 데이터가 잘 삽입 되었습니다.

 

5. invites 테이블에 데이터 넣기

 

pokes 테이블의 과정과 똑같이 invites 테이블에도 데이터를 넣어보도록 하겠습니다.

이번엔 kv2.txt와 kv3.txt 두 파일 모두 넣어보겠습니다.

 

kv2.txt 파일 넣기

 

load data local inpath '/(hive 설치 경로)/examples/files/kv2.txt' overwrite into table invites partition(ds='2008-08-15');

partition 테이블 이기 때문에 날짜를 지정하여 데이터를 삽입하겠습니다.

 

kv2.txt load 결과

 

 

kv3.txt 파일 넣기 

 

load data local inpath '/(hive 설치 경로)/examples/files/kv3.txt' overwrite into table invites partition(ds='2008-08-08');

 

kv3.txt load 결과

 

 

partition 테이블 invites를 출력해보겠습니다.

 

select * from invites limit 20;

 

invites 테이블 20개 행 출력결과

 

 

6. HDFS 시스템에 작업 저장

 

partition 을 기준으로 2008-08-15와 2008-08-08 부분을 Hadoop HDFS 시스템에 저장해보겠습니다.

데이터들을 bar로 분류하고, 분류한 그룹의 평균을 foo 값으로 나타냅니다. foo값은 결과치 값입니다.

 

2008-08-15 분류데이터

insert overwrite directory 'output/' select bar, avg(foo) from invites where ds='2008-08-15' group by bar;

- 2008-08-15 데이터는 Hadoop의 output/ 경로의 HDFS파일로 저장하겠습니다.

 

 

 

2008-08-08 분류데이터

insert overwrite local directory '/tmp/local_out' select bar, avg(foo) from invites where ds='2008-08-08' group by bar;

- 2008-08-08 데이터는 로컬의 /tmp/local_out 경로에 저장하겠습니다.

 

 

7. 저장한 데이터 출력

 

hive 상태에서 exit;를 입력하고 hadoop 계정으로 돌아와서 실행합니다.

 

먼저 로컬의 /tmp/local_out 경로에 저장한 2008-08-08 데이터를 출력해보겠습니다.

 

head /tmp/local_out/000000_0

 

head는 결과물 상단 10개를 출력합니다.

이 결과는 hive 저장초기 이름명인 000000_0 으로 저장됩니다.

 

로컬 경로 결과

 

 

다음으로 HDFS에 저장된 2008-08-15 데이터를 출력해보겠습니다.

 

hdfs dfs -tail output/000000_0

 

hdfs 경로 출력 결과