프로그래밍

[Hive] Hive 설치 및 환경 조성

RainIron 2021. 6. 2. 14:53
반응형

※ Hive(Hadoop Ecosystem)

- 대용량 분산환경에서 데이터 처리(통계 함수 등)를 할 수 있는 프레임워크
- 사용 언어: HiveQL(Hive SQL)
  - HiveQL을 사용하면 MapReduce 코드 생성/실행
  - HiveQL을 사용하여 데이터 추가하면 HDFS에 파일 데이터로 저장
- derby, MySQL: Metadata 저장하는 용도
- HiveQL을 이용하여 DB 사용하듯이 할 수 있지만 결국 HDFS 영역에 파일로 저장된다


※ Hive 설치 및 환경 설정

1. wget https://downloads.apache.org/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz

파일 다운로드 및 압축 해제

 

2. .bashrc에 환경 변수 추가

$ nano .bashrc : 사용하여 파일을 열고, 아래의 환경 변수를 추가한다.

export HIVE_HOME=/home/hdoop/hive-3.1.2/
export PATH=$PATH:$HIVE_HOME/bin

- $패스명: 기존에 사용한 패스명 참조

 

(주의: 띄어쓰기 잘못된 경우에 실행이 되지 않는 경우가 있음)

-bash: export: `=': not a valid identifier
-bash: export: `/home/hdoop/hive-3.1.2/': not a valid identifier
-bash: export: `=': not a valid identifier
-bash: export: `/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/hdoop/hadoop/sbin:/home/hdoop/hadoop/bin:/home/hdoop/anaconda3/bin:/home/hdoop/hadoop/sbin:/home/hdoop/hadoop/bin:/home/hdoop/anaconda3/bin:/bin': not a valid identifier

 

3. MetaStore 구조 설정

- Local DB(derby, MariaDB, MySQL): 메타 데이터를 저장

- Metastore: DB 연결정보, 스키마(Schema, 논리적 내부 구조)

- HDFS에 데이터들이 존재, Local에 존재하는 메타 데이터를 활용하여 SQL을 사용해 데이터를 활용한다.

1) 스키마 생성

- $ cd hive-3.1.2/bin: 실행하여 이동

- $ schematool -dbType derby -initSchema: 실행

화면과 같이 오류가 발생한다. 인터넷에 검색하여 원인을 찾아본 결과 hive가 가지고 잇는 라이브러리 중 guava 버전이 다르기 때문인 것을 알 수 있었다.

- $ rm hive-3.1.2/lib/guava-19.0.jar : 기존 guava 버전 제거

- $ cp ~/hadoop/share/hadoop/hdfs/lib/guava-27.0-jre.jar ~/hive-3.1.2/lib/guava-27.0-jre.jar : 새로운 guava 버전 복사 (설치한 하둡 폴더를 이름을 hadoop으로 바꾸었습니다.)

 

- 재실행

스키마 완료!
ls 명령어를 실행하여 metastore_db가 설치된 것을 알 수 있다.

4. Hive 폴더 준비

- $ hdfs dfs -mkdir -p /user/hive/warehouse : 폴더 준비

- $ hdfs dfs -chmod g+w /user/hive/warehouse : 권한 부여

 

4. Hive 실행

- $ hive 입력

hive shell


※ Hive 활용

1. SHOW

$ SHOW databases; : 현재 있는 Database 확인

$ SHOW tables; : 현재 존재하는 Table 확인

 

2. USE

$ USE default; : default db를 사용

 

 

3. CREATE

$ CREATE DATABASE userdb; : userdb 생성

HDFS 저장소 상황: userdb.db가 생성되었다.

 

$ CREATE TABLE

(예)

CREATE TABLE IF NOT EXISTS employee(
eid int,
name string,
salary string,
destination string )
COMMENT 'Employee details'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
TBLPROPERTIES('NO_AUTO_COMPACTION' = 'true');

* 파일에 저장할 형태까지 입력해야 한다.
ROW FORMAT DELIMITED  
- FIELDS TERMINATED BY ',' : 필드마다 구분자는 ','
- LINES TERMINATED BY '\N' : 행마다 구분자는 개행문자
- STORED AS TEXTFILE : 저장 형식은 txt 파일
- TBLPROPERTILES('NO_AUTO_COMPACTION' = 'true') : Table Properties

HDFS 저장소 상황: employee 디렉터리가 생성되었다.

 

4. LOAD

$ LOAD DATA LOCAL INPATH 로컬파일패스 OVERWRITE INTO TABLE 테이블명;

(예)

HDFS 저장소 상황: employee.csv가 생성되었다.

5. DESC

$ DESC 테이블: 테이블 구조 출력

(예)

6. SELECT

$ SELECT * FROM 테이블

(예)

hdfs상에서 분산된 파일에서 정보를 찾아오는 것이기 때문에 시간이 다소 걸림

(예2)

$ SELECT AVG(SALARY) FROM employee;

=> AVG 함수를 사용했기 때문에, MapReduce 연산을 사용한다.

 

* 모든 SQL 문장이 MapReduce를 사용하는 것은 아니다.

 


[ 기타 ]

1) 다른 터미널에서 하둡을 사용하고 있을 경우, 현저하게 속도가 느려짐

반응형