Data Engineering

SQL on Hadoop

http://www.dbguide.net/db.db?cmd=view&boardUid=187343&boardConfigUid=9&categoryUid=216&boardIdx=159&boardStep=1

폴트톨러런스

분산 처리시스템은 예전 메인프레임에 비해 상대적으로 낮은 성능을 가진 서버 여러 대를 모아서 처리하는 것을 의미한다. 그러다 보니 네트워크 설정이 복잡해지고 디스크도 여러 개를 사용해 장애가 발생할 확률이 높아진다. 또한 애플리케이션도 더 복잡해져서 작업도중 실패하는 경우도 있다.

맵리듀스에서는 분산 처리하는 작업들 중에 일부가 실패하더라도 처음부터 작업할 필요 없이 오류가 발생한 태스크나 장애가 발생한 서버에 할당된 태스크만 다시 시작해 작업을 마칠 수 있도록 구현됐다. 이것을 폴트톨러런스라고 한다. 그런데 폴트톨러런스가 가능하기 위해서는 중간에 데이터를 어딘가에 저장해 놓아야 하는데 대부분 하드디스크를 이용하기 때문에 하드디스크에서 성능 저하가 현상이 발생한다. 이러한 이유 때문에 폴트톨러런스 기능은 스루풋과 트레이드오프 관계를 가진다. 오류가 발생할 가능성이 낮고 처리할 데이터가 적을 때, 폴트톨러런스 기능을 사용하지 않으면 중간 데이터 기록을 하지 않아도 되므로 빠른 응답속도를 기대할 수 있다. 그러나 데이터가 큰 경우에 폴트톨러런스 기능이 없으면 오류가 발생했을 때 처음부터 다시 작업을 해야 하므로 작업 소요시간이 더 길어질 수 있다.

따라서 각각의 오픈소스가 추구하는 목표에 따라 폴트톨러런스 기능 도입 여부를 달리하고 있다. 예를 들어 하이브나 타조, 샤크의 경우 데이터가 큰 작업(Long Time Query)을 지원하기 위해 폴트톨러런스 기능을 제공하고 있고, 임팔라는 빠른 응답속도가 가능하지만 폴트톨러런스 측면에서 상대적으로 취약하다. 지원 여부는 솔루션들의 장단점이라기보다는 사용 목적에 따른 선택을 하기 위한 특징 중 하나다.

다이내믹 스케줄링

분산환경에서 큰 데이터를 처리하기 위해서는 폴트톨러런스 뿐만 아니라 다이내믹 스케줄링(Dynamic Scheduling) 기능 또한 중요하다. 다이내믹 스케줄링은 고정 스케줄링(Fixed Scheduling)과 반대되는 의미로, 각 노드에서 한 번에 실행할 수 있는 태스크를 할당 받고 해당 태스크가 완료되면, 다시 태스크를 할당 받는 것을 의미한다. 고정 스케줄링은 작업이 시작될 때, 각각 균등하게 분할하므로 훨씬 간결하지만, 특정 노드에서 작업 시간이 더 걸릴 수도 있다. 하이브, 타조, 샤크(Shark)는 다이내믹 스케줄링을 지원하고, 임팔라는 고정 스케줄링을 지원한다.

인메모리 지원여부

데이터 처리에 있어서 병목 현상이 발생하기 쉬운 지점이 하드디스크다. 그런데 HDFS의 모든 데이터는 하드디스크에 저장돼 있으므로 SQL-On-Hadoop들은 최대한 불필요한 쓰기/읽기를 지양한다. 그리고 거기에서 한발 더 나아가서 전부 혹은 일부 데이터를 메인 메모리에 올려서 고속 처리가 가능하도록 만든 오픈소스들도 있다.

하이브와 타조는 메모리를 사용하지만, 상대적으로 하드디스크 위주로 사용하면서 가능한 불필요한 쓰기/읽기를 피하도록 설계됐다. 임팔라는 하드디스크도 사용하지만, 상당수의 데이터를 메모리에 올려서 고속 처리를 한다. 그러므로 다른 오픈소스보다 빠른 응답 속도를 기대할 수 있지만, 큰 데이터를 처리할 경우 Out of Memory(OOM)가 발생하는 경우가 많다. 또한 엄밀히 말해서 메모리를 스토리지로 사용하는 것도 아니다. 샤크는 캐시 기능을 제공해서 빈번히 사용되는 데이터는 캐싱을 통해 미리 메모리에 전부 올릴 수 있다. 이 경우 수 배에서 수십 배 빠르게 조회가 가능하며, 설정에 따라서 데이터의 일부만 혹은 전부를 캐싱할 수도 있다. 물론 디스크에만 저장해 처리하는 것도 가능하다.

구현 언어

하이브와 타조(Tajo)는 자바, 임팔라는 C++, 샤크는 스칼라(Scala)로 구현됐다. 모두가 하나의 언어로 구현된 것은 아니다. 여러 가지 언어가 같이 쓰이지만, 50퍼센트 이상 사용된 언어를 기준으로 한 것이다. 자바는 가장 많이 사용되는 언어이고 상대적으로 쉬우므로 오픈소스의 최대 장점인 코드를 통해 내부 로직을 이해하고 필요 시 코드를 수정할 수 있다는 측면에서 유리하다. C++은 임팔라에서 속도를 위해서 선택한 언어다. 자바 다음으로 범용적으로 사용되고 있고, 자바에 비해서 훨씬 빠른 속도로 작동할 수 있다. 스칼라는 최근에 해외에서 각광 받는 언어 중 하나다. 함수형 언어의 특징과 객체지향 언어의 특징을 모두 갖고 있다. 또한 자바의 자바 가상 머신에서 실행할 수 있으며, 자바 API를 약간 수정해 사용할 수도 있다.

속도

처리 속도는 논쟁이 많은 부분이다. 각 오픈소스를 주도하는 단체 혹은 업체에서 각자의 장점을 부각하는 테스트를 많이 하기 때문이다. 또한 설정 방법이나 쿼리 종류에 따라서도 결과가 다르게 나오기 때문에 명확히 어떤 것이 좋다고 말하기는 어렵다. 물론 TPC 벤치마크와 같이 어느 정도 공인된 테스트 방법이 있지만, 이것 또한 명확히 판단하기에는 무리가 있다. 아래와 같이 테스트 환경이나 방법, 버전 등이 조금씩 다르고 성능 측정 결과도 다르게 나타난 공개 자료를 볼 수 있다.

https://excelsior-cjh.tistory.com/59

Long Time Query 지원 여부는 해당 시스템이 데이터 웨어하우스 인프라스트럭처(Data Warehouse Infrastructure)에 적합한 시스템인지, 아니면 빠른 쿼리만을 처리하기 위한 분산 쿼리 엔진(Distributed Query Engine)인지를 결정한다.

Data Warehouse Infrastructure

수 시간 이상 걸리는 쿼리 수행 가능

ETL 작업: 데이터 변환 및 노이즈 제거, 파티셔닝

다수 데이터 소스에 대한 통합

애드혹 질의(Ad-hoc Query)

타조(Tajo), 하이브(Hive)

Distributed Query Engine

수 초에서 수 분 까지 걸리는 쿼리를 수행하는 데 최적화

빠른 응답을 가지는 애드혹 질의

중간 데이터 크기와 지원에 따라 질의가 다소 제약됨

임팔라(Impala), 프레스토(Presto)


Enter your comment:
Y P V E R