※ 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: 실행
- $ 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으로 바꾸었습니다.)
- 재실행
4. Hive 폴더 준비
- $ hdfs dfs -mkdir -p /user/hive/warehouse : 폴더 준비
- $ hdfs dfs -chmod g+w /user/hive/warehouse : 권한 부여
4. Hive 실행
- $ hive 입력
※ Hive 활용
1. SHOW
$ SHOW databases; : 현재 있는 Database 확인
$ SHOW tables; : 현재 존재하는 Table 확인
2. USE
$ USE default; : default db를 사용
3. CREATE
$ CREATE DATABASE userdb; : userdb 생성
$ 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
4. LOAD
$ LOAD DATA LOCAL INPATH 로컬파일패스 OVERWRITE INTO TABLE 테이블명;
(예)
5. DESC
$ DESC 테이블: 테이블 구조 출력
(예)
6. SELECT
$ SELECT * FROM 테이블
(예)
(예2)
$ SELECT AVG(SALARY) FROM employee;
=> AVG 함수를 사용했기 때문에, MapReduce 연산을 사용한다.
* 모든 SQL 문장이 MapReduce를 사용하는 것은 아니다.
[ 기타 ]
1) 다른 터미널에서 하둡을 사용하고 있을 경우, 현저하게 속도가 느려짐
'프로그래밍' 카테고리의 다른 글
[Hive] MySQL 설치 - Hive 연동 (0) | 2021.06.04 |
---|---|
[R] 예측 오차를 통한 예측 모델 성능 평가 (0) | 2021.06.02 |
[HDFS] HDFS 명령어 및 운영 규칙 (0) | 2021.06.02 |
[Linux] Linux 명령어 정리 & Hadoop 설치 및 환경 조성 (0) | 2021.06.02 |
[R] 분석모델 확장(파생변수, 앙상블 기법) (0) | 2021.05.31 |