Hive

김형수·2022년 12월 16일
0

Hadoop

목록 보기
5/11

Hive

Hive 기술을 통해 hadoop 클러스터를 관계형 데이터베이스처럼 사용할 수 있다.

  • SQL을 사용해 Hadoop 클러스터에 걸쳐있는 데이터를 쿼리하는 간단하고 강력한 도구.(구조화된 쿼리 언어)
  • HDFS 클러스터 전체에 걸쳐 저장된 데이터에 표준 SQL 쿼리를 실행.
    - SQL을 MapReduce나 TEZ 명령어로 번역해서 작동.
    - YARN 클러스터 관리자 위에서 실행.
    - Hive는 SQL 쿼리를 매퍼와 리듀서로 분해하고 클러스터 전체에 걸쳐 어떻게 실행할지를 알아낸다.

    사용자의 관점에서는 데이터 웨어하우스를 사용하는 것처럼 SQL 데이터베이스에 쿼리하는 것과 같다.

HiveQL

  • MySQL 구문과 굉장히 비슷.
  • SQL에서 할 수 있는 모든 것을 HiveQL에서 할 수 있다.
  • HiveQL은 대화형 명령 프롬프트를 사용.
    - 'SELECT' 명령어 등을 사용해 일반 데이터베이스에 하듯 사용가능.
  • 결과가 즉각적으로 나오진 않겠지만 상식적인 시간 내에 결과를 얻을 것이고 단일 데이터베이스 인스턴스에서보다 훨씬 큰 데이터를 처리할 수 있다.
  • 실시간 처리 등의 작업에는 적합하지 않을 수 있지만 대용량 데이터 세트에 분석 쿼리를 하려는 것이라면 Hive가 제격.

Hive weakpoint

  • 고 처리량, 저 대기 시간을 원한다면 좋은 선택이 아님.
    - SQL 명령어를 MapReduce로 번역을 해야 하기 때문에 시간이 더 걸리기 때문.
  • 비정규화 데이터를 사용.
    - 관계형 데이터베이스인 것처럼 쿼리할 수 있지만 실제론 모든 것이 비정규화되어 있고 연결된 별도의 테이블이나 키 등을 갖고 있지 않는다.
    • 업데이트나, 삽입, 삭제 등을 해도 기록되지 않는다. (실제 데이터베이스가 아니기 때문. 거대한 하나의 텍스트 파일)
  • 잡한 쿼리를 해야 한다면 Pig나 Spark가 좀 더 적합.
    - (다만 나중에 VIEW를 통해 연계 사용 가능.)

Hive VIEW

  • 어떤 쿼리의 결과를 'VIEW'에 저장하고 그 'VIEW'를 다음 쿼리의 테이블로 사용할 수 있는 아주 유용한 기능.
  • 복잡한 쿼리를 개별 쿼리로 분할해 이 'VIEW'를 점점 발전시키며 층층이 쌓아 구축할 수 있다.

Hive example

CREATE VIEW IF NOT EXISTS topMovieIDs AS 
SELECT movieID, count(movieID) as ratingCount
FROM ratings
GROUP BY movieID
ORDER BY ratingCount DESC;

SELECT n.name ratingCount
FROM topMovieIDs t JOIN movie_names n ON t.movieID * n.movie_ID;
  • 기본적으로 관계형 데이터베이스 언어 (MYSQL)의 문법과 별반 차이가 없다.
  • CREATE VIEW
    - 위에서 설명한 Hive의 특징으로 VIEW를 만들어 다음 쿼리로 넘길 수 있다.

0개의 댓글