분산처리/빅데이터-하둡, 하이브로 시작하기

5-1) 하이브(hive)

busy맨 2023. 7. 27. 21:08

1. 하이브

  • 하둡 에코시스템 중에서 데이터를 모델링하고 프로세싱하는 경우, 가장 많이 사용하는 데이터 웨어하우징용 솔루션
  • RDB의 데이터베이서, 테이블과 같은 형태로 HDFS에 저장된 데이터의 구조를 정의하는 방법을 제공
  • SQL과 유사한 HiveQL 쿼리를 이용하여 데이터를 조회하는 방법을 제공

 

구성요소

  • UI
    • 사용자가 쿼리 및 기타 작업을 시스템에 제출하는 사용자 인터페이스
  • Driver
    • 쿼리를 입력받고 작업을 처리
    • 사용자 세션을 구현하고, JDBC/ODBS 인터페이스 API 제공
  • Compiler
    • 메타 스토어를 참고하여 쿼리 구문을 분석하고 실행계획을 생성
  • Metastore
    • 디비, 테이블, 파티션의 정보를 저장
  • Execution Engine
    • 컴파일러에 의해 생성된 실행 계획을 실행

 

실행 순서

  1. 사용자가 제출한 SQL문을 드라이버가 컴파일러에 요청하여 메타스토어의 정보를 이용해 처리에 적합한 형태로
    컴파일
  2. 컴파일된 SQL을 실행엔진으로 실행
  3. 리소스 매니저가 클러스터의 자원을 적절히 활용하여 실행
  4. 실행 중 사용하는 원천 데이터는 HDFS 등의 저장장치를 이용
  5. 실행결과를 사용자에게 반환

 

2. 데이터베이스

  • 하이브의 데이터베이스는 테이블의 이름을 구별하기 위한 네임 스페이스 역할
  • 테이블의 데이터의 기본 저장 위치를 제공
  • 데이터베이스 생성 시, 로케이션을 지정하지 않으면 설정값을 기본 위치로 설정
    • 데이터베이스의 로케이션은 테이블이 로케이션을 지정하지 않았을 때 기본 저장 위치가 됨
# 기본 위치 
hive.metastore.warehouse.dir = hdfs:///user/hive/

# 데이터베이스의 기본 위치 
hdfs:///user/hive/{데이터베이스 명}.db

# 테이블의 기본 위치 
hdfs:///user/hive/{데이터베이스 명}.db/{테이블 명}

 

  • 데이터베이스 생성
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
  [COMMENT database_comment]
  [LOCATION hdfs_path]
  [WITH DBPROPERTIES (property_name=property_value, ...)];
  • 데이터베이스 수정
ALTER (DATABASE|SCHEMA) database_name SET DBPROPERTIES (property_name=property_value, ...);   -- (Note: SCHEMA added in Hive 0.14.0)

ALTER (DATABASE|SCHEMA) database_name SET OWNER [USER|ROLE] user_or_role;   -- (Note: Hive 0.13.0 and later; SCHEMA added in Hive 0.14.0)

ALTER (DATABASE|SCHEMA) database_name SET LOCATION hdfs_path; -- (Note: Hive 2.2.1, 2.4.0 and later)
  • 데이터베이스 삭제
DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];

 

Ex Code)

-- 데이터 베이스 생성 
CREATE DATABASE IF NOT EXISTS sample_database
COMMENT "test database"
LOCATION "/user/shs/sample_database/"
WITH DBPROPERTIES (
  'key1' = 'value1',
  'key2' = 'value2'
);

-- 데이터베이스 정보 확인 
hive> DESC DATABASE EXTENDED sample_database;
OK
sample_database test database   hdfs:///user/shs/sample_database    hadoop  USER    {key1=value1, key2=value2}

-- 데이터베이스 정보 수정 
ALTER DATABASE sample_database SET DBPROPERTIES ("key1"="value4"); 

hive> DESC DATABASE EXTENDED sample_database;
OK
sample_database test database   hdfs:///user/shs/sample_database    hadoop  USER    {key1=value4, key2=value2}

-- 데이터베이스 드랍
-- 하위에 테이블이 존재하면 오류가 발생 
hive> DROP DATABASE sample_database;
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. InvalidOperationException(message:Database sample_database is not empty. One or more tables exist.)

-- CASCADE 옵션을 이용하여 삭제 
hive> DROP DATABASE sample_database CASCADE;
OK
Time taken: 0.227 seconds

'분산처리 > 빅데이터-하둡, 하이브로 시작하기' 카테고리의 다른 글

5-2) hive 테이블 1  (0) 2023.07.31
4) YARN  (0) 2023.07.27
3) 맵리듀스  (0) 2023.07.27
2-4) HDFS 기능 2  (0) 2023.07.18
2-3) HDFS 기능 1  (0) 2023.07.17