페이지

2017년 12월 20일 수요일

3. SQL on Hadoop

실제 업무에서는 배치 처리뿐만 아니라, 데이터를 실시간으로 조회하거나 처리해야 하는 일들이 많다. 실시간 처리하는 측면에서 하둡의 제약사항을 극복하기 위한 다양한 시도가 있었으며, 이 중에 최근 주목 받고 있는 것이 SQL on hadoop이라는 실시간 SQL질의 분석 기술이다. 이 기술은 하둡상에 저장된 대용량 데이터를 대화형식의 SQL 질의를 통해서 처리하고 분석하며, 가장 많이 회자되고 있는 기술인 임팔라를 살펴 보고 한다.

가. 임팔라 개요
SQL on Hadoop 기술 중 먼저 대중에게 공개된 기술이 임팔라다. 임팔라를 제작한 클라우데라(Cloudera)는 드레멀(Dremel)의 논문 [Interactive Analysis of Web-Scale Datasets]을 읽은 후 하둡 상에서 실시간, 애드혹(ad-hoc) 질의가 가능할 것 같다는 기술적 영감을 얻어서 개발을 시작했다. 이후 2012년 10월에 시험(Proof of Concept)버전을 공개했으며, 2013년 5월에 정식 버젼(1.0)을 배포했다. 임팔라는 분석과 트랜잭션 처리를 모두 지원하는 것을 목표로 만들어진 SQL 질의 엔진이다. 하둡과 Hbase에 저장된 데이터를 대상으로 SQL 질의를 할 수 있다. 고성능르 낼 수 있도록 자바 대신 C++언어를 이용하였으며, 맵리듀스를 사용하지 않고 실행 중에 최적화된 코드를 생성해 데이터를 처리한다.

나. 임팔라 동작 방식
모든 노드에 임팔라 데몬이 구종되며, 사용자는 이 데몬들이 구동된 임의의 노드에 JDBC나 ODBC 또는 임팔라셀을 이용하여 질의를 요청할 수 있다. 그러면 사용자의 질의는 데이터의 지역성을 고려해서 노드 전체로 분산되어서 수행된다. 하둡에서 잡트랙커(JobTracker)가 데이터 지역을 고려해서 태스크를 데스크트랙커(TaskTracker)에게 할당하는 것과 유사한 방식이다. 사용자의질의 요청을 받은 받은 코디네이터 데몬은 분사되어 수행된 각 임팔라 노드들의 부분 결과들을 취합하여 결과 값을 만들어서 사용자에게 제공한다.
실제 운영 환경에서는 라운드로빈 방식으로 사용자 질의를 분산시켜서 전 노드들이 질의에 대해 코디네이터 역할을 고르게 수행할 수 있도록 해야 한다.

다. 임팔라의 SQL 구문
임팔라는 기본적으로 하이브의 SQL을 이용한다. 하지만 임팔라가 모든 하이브  SQL문을 지원하느 것은 아니기 때문에 어떤 구문이 지원File을 사용할 경우, 데이터 처리 과정에서 발생하는 디스크 입출력 양을 현저하게 줄일 수 있다. 로우 단위로 저장 시, 테이블에서 하나의 컬럼을 읽든 저체 테이블을 읽든 동일한 디스크 입출력이 발생한다. 반면 컬럼 단위의 저장 포맷을 사용하면, 읽고자하는 컬럼만큼의 디스크 입출력이 발생하기 때문에 처리 성능을 개선할 수 있다. 물론 전체 컬럼들을 모두 조회하는 질의는 저장 포맷에 의해 성능이 영향을 받지 않는다.

댓글 없음: