더북(TheBook)

예를 들어 관계형 데이터베이스에 저장된 사용자 프로파일 데이터와 HDFS에 Parquet 파일 형식으로 저장한 사용자 행동 로그 데이터를 조인하는 상황을 가정해 보자(Parquet는 데이터와 스키마 정보를 함께 저장하는 칼럼형(columnar) 파일 포맷이다). 먼저 스파크 SQL을 사용해 두 데이터 소스를 각각 DataFrame으로 로드한다. DataFrame이 준비되면 이 두 데이터를 조인하고, 다양한 질의를 수행한 후 그 결과를 다시 제3의 위치에 저장할 수 있다.

또 스파크 SQL에서는 DataFrame을 테이블 카탈로그의 테이블로 등록할 수 있다. 테이블 카탈로그는 데이터 자체를 저장하지 않는 대신 정형 데이터로 접근하는 방법만 저장한다. DataFrame을 테이블 카탈로그에 등록하면 다른 스파크 애플리케이션에서도 DataFrame 이름을 이용해 이 데이터에 질의를 수행할 수 있다. 더욱 흥미로운 점은 스파크 외부의 써드-파티 애플리케이션에서도 표준 JDBC 및 ODBC 프로토콜로 스파크에 접속한 후, 등록된 DataFrame 테이블의 데이터에 SQL 쿼리를 수행할 수 있다는 것이다. 스파크 쓰리프트 서버는 이러한 원격 쿼리 기능을 지원하는 스파크 컴포넌트로, JDBC 클라이언트가 요청한 쿼리를 DataFrame API를 이용해 스파크 잡 형태로 실행한다.

그림 5-1은 지금까지 설명한 내용을 도식화한 것이다. 그림 아래쪽에는 두 가지 유형의 클라이언트가 있다. 왼쪽 첫 번째 클라이언트는 DataFrame DSL을 사용해 두 테이블을 조인하는 스파크 애플리케이션이다. 오른쪽 클라이언트는 JDBC를 사용해 스파크 쓰리프트 서버로 연결하고 SQL 쿼리를 실행하는 비-스파크 애플리케이션이다. SQL 쿼리를 사용해 첫 번째 클라이언트와 동일한 조인 연산을 실행한다. 첫 번째 스파크 애플리케이션은 5.1절에서, JDBC는 5.3절에서 각각 설명한다. 그림 5-1에서 위쪽 테이블 카탈로그는 스파크 컨텍스트를 종료해도 계속 유지되는 영구적인(permanent) 메타데이터 저장소다. 이는 하이브(Hive) 지원 기능이 포함된 스파크에서만 사용할 수 있다. 하이브는 하둡의 맵리듀스를 한 단계 더 추상화한 분산 웨어하우스 시스템이다. 페이스북에서 최초로 개발한 이후로 오늘날까지 데이터 질의 및 분석 작업에 널리 사용한다. 하이브는 SQL과 유사한 HiveQL이라는 독자적인 쿼리 언어를 사용한다. HiveQL 쿼리 작업은 맵리듀스 잡뿐만 아니라 스파크 잡으로도 실행할 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.