Hive를 이용하면 Hadoop 클러스터를 RDB처럼 쓸 수 있음.
Distributing SQL queries with Hadoop
- SQL을 이용해 Hadoop 클러스터에 걸쳐있는 데이터를 쿼리하는 간단하고 강력한 도구.
- MySQL 처럼 HDFS 클러스터 전체에 분산된 데이터에 SQL 쿼리를 실행하는 도구이다.
- SQL을 MapReduce나 TEZ 명령어로 번역해서 동작하며, 이것들은 YARN 클러스터 위에서 실행된다.
→ 즉, Hive는 SQL 쿼리를 Mapper와 Reducer로 분해하고, 이를 클러스터 전반에 분배해서 어떻게 실행할지를 알아낸다.
- MySQL과 거의 흡사한 HiveQL은, 몇몇을 제외하고는 대부분 가능하다.
물론, 결과가 즉각적으로 얻어지진 않지만, 단일 DB에서 처리할 수 있는 데이터량 보다, 훨씬 큰 데이터를 처리할 수 있음.
OLAP (Online Analytics Processing) 쿼리는 Java에서 MapReduce를 작성하는 것보다 Hive를 통해 SQL 구문으로 작성하는 것이 훨씬 쉽다. → 간단함의 정도가 다름
Hive는 온라인 분석 목적이 크다. 실시간 처리 등의 작업에는 적합하지 않을 수 있지만, 대용량 데이터 셋에 분석 쿼리를 날리려는 것이면 Hive는 여기에 최적화 되어 있음.
- 만약, SQL 만으로 충분치 않다면 UDF 를 작성해서 고유의 Mapper를 만들 수도 있다.
- 또한 ‘Thrift’ 서버를 활용해 외부에서도 사용자가 Hive와 소통할 수 있다.
- 그리고 JDBC & ODBC 드라이버를 활용해서 다른 DB들과 마찬가지처럼 사용할 수 있다.
Why not Hive?
Hive는 OLAP 목적으로 만들어졌다. OLTP (Online Transaction Processing)을 위한 것이 아니다. 즉, 높은 처리량과 낮은 대기 시간을 원하는 경우 Hive는 좋은 선택이 되지 않는다. (SQL 쿼리를 MapReduce로 번역해야 하기 때문)
- 정규화되지 않은 데이터를 사용한다. 즉, 진짜 RDB는 아니라는 것임. (테이블이나 키를 가지고 있지 않음) 따라서 RDB의 특성에 너무 의지하지 말 것.
- SQL 자체의 한계 → SPark 등을 이용하는게 좋을 수도 있음.
- Transaction을 지원하지 않는다.
- 그리고 진짜 DB가 아니기 때문에, 업데이트, 삽입, 삭제 등을 해도 기록 되지 않는다. 애초에 내부적으로는 실제 DB가 없기 때문. 단지, Mapper & Reducer를 거치는 거대한 텍스트 파일이 존재하는 것 뿐이다. (wow)
HiveQL