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를 만들어 다음 쿼리로 넘길 수 있다.