SlideShare a Scribd company logo
1 of 62
Download to read offline
Research Cloudera
Impala 1.0
May 14th 2013
김민우 (Minwoo Kim)
michael.kim@nexr.com
1
Introduction of Impala
• Google Dremel, VLDB 2010
• 전통적인 MapReduce 배치 처리를 보완하고 Hadoop에
서 Real time ad-hoc query를 가능하게 할 기술적인 비
전에 대한 영감을 얻음
2
Dremel System
• 레코드 1조 개
• 수 테라바이트 데이터셋에서 인터렉티브 스피드
- 수천대 노드 스케일
- 장애 및 낙오자(straggler) 방지 실행
• 중첩 데이터 모델
- 복합 데이터셋 - 정규화가 금지됨
- 컬럼기반 저장 및 처리
• 트리 아키텍처
• 구글 데이터 관리 도구로 상호 운영
- In situ (= in place) 데이터 접근 (e.g GFS, Bigtable)
- 맵리듀스 파이프라인
Dremel: Interactive Analysis of Web-Scale Datasets. VLDB'10
3
Key Aspects of Dremel
• 중첩 데이터 컬럼기반 저장 포맷
- 어떻게하면 빠르게 중첩 데이터를 컬럼 별로 직렬화/역직렬화 할 것
인가?
- Repetition / Definition level 을 정의
- 각 컬럼의 Repetition & Definition level 구하여 값과 함께 저장
- 역직렬화시 위에 level 값으로 FSM를 태워 역직렬화
• SQL & Multi-level serving Tree
- 쿼리를 완전 병렬화 시켜서 트리의 리프 노드에서 루트 노드로 중간
결과를 스트리밍함
- Aggregation만 논문에서 언급됨
Dremel: Interactive Analysis of Web-Scale Datasets. VLDB'10
4
Records vs. columns
더 적게 읽고
더 빨리
압축을 푼다
Dremel: Interactive Analysis of Web-Scale Datasets. VLDB'10
5
Nested data model
message Document {
required int64 DocId; [1,1]
optional group Links {
repeated int64 Backward; [0,*]
repeated int64 Forward;
}
repeated group Name {
repeated group Language {
required string Code;
optional string Country; [0,1]
}
optional string Url;
}
}
DocId: 10
Links
Forward: 20
Forward: 40
Forward: 60
Name
Language
Code: 'en-us'
Country: 'us'
Language
Code: 'en'
Url: 'http://A'
Name
Url: 'http://B'
Name
Language
Code: 'en-gb'
Country: 'gb'
DocId: 20
Links
Backward: 10
Backward: 30
Forward: 80
Name
Url: 'http://C'
multiplicity:
Dremel: Interactive Analysis of Web-Scale Datasets. VLDB'10
6
Repetition and
definition levels
DocId: 10
Links
Forward: 20
Forward: 40
Forward: 60
Name
Language
Code: 'en-us'
Country: 'us'
Language
Code: 'en'
Url: 'http://A'
Name
Url: 'http://B'
Name
Language
Code: 'en-gb'
Country: 'gb'
r1
DocId: 20
Links
Backward: 10
Backward: 30
Forward: 80
Name
Url: 'http://C'
r2
value r d
en-us 0 2
en 2 2
NULL 1 1
en-gb 1 2
NULL 0 1
Name.Language.Code
r: At what repeated field in the field's path
the value has repeated
d: How many fields in paths that could be
undefined (opt. or rep.) are actually present
레벨 0 은 새 래코드의 시작
을 나타냄
Dremel: Interactive Analysis of Web-Scale Datasets. VLDB'10
7
Column-striped representation
value r d
10 0 0
20 0 0
DocId
value r d
http://A 0 2
http://B 1 2
NULL 1 1
http://C 0 2
Name.Url
value r d
en-us 0 2
en 2 2
NULL 1 1
en-gb 1 2
NULL 0 1
Name.Language.Code Name.Language.Country
Links.BackwardLinks.Forward
value r d
us 0 3
NULL 2 2
NULL 1 1
gb 1 3
NULL 0 1
value r d
20 0 2
40 1 2
60 1 2
80 0 2
value r d
NULL 0 1
10 0 2
30 1 2
Dremel: Interactive Analysis of Web-Scale Datasets. VLDB'10
8
Record assembly FSM
Name.Language.CountryName.Language.Code
Links.Backward Links.Forward
Name.Url
DocId
1
0
1
0
0,1,2
2
0,11
0
0
레코드 기반 데이터 처리를 위해서 (e.g. MapReduce)
repetition level 을
가지고 변환
Dremel: Interactive Analysis of Web-Scale Datasets. VLDB'10
9
Reading two fields
DocId
Name.Language.Country1,2
0
0
DocId: 10
Name
Language
Country: 'us'
Language
Name
Name
Language
Country: 'gb'
s1
DocId: 20
Name
s2
• 부모 필드의 구조가 보존됨
• Name[3] / Language[1] / Country 와 같은 쿼리가 유용하다
Dremel: Interactive Analysis of Web-Scale Datasets. VLDB'10
10
Query Processing
• select-project-aggregate에 최적화됨
–단일 스캔
–레코드 안에서 aggregation
–레코드 사이 aggregation
• 조인, 임시 테이블, UDFs/TVFs 등
- 논문에서 언급 안됨
Dremel: Interactive Analysis of Web-Scale Datasets. VLDB'10
11
Multi-level Serving tree
storage layer (e.g., GFS)
. . .
. . .
. . .
리프 서버
(로컬 저장소
를 가짐)
중간 서버들
루트 서버
client
. . .
. . .
쿼리 실행 트리
Dremel: Interactive Analysis of Web-Scale Datasets. VLDB'10
12
Example: count()
SELECT A, COUNT(B) FROM T
GROUP BY A
T = {/gfs/1, /gfs/2, …, /gfs/100000}
SELECT A, SUM(c)
FROM (R11 UNION ALL R110)
GROUP BY A
SELECT A, COUNT(B) AS c
FROM T11 GROUP BY A
T11 = {/gfs/1, …, /gfs/10000}
SELECT A, COUNT(B) AS c
FROM T12 GROUP BY A
T12 = {/gfs/10001, …, /gfs/20000}
SELECT A, COUNT(B) AS c
FROM T31 GROUP BY A
T31 = {/gfs/1}
. . .
0
1
3
R11 R12
Data access ops
. . .
. . .
Dremel: Interactive Analysis of Web-Scale Datasets. VLDB'10
13
Experiments
execution time (sec) on 3000 nodes
execution time (sec)
number of
leaf servers
Impact of serving tree depth
MR and Dremel execution
Scalability
execution time (sec)
percentage of queries
Most queries complete under 10 sec
Interactive speed
execution time (sec)
Dremel: Interactive Analysis of Web-Scale Datasets. VLDB'10
14
Impala Release
• 릴리즈
- 1.0 -  30/Apr/13
- 0.7 - 15/Apr/13
- 0.6 - 26/Feb/13
- 0.5 - 04/Feb/13
- 0.4 - 20/Jan/13
- 0.3 - 04/Dec/12
- 0.2 - 13/Nov/12
- 0.1 - 24/Oct/12
• 한달 단위로 릴리즈
15
Development
• C++ 로 개발 (기타 shell script + python)
• 임팔라 유저 그룹스
• https://groups.google.com/a/cloudera.org/forum/?fromgroups#!forum/impala-user
• 지라
• https://issues.cloudera.org/browse/IMPALA
• github
• https://github.com/cloudera/impala
• 유저 메일링만 있고 개발자 메일링이 없음
• 사실상 소스만 공개되어 있는 클라우데라 내부 프로젝트라고 볼 수 있음
• 개발인원 - 약 10명
• 리더 : Marcel Kornacker (전 google)
16
System Requirement
• OS
- RHEL 5.7 / 6.2
- Centos 5.7 / 6.2
- SLES 11 서비스팩 1 +
- Ubuntu 10.04 / 12.04
- Debian 6.03
• CHD 4.1 이상
• Hive
• MySQL, PostgreSQL for 하이브 메타스토어
17
Impala Benefits
• 친숙한 SQL 인터페이스 제공
• 하둡에 위에 빅 데이터에 인터렉티브한 질의 가능
• 데이터 처리를 하나의 시스템에서 처리해서 모델
링이나 ETL 을 피할 수 있다
18
Impala Overview : Goals
• 다목적의 SQL 쿼리 엔진
- 분석적이고 트랜잭션한 작업부하를 모두 처리해야 한다
- 수 마이크로초에서 수 시간정도 걸리는 쿼리들을 지원
• 하둡안에서 직접 실행한다
- 하둡 파일 포맷을 사용하여 읽음
- 하둡 스토리지 매니저를 사용
- 하둡 프로세스를 띄우는 같은 노드에서 실행됨
• 고성능
- JAVA 대신 C++
- Select, Projection, Join, Union, 서브쿼리
- 맵리듀스 위에 올라가지 않는 완전 새로운 실행 엔진
19
User view of Impala : Overview
• 클러스터 안에서 분산 서비스로 실행된다 : 각각 노드에 하나의 임팔
라 데몬이 뜬다
• JDBC, ODBC, Hue Beeswax, Impala CLI를 통해서 쿼리를 제출한다
• 쿼리는 적절한 데이터와 함께 모든 노드에 분산된다
• 노드가 실패하면 쿼리는 실패한다
• 임팔라는 하이브의 메타데이터 인터페이스를 사용하고 메타스토어와
연결한다.
• 지원되는 파일 포멧
- Text File, Sequence File, RCFile,Avro file, Parquet
• 압축 코덱
- Snappy, GZIP, Deflate, BZIP
• Kerberos 인증
20
Impala Architecture
JDBC /
ODBC Client
Hue
Hive Metastore
Impala
HDFS HBase
Impala
CLI
imapald
statestored
Impala
HDFS HBase
imapald
statestored
Impala
HDFS HBase
imapald
statestored
21
Impala Architecture
• Client
- HUE, ODBC, JDBC, Impala Shell
• Hive Metastore
- Impala가 이용하는 정보를 저장
- 예, 어떤 데이터 베이스가 사용가능한지 임팔라에게 알려줌
• Impala (impalad + statestored)
- 데이터노드 위에서 실행되는 프로세서
- 쿼리를 실행하고 조정(coordinate)한다
- Client로 부터의 쿼리를 받고, 실행을 계획하고, 조정한다
• HBase와 HDFS
- 데이터를 저장
22
Impala Architecture
• 2 개의 바이너리 : impalad와 statestored
• 임팔라 데몬 (impalad)
- 쿼리 실행과 관련된 클라이언트 요청과 모든 내부
요청을 다룬다
- 이 두가지 역할을 Thrift Service로 제공
• 상태 저장 데몬 (statestored)
- 네임 서비스 제공과 메타데이터 분배
- Thrift Service로 제공
23
Impala Architecture
• 쿼리 실행 단계
- ODBC/JDBC를 통해서 Request 도착
- Planner가 Request를 Plan 쿼리 오퍼레이터 트리
로 변환
- Coordinator가 원격 impalad의 실행 초기화 시킴
• 실행 중
- 중간 결과는 Executor사이에 스트리밍 된다
- 쿼리 최종 결과는 Client로 스트리밍 된다
24
Query Planning
• 2 단계 플래닝 처리
- 단일 노드 플랜 : Left-deep tree plan
- 병렬 실행을 위해서 오퍼레이터 트리를 분할한다
• 플랜 오퍼레이터들의 병렬화
- 모든 쿼리 오퍼레이터들은 완전히 분산됨
- 조인 : broadcast와 partitioned가 있고 cost based로 결정됨
- aggregation : fully parallel pre-aggregation과 merge aggregation
- top-n : 최초 스테이지에서 병렬로 처리됨
• 조인 순서 = FROM 절 순서 (cost-based로 변경 예정)
25
Query Planning : Example
• 플랜 오퍼레이터들:
- Scan, HashJoin, HashAggregation, Union,TopN, Exchange
• 예제 쿼리
SELECT t1.custid, SUM(t2.revenue) AS revenue
FROM LargeHdfsTable t1
JOIN LargeHdfsTable t2 ON (t1.id1 = t2.id)
JOIN SmallHbaseTable t3 ON (t1.id2 = t3.id)
WHERE t3.category = 'Online'
GROUP BY t1.custid
ORDER BY revenue DESC LIMIT 10
26
Query Planning : Example
• 단일 노드 플랜:
SELECT t1.custid, SUM(t2.revenue) AS revenue
FROM LargeHdfsTable t1
JOIN LargeHdfsTable t2 ON (t1.id1 = t2.id)
JOIN SmallHbaseTable t3 ON (t1.id2 = t3.id)
WHERE t3.category = 'Online'
GROUP BY t1.custid
ORDER BY revenue DESC LIMIT 10
Query Planning: Example
•  Single-node plan:
27
Query Planning : Distributed Plans
• 목표:
- 지역(locality) 스캔을 극대화, 데이터 이동을 최소화
- 쿼리 오퍼레이터들을 완전 분배
• 병렬 조인
- broadcast join :
• 오른쪽 테이블은 조인을 수행하는 각 노드에 broadcast된다
• 오른쪽 테이블이 작을 경우에 선호된다.
- partitioned join
• 두 테이블 모두 조인 컬럼들로 hash-partitioned 된다
• 큰 테이블 조인시 선호된다
- 예측된 데이터 전송 비용과 컬럼 통계기반으로 cost-based 결정을 내린다.
28
Query Planning : Distributed Plans
• 병렬 집계
- 데이터가 처음 물리화된 곳에서 pre-aggregation
- merge aggregation은 그루핑 컬럼들로 나누어진다
• 병렬 top-N
- 데이터가 처음 물리화된 곳에서 최초 top-N
- 단일 노드 플랜 조각에서 마지막 top-N
29
Query Planning: Distributed PlansQuery Planning: Distributed Plans
30
Impala Architecture: Query Execution
• ODBC/JDBC를 통해서 Request 도착
Impala Architecture: Query Execution
•  Request arrives via ODBC/JDBC
Query Planner
Query Coordinator
Query Executor
HDFS DN HBase
SQL App
ODBC
Hive
Metastore
HDFS NN Statestore
Query Planner
Query Coordinator
Query Executor
HDFS DN HBase
Query Planner
Query Coordinator
Query Executor
HDFS DN HBase
SQL request
31
Impala Architecture: Query Execution
• Planner가 Request를 쿼리 연산자 트리 변환
• Coordinator가 원격 impalad의 실행 초기화
Impala Architecture: Query Execution
•  Planner turns request into collections of plan fragments
•  Coordinator initiates execution on remote impalad's
Query Planner
Query Coordinator
Query Executor
HDFS DN HBase
SQL App
ODBC
Query Planner
Query Coordinator
Query Executor
HDFS DN HBase
Query Planner
Query Coordinator
Query Executor
HDFS DN HBase
Hive
Metastore
HDFS NN Statestore
32
Impala Architecture: Query Execution
• 중간 결과는 Executor사이에 스트리밍 된다
• 쿼리 최종 결과는 Client로 스트리밍 된다.
Impala Architecture: Query Execution
•  Intermediate results are streamed between impalad’s
•  Query results are streamed back to client
Query Planner
Query Coordinator
Query Executor
HDFS DN HBase
SQL App
ODBC
Hive
Metastore
HDFS NN Statestore
Query Planner
Query Coordinator
Query Executor
HDFS DN HBase
Query Planner
Query Coordinator
Query Executor
HDFS DN HBase
query
results
33
Metadata Handling
• Hive 메타스토어를 이용함
• 메타데이터를 캐시함 : 쿼리 실행 도중에
synchronous 메타스토어 API 호출은 없다
• statestored가 메타데이터를 분배한다
34
Supported Data Type
• Hive 데이터 원시타입과 동일한 이름과 시멘틱으로 지원
- tinyint, smallint, int, bigint, float, double, boolean, string,
timestamp
• 복합 데이터 타입은 지원하지 않는다
- struct, map, array
35
Language Reference
• Impala CREATE TABLE 커맨드, Hive DDL를 사용
한 테이블 생성
• HiveQL과 비슷한 DML 지원
• HiveQL과 동일한 파라메터와 이름의 내장 함
수들을 지원
• JOIN,AGGREGATE, DISTINCT, UNION ALL,
ORDER BY, LIMIT, 서브쿼리
• INSERT INTO, INSERT OVERWRITE
36
ALTER TABLE
• 테이블 이름 바꾸기
- ALTER TABLE old_name RENAME TO new_name;
• 테이블 데이터 파일의 물리적인 위치 바꾸기
- ALTER TABLE table_name SET LOCATION ‘hdfs_path_of_directory’;
• 테이블 컬럼 재배치
- ALTER TABLE table_name ADD COLUMNS (column_defs);
- ALTER TABLE table_name REPLACE COLUMNS(column_defs);
- ALTER TABLE table_name CHANGE column_name new_name new_spec;
- ALTER TABLE table_name DROP column_name;
• 파일 포맷 변경
- ALTER TABLE table_name SET FILEFORMAT { PARQUETFILE | RCFILE |
SEQUENCEFILE | TEXTFILE }
• 파티션 추가 삭제
- ALTER TABLE part_table ADD PARTITION (month=concat(‘Decem’,‘ber’));
- ALTER TABLE part_table DROP PARTITION (month=‘January’);
37
CREATE DATABASE / TABLE
• HDFS 디렉토리가 존재하지 않으면 생성한다
• 데이터베이스 생성 후 impala-shell 세션에서 기본 데이
터베이스로 지정하기 위해서는 USE 구문을 사용한다
데이터 베이스 생성
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
[COMMENT 'database_comment'] [LOCATION hdfs_path];
38
CREATE TABLE [LIKE]
테이블 생성 문법
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
[(col_name data_type [COMMENT 'col_comment'], ...)]
[COMMENT 'table_comment']
[PARTITIONED BY (col_name data_type [COMMENT 'col_comment'], ...)]
[ [ROW FORMAT row_format] [STORED AS file_format] ]
[LOCATION 'hdfs_path']
data_type : primitive_type
primitive_type :
TINYINT | SMALLINT | INT | BIGINT | BOOLEAN | FLOAT | DOUBLE | STRING | TIMESTAMP
row_format : DELIMITED [FIELDS TERMINATED BY 'char'] [LINES TERMINATED BY 'char']
file_format : PARQUETFILE | SEQUENCEFILE | TEXTFILE | RCFILE
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
LIKE [db_name.]table_name [COMMENT 'table_comment']
[STORED AS file_format] [LOCATION 'hdfs_path']
39
DISTINCT Clause
• 같은 쿼리에서 하나 이상의 DISTINCT 사용은 지원하지 않는다
DISTINCT 예제
-- Returns the unique values from one column.
SELECT DISTINCT c_birth_country FROM customer;
-- Returns the unique combinations of values from multiple columns.
SELECT DISTINCT c_salutation, c_last_name FROM customer;
다음은 지원하지 않음
SELECT COUNT(DISTINCT c_first_name) and COUNT(DISTINCT c_last_name) FROM customer;
40
DROP DATABASE / TABLE
• 기본적으로 Impala는 연관된 HDFS 디렉토리를 삭제한다
• 테이블이 EXTERNAL 절과 함께 생성되었다면 디렉토리는 삭제하지
않는다
데이터베이스 삭제
DROP (DATABASE|SCHEMA) [IF EXISTS] database_name;
테이블 삭제
DROP TABLE [IF EXISTS] table_name
41
GROUP BY
• 지원되는 함수는
• COUNT(), SUM(),AVG(), MIN(), MAX() 이다.
예제
SELECT
ss_item_sk as Item,
count(ss_item_sk) as Times_Purchased,
sum(ss_quantity) as Total_Quantity_Purchased
FROM store_sales
GROUP BY ss_item_sk
ORDER BY sum(ss_quantity) desc
LIMIT 5;
+--------+----------------------+--------------------------------+
| item | times_purchased | total_quantity_purchased |
+--------+----------------------+--------------------------------+
| 9325 | 372 | 19072 |
| 4279 | 357 | 18501 |
| 7507 | 371 | 18475 |
| 5953 | 369 | 18451 |
| 16753 | 375 | 18446 |
+--------+----------------------+--------------------------------+
42
조인 예제
[localhost:21000] > SELECT c_last_name, ca_city FROM customer, customer_address WHERE
c_customer_sk = ca_address_sk LIMIT 10;
+----------------+-------------------+
| c_last_name | ca_city |
+----------------+-------------------+
| Lewis | Fairfield |
| Moses | Fairview |
| Hamilton | PleasantValley |
| White | Oak Ridge |
| Moran | Glendale |
| Sharp | Lakeview |
| Wiles | Farmington |
| Shipman | Union |
| Gilbert | New Hope |
| Brunson | Martinsville |
+----------------+-------------------+
Returned 10 row(s) in 0.63s
JOIN
43
JOIN
• partitioned join
- 두 테이블 모두 해시 알고리즘을 이용해서 로우의 서브셋을 다른 노드
들에게 보낸다
- 테이블의 인덱스 통계정보를 알 수 없다면 broadcast join으로 처리된다
• broadcast join
- 오른쪽 테이블의 전체 내용을 조인을 처리에 관련된 모든 노드들에게
보내는 방식
- 인덱스나 통계정보를 알 수 없을 때 기본값으로 사용됨
• 조인 순서가 Impala 성능에 영향을 미친다.
- 가장 좋은 방법은 오른쪽에서 부터 큰 테이블 순서로 조인하는 것이다
- cost-based로 바뀔 예정
44
INSERT
• 다음 두가지 INSERT를지원한다.
- INSERT INTO
- INSERT OVERWRITE
• 현재 Impala는 오직 Text와 Parquet 포맷을 사용하
는 테이블에만 삽입을 할 수 있다
• 다른 포맷들은 하이브를 사용해서 데이터를 삽입
하고 Impala로 쿼리를 실행한다
45
LIMIT, ORDER BY
• LIMIT
- 결과셋의 로우 수를 제한
- Top-N 쿼리시 사용
- 특정 쿼리의 샘플 결과 확인 시 사용 (LIMIT절을
사용하면 성능이 대폭 향상 된다)
• ORDER BY
- 최종 결과 로우들의 순서를 보장
- LIMIT 절과 같이 써야 성능을 높일 수 있다
46
REFRESH
• Impala에만 있는 구문
• Impala가 쿼리에 신속하게 응답하기 위해서는 데이터베
이스와 테이블에 대한 메타데이터를 가지고 있어야 한다
• Hive와 Impala가 공유하는 메타스토어에서 Impala가 사용
하는 정보를 수정한다면, Impala는 캐시된 정보가 업데이
트 되어야 한다.
• 모든 메타데이터를 업데이트 시킨다
문법
REFRESH [table_name]
47
Unsupported Language Elements
• ALTER DDL 요소
• 권한 (Authorization) 관련 요소들
• 복합 데이터 타입 maps, arrays, structs.
• LOAD DATA (로컬에서 데이터 로드)
• TRANSFORM, 커스텀 파일 포맷, 커스텀 SerDe
• XML, JSON 함수
• UDF, UDTF
• 샘플링
• LateralView
• 쿼리에 다중 DISTINCT 절
48
• SHOW PARTITIONS.
• SHOW TABLE EXTENDED.
• SHOW TBLPROPERTIES.
• SHOW FUNCTIONS.
• SHOW INDEXES.
• SHOW COLUMNS.
• SHOW CREATE TABLE.
• DESCRIBE DATABASE.
• DESCRIBE COLUMN
• IMPORT TABLE and EXPORT TABLE.
• ANALYZE TABLE.
Unsupported Language Elements
49
Impala does not
• MapJoin, StreamJoin 힌트 지원하지 않음
• SORT BY, DISTRIBUTED BY, CLUSTER BY
• 가상 컬럼 지원하지 않음
• Lock 지원하지 않음
• 설정 프로퍼티 노출하지 않음
• 컬럼이 오버플로우 되었을 때 NULL을 반환하지 않
고 타입의 범위의 최소 또는 최대 값을 반환한다
• local 타임존으로 Timestamp를 저장하지 않고 GMT로
저장된다
50
Understanding File Formats
File Type Format Compression Codes
Impala Can
CREATE ?
Impala Can
INSERT?
Parquet Structured
Snappy, GZIP, deflate, BZIP2;
Snappy이 기본값
Yes
Yes :
CREAT TABLE
INSERT, and query
Text Unstructured LZO Yes (... )
Avro Structured Snappy, GZIP, deflate, BZIP2
No, create
using Hive
No, query only
RCFILE Structured Snappy, GZIP, deflate, BZIP2 Yes No, query only
SequenceFile Structured Snappy, GZIP, deflate, BZIP2 Yes No, query only
51
Parquet File Format
• 새로운 컬럼기반 파일 포맷
• 더그 커팅의 Trevni를 계승함
• 클라우데라와 트위터에서 공동 개발
• 구글 Dremel definition/repetition level 기반
• 중첩 구조와 sparse한 데이타
• 컬럼 별 인코딩을 위한 확장성을 지원
(e.g. indexes, bloom filters, statistics)
• Trevni 보다 더 빠른 메타데이타 쓰기 성능
52
HDFS Improvements
• HDFS 개선점 4가지
1. 개별 블록 레플리카 디스크 위치 정보를 표시
• 중복 읽기를 하지 않기 위해서 레플리카의 위치를 알아야 함
• 네임노드밖에 레플리카의 위치를 알지 못함
• 새로운 RPC콜을 통해 어떤 데이터 노드에 블록 레플리카가
있는지 정의하고 임팔라가 데이터 노드에 쿼리해 어느 디스
크에 있는지 알게함
2. 특정 파일 블록 레플리카를 같은 데이터 노드에 위치시키게 만듬
• 모든 읽기는 로컬에서 읽는 게 이상적
• 특정 파일의 레플리카는 같은 노드에 위치 시켜 로컬 읽기를
유도함
53
HDFS Improvements
3. 자주 쓰는 테이블과 파일을 인메모리에 캐싱
• 디스크 OS의 버퍼 캐시를 사용하는 것보다 임팔라 인메모리 성
능을 활용할 때 훨씬 빨라졌기 때문에 HDFS에 인메모리캐싱
기능을 추가해 관리자가 HDFS 파일이나 하이브 테이블을 메인
메모리에서 읽고 저장하게 함
4. HDFS 읽기 작업시 거치는 복제 과정을 줄임
• 기존 : 로컬 -> 메모리 -> 버퍼 -> 커널 -> 네트웍 -> 클라이언트
• 임팔라 데몬이 데이터 노드를 우회해 CPU가 직접 읽게 함
• HDFS에 API를 추가해서 직접 바이트버퍼도 읽을 수 있게 만듬
54
Performance Evaluation
• CDH 4.2.1 + Impala 1.0 GA
• 오픈소스 벤치마크 도구 “HiBench”
- https://github.com/hibench
• 1/10 스케일
• Read-only 성능을 평가하기 위해서 “INSERT INTO
TABLE ...” 쿼리 삭제
• 몇 개의 파일 포맷과 압축코덱을 조합
• 잡 쿼리 latency를 비교
• 평균 5번의 측정
http://www.slideshare.net/sudabon/performance-evaluation-of-cloudera-impala-ga
55
• 마스터 * 3 (stand-by 노드 포함), 슬레이브 * 11
• 슬레이브 서버
• CPU
- Intel Core 2 Duo 2.13 GHz with Hyper Threading
• OS
- Centos 6.2
• Memory
- 4G
• Disk
- 7,200 rpm SATA HDD * 1
Performance Evaluation
http://www.slideshare.net/sudabon/performance-evaluation-of-cloudera-impala-ga
56
Performance Evaluation
• Uservisits  테이블
- 1억건 16,895MB  as  TextFile
• Rankings  테이블
- 천만건, 744MB  as  TextFile
테스트 쿼리
SELECT sourceIP, sum(adRevenue)  as  totalRevenue, avg(pageRank)  
FROM rankings_̲t  R
JOIN  (
  SELECT sourceIP,destURL, adRevenue
  FROM uservisits_̲t  UV
  WHERE (datediff(UV.visitDate,  '1999-0-01')>=0 AND datediff(UV.visitDate,  '2000-01-01')<=0)
)  NUV
ON  (R.pageURL  =  NUV.destURL) GROUP BY  sourceIP order  by  totalRevenue  DESC LIMIT  1;
http://www.slideshare.net/sudabon/performance-evaluation-of-cloudera-impala-ga
57
Benchmark Result
ParquetFile + Snappy
(Impala only)
RCFILE + Snappy
RCFILE + Gzip
SequenceFile + Snappy
SequenceFile + Gzip
TextFile + No Comp.
0 75 150 225 300
235
227
213
234
197
36
29
24
26
19
16
Impala Hive
Avg.  Job  Latency  [sec]
http://www.slideshare.net/sudabon/performance-evaluation-of-cloudera-impala-ga
• Top-N 쿼리(limit 포함)라서 성능이 Hive 보다 월등하게 나온다
• 임팔라는 최종 결과셋이 작은 쿼리의 경우 성능이 높게 나온다
• 다른 쿼리에 경우에는 이 정도의 성능을 보장하지 못 함 (테스트 필요)
58
Gigaom Report
• SQL-on-Hadoop platforms in 2013
• 섹터 로드맵 보고서
• 벤더
- Cloudera, Hadapt,Teradata (SQL-H)
EMC Greenplum (HAWQ)
Citus Data, Splice Machine. JethroData
Concurrent (Lingual)
• 아파치 프로젝트
- Apache Drill, Hortonworks Stinger
59
• 앞으로 1년~2년 예측
- 클라우데라가 적어도 2년 정도 걸릴지라도 가장 유연하고 성공적인
솔루션 구축에 성공할 것
- 두번째 오픈소스 대안은 Apache Drill 또는 Stinger 둘 중에 먼저 성숙
한 프로젝트가 될 것 (클라우데라가 삽질하거나 모멘텀을 잃어버리
면, 아파치 프로젝트 중 하나가 리더를 차지할 수 있을 것)
- Hadapt은 틈새시장에서 이기기 위해 초점을 맞추고 연구할 것
- EMC(Greenplum) ,Teradata는 버그 없는 솔루션을 원하는 대기업의
초이스로 남을 것
- 더 넓게 데이터베이스 시장에는, newSQL 데이터베이스가 성숙할 것
이고 사용자는 하둡에서 멀어질 것
- NewSQL은 Strong structure를 가진 빅데이터에서 사용될 것이고
SQL-on_Hadoop 솔루션들은 semistructured 데이터에 사용될 것이다
Gigaom Report Conclusion
60
Conclusion
• SQL on Hadoop 경쟁 제품 중에서는 가장 성숙
• CDH 의존성이 생김
• Hive와 윈-윈 전략
- 기존 하둡 / 하이브 사용자를 자연스럽게 흡수
• Hive와 서로 보완재로서 다른 제품을 제치고 시장에 안착
할 가능성이 높다
• Hive는 high latency 쿼리에 적합(배치 데이터 처리)
• Impala는 작은 결과셋을 주는 쿼리에 적합 (Top-N 쿼리)
• Hbase는 select 쿼리에 적합(row key 조회)
61
Resources
• Impala 문서
- http://www.cloudera.com/content/support/en/documentation/cloudera-impala/
cloudera-impala-documentation-v1-latest.html
• 클라우데라 블로그
- http://blog.cloudera.com/blog/2012/10/cloudera-impala-real-time-queries-in-apache-
hadoop-for-real/
• Dremel 논문
- http://research.google.com/pubs/pub36632.html
• Impala 1.0 성능 평가
- http://www.slideshare.net/sudabon/performance-evaluation-of-cloudera-impala-ga
• Gigaom 보고서
- http://cloudera.com/content/dam/cloudera/Resources/PDF/sql-on-hadoop-
roadmap-2013.pdf
• 발표자료
- http://www.slideshare.net/SwissHUG/cloudera-impala-15376625
62

More Related Content

What's hot

Introduction to Storm
Introduction to Storm Introduction to Storm
Introduction to Storm Chandler Huang
 
Apache Kudu: Technical Deep Dive


Apache Kudu: Technical Deep Dive

Apache Kudu: Technical Deep Dive


Apache Kudu: Technical Deep Dive

Cloudera, Inc.
 
Stream Processing with Apache Kafka and .NET
Stream Processing with Apache Kafka and .NETStream Processing with Apache Kafka and .NET
Stream Processing with Apache Kafka and .NETconfluent
 
Apache Spark At Scale in the Cloud
Apache Spark At Scale in the CloudApache Spark At Scale in the Cloud
Apache Spark At Scale in the CloudDatabricks
 
Cassandra at Instagram (August 2013)
Cassandra at Instagram (August 2013)Cassandra at Instagram (August 2013)
Cassandra at Instagram (August 2013)Rick Branson
 
Fundamentals of Apache Kafka
Fundamentals of Apache KafkaFundamentals of Apache Kafka
Fundamentals of Apache KafkaChhavi Parasher
 
Azure data bricks by Eugene Polonichko
Azure data bricks by Eugene PolonichkoAzure data bricks by Eugene Polonichko
Azure data bricks by Eugene PolonichkoAlex Tumanoff
 
Redpanda and ClickHouse
Redpanda and ClickHouseRedpanda and ClickHouse
Redpanda and ClickHouseAltinity Ltd
 
Apache Kafka Introduction
Apache Kafka IntroductionApache Kafka Introduction
Apache Kafka IntroductionAmita Mirajkar
 
Using Kafka and Kudu for fast, low-latency SQL analytics on streaming data
Using Kafka and Kudu for fast, low-latency SQL analytics on streaming dataUsing Kafka and Kudu for fast, low-latency SQL analytics on streaming data
Using Kafka and Kudu for fast, low-latency SQL analytics on streaming dataMike Percy
 
Apache kafka 관리와 모니터링
Apache kafka 관리와 모니터링Apache kafka 관리와 모니터링
Apache kafka 관리와 모니터링JANGWONSEO4
 
How to tune Kafka® for production
How to tune Kafka® for productionHow to tune Kafka® for production
How to tune Kafka® for productionconfluent
 
Hadoop and Manufacturing
Hadoop and ManufacturingHadoop and Manufacturing
Hadoop and ManufacturingCloudera, Inc.
 
Deletes Without Tombstones or TTLs (Eric Stevens, ProtectWise) | Cassandra Su...
Deletes Without Tombstones or TTLs (Eric Stevens, ProtectWise) | Cassandra Su...Deletes Without Tombstones or TTLs (Eric Stevens, ProtectWise) | Cassandra Su...
Deletes Without Tombstones or TTLs (Eric Stevens, ProtectWise) | Cassandra Su...DataStax
 
Change data capture
Change data captureChange data capture
Change data captureRon Barabash
 
How to build a streaming Lakehouse with Flink, Kafka, and Hudi
How to build a streaming Lakehouse with Flink, Kafka, and HudiHow to build a streaming Lakehouse with Flink, Kafka, and Hudi
How to build a streaming Lakehouse with Flink, Kafka, and HudiFlink Forward
 

What's hot (20)

Introduction to Storm
Introduction to Storm Introduction to Storm
Introduction to Storm
 
Apache Kudu: Technical Deep Dive


Apache Kudu: Technical Deep Dive

Apache Kudu: Technical Deep Dive


Apache Kudu: Technical Deep Dive


 
Stream Processing with Apache Kafka and .NET
Stream Processing with Apache Kafka and .NETStream Processing with Apache Kafka and .NET
Stream Processing with Apache Kafka and .NET
 
Apache Spark At Scale in the Cloud
Apache Spark At Scale in the CloudApache Spark At Scale in the Cloud
Apache Spark At Scale in the Cloud
 
Cassandra at Instagram (August 2013)
Cassandra at Instagram (August 2013)Cassandra at Instagram (August 2013)
Cassandra at Instagram (August 2013)
 
Fundamentals of Apache Kafka
Fundamentals of Apache KafkaFundamentals of Apache Kafka
Fundamentals of Apache Kafka
 
Intro to HBase
Intro to HBaseIntro to HBase
Intro to HBase
 
Azure data bricks by Eugene Polonichko
Azure data bricks by Eugene PolonichkoAzure data bricks by Eugene Polonichko
Azure data bricks by Eugene Polonichko
 
Redpanda and ClickHouse
Redpanda and ClickHouseRedpanda and ClickHouse
Redpanda and ClickHouse
 
Rds data lake @ Robinhood
Rds data lake @ Robinhood Rds data lake @ Robinhood
Rds data lake @ Robinhood
 
Apache Kafka Introduction
Apache Kafka IntroductionApache Kafka Introduction
Apache Kafka Introduction
 
Using Kafka and Kudu for fast, low-latency SQL analytics on streaming data
Using Kafka and Kudu for fast, low-latency SQL analytics on streaming dataUsing Kafka and Kudu for fast, low-latency SQL analytics on streaming data
Using Kafka and Kudu for fast, low-latency SQL analytics on streaming data
 
Apache kafka 관리와 모니터링
Apache kafka 관리와 모니터링Apache kafka 관리와 모니터링
Apache kafka 관리와 모니터링
 
HBase in Practice
HBase in Practice HBase in Practice
HBase in Practice
 
How to tune Kafka® for production
How to tune Kafka® for productionHow to tune Kafka® for production
How to tune Kafka® for production
 
Hadoop and Manufacturing
Hadoop and ManufacturingHadoop and Manufacturing
Hadoop and Manufacturing
 
Deletes Without Tombstones or TTLs (Eric Stevens, ProtectWise) | Cassandra Su...
Deletes Without Tombstones or TTLs (Eric Stevens, ProtectWise) | Cassandra Su...Deletes Without Tombstones or TTLs (Eric Stevens, ProtectWise) | Cassandra Su...
Deletes Without Tombstones or TTLs (Eric Stevens, ProtectWise) | Cassandra Su...
 
Change data capture
Change data captureChange data capture
Change data capture
 
How to build a streaming Lakehouse with Flink, Kafka, and Hudi
How to build a streaming Lakehouse with Flink, Kafka, and HudiHow to build a streaming Lakehouse with Flink, Kafka, and Hudi
How to build a streaming Lakehouse with Flink, Kafka, and Hudi
 
Apache kudu
Apache kuduApache kudu
Apache kudu
 

Viewers also liked

Apache Hive Hook
Apache Hive HookApache Hive Hook
Apache Hive HookMinwoo Kim
 
Couchbase Usecase : Mobile Game Cookierun
Couchbase Usecase : Mobile Game CookierunCouchbase Usecase : Mobile Game Cookierun
Couchbase Usecase : Mobile Game CookierunMinwoo Kim
 
Hbasecon2013 Wrap Up
Hbasecon2013 Wrap UpHbasecon2013 Wrap Up
Hbasecon2013 Wrap UpMinwoo Kim
 
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈Minwoo Kim
 
introduce of Hadoop map reduce
introduce of Hadoop map reduceintroduce of Hadoop map reduce
introduce of Hadoop map reduceDaeyong Shin
 
2016 Spark Summit East Keynote: Ali Ghodsi and Databricks Community Edition demo
2016 Spark Summit East Keynote: Ali Ghodsi and Databricks Community Edition demo2016 Spark Summit East Keynote: Ali Ghodsi and Databricks Community Edition demo
2016 Spark Summit East Keynote: Ali Ghodsi and Databricks Community Edition demoDatabricks
 
Successes, Challenges, and Pitfalls Migrating a SAAS business to Hadoop
Successes, Challenges, and Pitfalls Migrating a SAAS business to HadoopSuccesses, Challenges, and Pitfalls Migrating a SAAS business to Hadoop
Successes, Challenges, and Pitfalls Migrating a SAAS business to HadoopDataWorks Summit/Hadoop Summit
 
Spark Summit EU talk by Luca Canali
Spark Summit EU talk by Luca CanaliSpark Summit EU talk by Luca Canali
Spark Summit EU talk by Luca CanaliSpark Summit
 
Migrating Clinical Data in Various Formats to a Clinical Data Management System
Migrating Clinical Data in Various Formats to a Clinical Data Management SystemMigrating Clinical Data in Various Formats to a Clinical Data Management System
Migrating Clinical Data in Various Formats to a Clinical Data Management SystemPerficient, Inc.
 
Ankus 제품소개서 1개발배경
Ankus 제품소개서 1개발배경Ankus 제품소개서 1개발배경
Ankus 제품소개서 1개발배경onycom1
 
Spark Summit EU talk by Sital Kedia
Spark Summit EU talk by Sital KediaSpark Summit EU talk by Sital Kedia
Spark Summit EU talk by Sital KediaSpark Summit
 
Building a modern Application with DataFrames
Building a modern Application with DataFramesBuilding a modern Application with DataFrames
Building a modern Application with DataFramesDatabricks
 
Apache ZooKeeper 소개
Apache ZooKeeper 소개Apache ZooKeeper 소개
Apache ZooKeeper 소개중선 곽
 
Building a modern Application with DataFrames
Building a modern Application with DataFramesBuilding a modern Application with DataFrames
Building a modern Application with DataFramesSpark Summit
 
Jump Start into Apache® Spark™ and Databricks
Jump Start into Apache® Spark™ and DatabricksJump Start into Apache® Spark™ and Databricks
Jump Start into Apache® Spark™ and DatabricksDatabricks
 
[오픈소스컨설팅]Jira 한글패치가이드 1
[오픈소스컨설팅]Jira 한글패치가이드 1[오픈소스컨설팅]Jira 한글패치가이드 1
[오픈소스컨설팅]Jira 한글패치가이드 1정명훈 Jerry Jeong
 
Scalable And Incremental Data Profiling With Spark
Scalable And Incremental Data Profiling With SparkScalable And Incremental Data Profiling With Spark
Scalable And Incremental Data Profiling With SparkJen Aman
 
Hadoop application architectures - using Customer 360 as an example
Hadoop application architectures - using Customer 360 as an exampleHadoop application architectures - using Customer 360 as an example
Hadoop application architectures - using Customer 360 as an examplehadooparchbook
 

Viewers also liked (20)

Apache Hive Hook
Apache Hive HookApache Hive Hook
Apache Hive Hook
 
Couchbase Usecase : Mobile Game Cookierun
Couchbase Usecase : Mobile Game CookierunCouchbase Usecase : Mobile Game Cookierun
Couchbase Usecase : Mobile Game Cookierun
 
Hbasecon2013 Wrap Up
Hbasecon2013 Wrap UpHbasecon2013 Wrap Up
Hbasecon2013 Wrap Up
 
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈
 
introduce of Hadoop map reduce
introduce of Hadoop map reduceintroduce of Hadoop map reduce
introduce of Hadoop map reduce
 
2016 Spark Summit East Keynote: Ali Ghodsi and Databricks Community Edition demo
2016 Spark Summit East Keynote: Ali Ghodsi and Databricks Community Edition demo2016 Spark Summit East Keynote: Ali Ghodsi and Databricks Community Edition demo
2016 Spark Summit East Keynote: Ali Ghodsi and Databricks Community Edition demo
 
Successes, Challenges, and Pitfalls Migrating a SAAS business to Hadoop
Successes, Challenges, and Pitfalls Migrating a SAAS business to HadoopSuccesses, Challenges, and Pitfalls Migrating a SAAS business to Hadoop
Successes, Challenges, and Pitfalls Migrating a SAAS business to Hadoop
 
Spark meetup TCHUG
Spark meetup TCHUGSpark meetup TCHUG
Spark meetup TCHUG
 
Spark Summit EU talk by Luca Canali
Spark Summit EU talk by Luca CanaliSpark Summit EU talk by Luca Canali
Spark Summit EU talk by Luca Canali
 
Big Data Platform Industrialization
Big Data Platform Industrialization Big Data Platform Industrialization
Big Data Platform Industrialization
 
Migrating Clinical Data in Various Formats to a Clinical Data Management System
Migrating Clinical Data in Various Formats to a Clinical Data Management SystemMigrating Clinical Data in Various Formats to a Clinical Data Management System
Migrating Clinical Data in Various Formats to a Clinical Data Management System
 
Ankus 제품소개서 1개발배경
Ankus 제품소개서 1개발배경Ankus 제품소개서 1개발배경
Ankus 제품소개서 1개발배경
 
Spark Summit EU talk by Sital Kedia
Spark Summit EU talk by Sital KediaSpark Summit EU talk by Sital Kedia
Spark Summit EU talk by Sital Kedia
 
Building a modern Application with DataFrames
Building a modern Application with DataFramesBuilding a modern Application with DataFrames
Building a modern Application with DataFrames
 
Apache ZooKeeper 소개
Apache ZooKeeper 소개Apache ZooKeeper 소개
Apache ZooKeeper 소개
 
Building a modern Application with DataFrames
Building a modern Application with DataFramesBuilding a modern Application with DataFrames
Building a modern Application with DataFrames
 
Jump Start into Apache® Spark™ and Databricks
Jump Start into Apache® Spark™ and DatabricksJump Start into Apache® Spark™ and Databricks
Jump Start into Apache® Spark™ and Databricks
 
[오픈소스컨설팅]Jira 한글패치가이드 1
[오픈소스컨설팅]Jira 한글패치가이드 1[오픈소스컨설팅]Jira 한글패치가이드 1
[오픈소스컨설팅]Jira 한글패치가이드 1
 
Scalable And Incremental Data Profiling With Spark
Scalable And Incremental Data Profiling With SparkScalable And Incremental Data Profiling With Spark
Scalable And Incremental Data Profiling With Spark
 
Hadoop application architectures - using Customer 360 as an example
Hadoop application architectures - using Customer 360 as an exampleHadoop application architectures - using Customer 360 as an example
Hadoop application architectures - using Customer 360 as an example
 

Similar to Cloudera Impala 1.0

SQL-on-Hadoop with Apache Tajo, and application case of SK Telecom
SQL-on-Hadoop with Apache Tajo,  and application case of SK TelecomSQL-on-Hadoop with Apache Tajo,  and application case of SK Telecom
SQL-on-Hadoop with Apache Tajo, and application case of SK TelecomGruter
 
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-Hadoop
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-HadoopGRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-Hadoop
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-HadoopGruter
 
Hadoop 제주대
Hadoop 제주대Hadoop 제주대
Hadoop 제주대DaeHeon Oh
 
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 인터넷 쇼핑몰의 실시간 분석 플랫폼 구축 사례
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 인터넷 쇼핑몰의 실시간 분석 플랫폼 구축 사례GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 인터넷 쇼핑몰의 실시간 분석 플랫폼 구축 사례
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 인터넷 쇼핑몰의 실시간 분석 플랫폼 구축 사례Gruter
 
Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014Gruter
 
Tajo and SQL-on-Hadoop in Tech Planet 2013
Tajo and SQL-on-Hadoop in Tech Planet 2013Tajo and SQL-on-Hadoop in Tech Planet 2013
Tajo and SQL-on-Hadoop in Tech Planet 2013Gruter
 
5일차.map reduce 활용
5일차.map reduce 활용5일차.map reduce 활용
5일차.map reduce 활용주영 송
 
Spark_Overview_qna
Spark_Overview_qnaSpark_Overview_qna
Spark_Overview_qna현철 박
 
google dinos
google dinosgoogle dinos
google dinosjuhyun
 
OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)
OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)
OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)SANG WON PARK
 
Programming Cascading
Programming CascadingProgramming Cascading
Programming CascadingTaewook Eom
 
Dragon flow and tricircle
Dragon flow and tricircleDragon flow and tricircle
Dragon flow and tricircleYongyoon Shin
 
AWS CLOUD 2018- Amazon Neptune, 신규 그래프 데이터베이스 서비스 (김상필 솔루션즈 아키텍트)
AWS CLOUD 2018- Amazon Neptune, 신규 그래프 데이터베이스 서비스 (김상필 솔루션즈 아키텍트)AWS CLOUD 2018- Amazon Neptune, 신규 그래프 데이터베이스 서비스 (김상필 솔루션즈 아키텍트)
AWS CLOUD 2018- Amazon Neptune, 신규 그래프 데이터베이스 서비스 (김상필 솔루션즈 아키텍트)Amazon Web Services Korea
 
DataWorks Summit 2017
DataWorks Summit 2017DataWorks Summit 2017
DataWorks Summit 2017Daesung Park
 
Hadoop Introduction (1.0)
Hadoop Introduction (1.0)Hadoop Introduction (1.0)
Hadoop Introduction (1.0)Keeyong Han
 
AWS CLOUD 2018- Amazon Aurora  신규 서비스 알아보기 (최유정 솔루션즈 아키텍트)
AWS CLOUD 2018- Amazon Aurora  신규 서비스 알아보기 (최유정 솔루션즈 아키텍트)AWS CLOUD 2018- Amazon Aurora  신규 서비스 알아보기 (최유정 솔루션즈 아키텍트)
AWS CLOUD 2018- Amazon Aurora  신규 서비스 알아보기 (최유정 솔루션즈 아키텍트)Amazon Web Services Korea
 
SK ICT Tech Summit 2019_BIG DATA-11번가_DP_v1.2.pdf
SK ICT Tech Summit 2019_BIG DATA-11번가_DP_v1.2.pdfSK ICT Tech Summit 2019_BIG DATA-11번가_DP_v1.2.pdf
SK ICT Tech Summit 2019_BIG DATA-11번가_DP_v1.2.pdfDeukJin Jeon
 
[2B5]nBase-ARC Redis Cluster
[2B5]nBase-ARC Redis Cluster[2B5]nBase-ARC Redis Cluster
[2B5]nBase-ARC Redis ClusterNAVER D2
 

Similar to Cloudera Impala 1.0 (20)

SQL-on-Hadoop with Apache Tajo, and application case of SK Telecom
SQL-on-Hadoop with Apache Tajo,  and application case of SK TelecomSQL-on-Hadoop with Apache Tajo,  and application case of SK Telecom
SQL-on-Hadoop with Apache Tajo, and application case of SK Telecom
 
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-Hadoop
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-HadoopGRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-Hadoop
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-Hadoop
 
Hadoop 제주대
Hadoop 제주대Hadoop 제주대
Hadoop 제주대
 
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 인터넷 쇼핑몰의 실시간 분석 플랫폼 구축 사례
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 인터넷 쇼핑몰의 실시간 분석 플랫폼 구축 사례GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 인터넷 쇼핑몰의 실시간 분석 플랫폼 구축 사례
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 인터넷 쇼핑몰의 실시간 분석 플랫폼 구축 사례
 
Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014
 
Tajo and SQL-on-Hadoop in Tech Planet 2013
Tajo and SQL-on-Hadoop in Tech Planet 2013Tajo and SQL-on-Hadoop in Tech Planet 2013
Tajo and SQL-on-Hadoop in Tech Planet 2013
 
5일차.map reduce 활용
5일차.map reduce 활용5일차.map reduce 활용
5일차.map reduce 활용
 
Spark_Overview_qna
Spark_Overview_qnaSpark_Overview_qna
Spark_Overview_qna
 
Warp
WarpWarp
Warp
 
google dinos
google dinosgoogle dinos
google dinos
 
NoSQL
NoSQLNoSQL
NoSQL
 
OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)
OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)
OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)
 
Programming Cascading
Programming CascadingProgramming Cascading
Programming Cascading
 
Dragon flow and tricircle
Dragon flow and tricircleDragon flow and tricircle
Dragon flow and tricircle
 
AWS CLOUD 2018- Amazon Neptune, 신규 그래프 데이터베이스 서비스 (김상필 솔루션즈 아키텍트)
AWS CLOUD 2018- Amazon Neptune, 신규 그래프 데이터베이스 서비스 (김상필 솔루션즈 아키텍트)AWS CLOUD 2018- Amazon Neptune, 신규 그래프 데이터베이스 서비스 (김상필 솔루션즈 아키텍트)
AWS CLOUD 2018- Amazon Neptune, 신규 그래프 데이터베이스 서비스 (김상필 솔루션즈 아키텍트)
 
DataWorks Summit 2017
DataWorks Summit 2017DataWorks Summit 2017
DataWorks Summit 2017
 
Hadoop Introduction (1.0)
Hadoop Introduction (1.0)Hadoop Introduction (1.0)
Hadoop Introduction (1.0)
 
AWS CLOUD 2018- Amazon Aurora  신규 서비스 알아보기 (최유정 솔루션즈 아키텍트)
AWS CLOUD 2018- Amazon Aurora  신규 서비스 알아보기 (최유정 솔루션즈 아키텍트)AWS CLOUD 2018- Amazon Aurora  신규 서비스 알아보기 (최유정 솔루션즈 아키텍트)
AWS CLOUD 2018- Amazon Aurora  신규 서비스 알아보기 (최유정 솔루션즈 아키텍트)
 
SK ICT Tech Summit 2019_BIG DATA-11번가_DP_v1.2.pdf
SK ICT Tech Summit 2019_BIG DATA-11번가_DP_v1.2.pdfSK ICT Tech Summit 2019_BIG DATA-11번가_DP_v1.2.pdf
SK ICT Tech Summit 2019_BIG DATA-11번가_DP_v1.2.pdf
 
[2B5]nBase-ARC Redis Cluster
[2B5]nBase-ARC Redis Cluster[2B5]nBase-ARC Redis Cluster
[2B5]nBase-ARC Redis Cluster
 

Cloudera Impala 1.0

  • 1. Research Cloudera Impala 1.0 May 14th 2013 김민우 (Minwoo Kim) michael.kim@nexr.com 1
  • 2. Introduction of Impala • Google Dremel, VLDB 2010 • 전통적인 MapReduce 배치 처리를 보완하고 Hadoop에 서 Real time ad-hoc query를 가능하게 할 기술적인 비 전에 대한 영감을 얻음 2
  • 3. Dremel System • 레코드 1조 개 • 수 테라바이트 데이터셋에서 인터렉티브 스피드 - 수천대 노드 스케일 - 장애 및 낙오자(straggler) 방지 실행 • 중첩 데이터 모델 - 복합 데이터셋 - 정규화가 금지됨 - 컬럼기반 저장 및 처리 • 트리 아키텍처 • 구글 데이터 관리 도구로 상호 운영 - In situ (= in place) 데이터 접근 (e.g GFS, Bigtable) - 맵리듀스 파이프라인 Dremel: Interactive Analysis of Web-Scale Datasets. VLDB'10 3
  • 4. Key Aspects of Dremel • 중첩 데이터 컬럼기반 저장 포맷 - 어떻게하면 빠르게 중첩 데이터를 컬럼 별로 직렬화/역직렬화 할 것 인가? - Repetition / Definition level 을 정의 - 각 컬럼의 Repetition & Definition level 구하여 값과 함께 저장 - 역직렬화시 위에 level 값으로 FSM를 태워 역직렬화 • SQL & Multi-level serving Tree - 쿼리를 완전 병렬화 시켜서 트리의 리프 노드에서 루트 노드로 중간 결과를 스트리밍함 - Aggregation만 논문에서 언급됨 Dremel: Interactive Analysis of Web-Scale Datasets. VLDB'10 4
  • 5. Records vs. columns 더 적게 읽고 더 빨리 압축을 푼다 Dremel: Interactive Analysis of Web-Scale Datasets. VLDB'10 5
  • 6. Nested data model message Document { required int64 DocId; [1,1] optional group Links { repeated int64 Backward; [0,*] repeated int64 Forward; } repeated group Name { repeated group Language { required string Code; optional string Country; [0,1] } optional string Url; } } DocId: 10 Links Forward: 20 Forward: 40 Forward: 60 Name Language Code: 'en-us' Country: 'us' Language Code: 'en' Url: 'http://A' Name Url: 'http://B' Name Language Code: 'en-gb' Country: 'gb' DocId: 20 Links Backward: 10 Backward: 30 Forward: 80 Name Url: 'http://C' multiplicity: Dremel: Interactive Analysis of Web-Scale Datasets. VLDB'10 6
  • 7. Repetition and definition levels DocId: 10 Links Forward: 20 Forward: 40 Forward: 60 Name Language Code: 'en-us' Country: 'us' Language Code: 'en' Url: 'http://A' Name Url: 'http://B' Name Language Code: 'en-gb' Country: 'gb' r1 DocId: 20 Links Backward: 10 Backward: 30 Forward: 80 Name Url: 'http://C' r2 value r d en-us 0 2 en 2 2 NULL 1 1 en-gb 1 2 NULL 0 1 Name.Language.Code r: At what repeated field in the field's path the value has repeated d: How many fields in paths that could be undefined (opt. or rep.) are actually present 레벨 0 은 새 래코드의 시작 을 나타냄 Dremel: Interactive Analysis of Web-Scale Datasets. VLDB'10 7
  • 8. Column-striped representation value r d 10 0 0 20 0 0 DocId value r d http://A 0 2 http://B 1 2 NULL 1 1 http://C 0 2 Name.Url value r d en-us 0 2 en 2 2 NULL 1 1 en-gb 1 2 NULL 0 1 Name.Language.Code Name.Language.Country Links.BackwardLinks.Forward value r d us 0 3 NULL 2 2 NULL 1 1 gb 1 3 NULL 0 1 value r d 20 0 2 40 1 2 60 1 2 80 0 2 value r d NULL 0 1 10 0 2 30 1 2 Dremel: Interactive Analysis of Web-Scale Datasets. VLDB'10 8
  • 9. Record assembly FSM Name.Language.CountryName.Language.Code Links.Backward Links.Forward Name.Url DocId 1 0 1 0 0,1,2 2 0,11 0 0 레코드 기반 데이터 처리를 위해서 (e.g. MapReduce) repetition level 을 가지고 변환 Dremel: Interactive Analysis of Web-Scale Datasets. VLDB'10 9
  • 10. Reading two fields DocId Name.Language.Country1,2 0 0 DocId: 10 Name Language Country: 'us' Language Name Name Language Country: 'gb' s1 DocId: 20 Name s2 • 부모 필드의 구조가 보존됨 • Name[3] / Language[1] / Country 와 같은 쿼리가 유용하다 Dremel: Interactive Analysis of Web-Scale Datasets. VLDB'10 10
  • 11. Query Processing • select-project-aggregate에 최적화됨 –단일 스캔 –레코드 안에서 aggregation –레코드 사이 aggregation • 조인, 임시 테이블, UDFs/TVFs 등 - 논문에서 언급 안됨 Dremel: Interactive Analysis of Web-Scale Datasets. VLDB'10 11
  • 12. Multi-level Serving tree storage layer (e.g., GFS) . . . . . . . . . 리프 서버 (로컬 저장소 를 가짐) 중간 서버들 루트 서버 client . . . . . . 쿼리 실행 트리 Dremel: Interactive Analysis of Web-Scale Datasets. VLDB'10 12
  • 13. Example: count() SELECT A, COUNT(B) FROM T GROUP BY A T = {/gfs/1, /gfs/2, …, /gfs/100000} SELECT A, SUM(c) FROM (R11 UNION ALL R110) GROUP BY A SELECT A, COUNT(B) AS c FROM T11 GROUP BY A T11 = {/gfs/1, …, /gfs/10000} SELECT A, COUNT(B) AS c FROM T12 GROUP BY A T12 = {/gfs/10001, …, /gfs/20000} SELECT A, COUNT(B) AS c FROM T31 GROUP BY A T31 = {/gfs/1} . . . 0 1 3 R11 R12 Data access ops . . . . . . Dremel: Interactive Analysis of Web-Scale Datasets. VLDB'10 13
  • 14. Experiments execution time (sec) on 3000 nodes execution time (sec) number of leaf servers Impact of serving tree depth MR and Dremel execution Scalability execution time (sec) percentage of queries Most queries complete under 10 sec Interactive speed execution time (sec) Dremel: Interactive Analysis of Web-Scale Datasets. VLDB'10 14
  • 15. Impala Release • 릴리즈 - 1.0 -  30/Apr/13 - 0.7 - 15/Apr/13 - 0.6 - 26/Feb/13 - 0.5 - 04/Feb/13 - 0.4 - 20/Jan/13 - 0.3 - 04/Dec/12 - 0.2 - 13/Nov/12 - 0.1 - 24/Oct/12 • 한달 단위로 릴리즈 15
  • 16. Development • C++ 로 개발 (기타 shell script + python) • 임팔라 유저 그룹스 • https://groups.google.com/a/cloudera.org/forum/?fromgroups#!forum/impala-user • 지라 • https://issues.cloudera.org/browse/IMPALA • github • https://github.com/cloudera/impala • 유저 메일링만 있고 개발자 메일링이 없음 • 사실상 소스만 공개되어 있는 클라우데라 내부 프로젝트라고 볼 수 있음 • 개발인원 - 약 10명 • 리더 : Marcel Kornacker (전 google) 16
  • 17. System Requirement • OS - RHEL 5.7 / 6.2 - Centos 5.7 / 6.2 - SLES 11 서비스팩 1 + - Ubuntu 10.04 / 12.04 - Debian 6.03 • CHD 4.1 이상 • Hive • MySQL, PostgreSQL for 하이브 메타스토어 17
  • 18. Impala Benefits • 친숙한 SQL 인터페이스 제공 • 하둡에 위에 빅 데이터에 인터렉티브한 질의 가능 • 데이터 처리를 하나의 시스템에서 처리해서 모델 링이나 ETL 을 피할 수 있다 18
  • 19. Impala Overview : Goals • 다목적의 SQL 쿼리 엔진 - 분석적이고 트랜잭션한 작업부하를 모두 처리해야 한다 - 수 마이크로초에서 수 시간정도 걸리는 쿼리들을 지원 • 하둡안에서 직접 실행한다 - 하둡 파일 포맷을 사용하여 읽음 - 하둡 스토리지 매니저를 사용 - 하둡 프로세스를 띄우는 같은 노드에서 실행됨 • 고성능 - JAVA 대신 C++ - Select, Projection, Join, Union, 서브쿼리 - 맵리듀스 위에 올라가지 않는 완전 새로운 실행 엔진 19
  • 20. User view of Impala : Overview • 클러스터 안에서 분산 서비스로 실행된다 : 각각 노드에 하나의 임팔 라 데몬이 뜬다 • JDBC, ODBC, Hue Beeswax, Impala CLI를 통해서 쿼리를 제출한다 • 쿼리는 적절한 데이터와 함께 모든 노드에 분산된다 • 노드가 실패하면 쿼리는 실패한다 • 임팔라는 하이브의 메타데이터 인터페이스를 사용하고 메타스토어와 연결한다. • 지원되는 파일 포멧 - Text File, Sequence File, RCFile,Avro file, Parquet • 압축 코덱 - Snappy, GZIP, Deflate, BZIP • Kerberos 인증 20
  • 21. Impala Architecture JDBC / ODBC Client Hue Hive Metastore Impala HDFS HBase Impala CLI imapald statestored Impala HDFS HBase imapald statestored Impala HDFS HBase imapald statestored 21
  • 22. Impala Architecture • Client - HUE, ODBC, JDBC, Impala Shell • Hive Metastore - Impala가 이용하는 정보를 저장 - 예, 어떤 데이터 베이스가 사용가능한지 임팔라에게 알려줌 • Impala (impalad + statestored) - 데이터노드 위에서 실행되는 프로세서 - 쿼리를 실행하고 조정(coordinate)한다 - Client로 부터의 쿼리를 받고, 실행을 계획하고, 조정한다 • HBase와 HDFS - 데이터를 저장 22
  • 23. Impala Architecture • 2 개의 바이너리 : impalad와 statestored • 임팔라 데몬 (impalad) - 쿼리 실행과 관련된 클라이언트 요청과 모든 내부 요청을 다룬다 - 이 두가지 역할을 Thrift Service로 제공 • 상태 저장 데몬 (statestored) - 네임 서비스 제공과 메타데이터 분배 - Thrift Service로 제공 23
  • 24. Impala Architecture • 쿼리 실행 단계 - ODBC/JDBC를 통해서 Request 도착 - Planner가 Request를 Plan 쿼리 오퍼레이터 트리 로 변환 - Coordinator가 원격 impalad의 실행 초기화 시킴 • 실행 중 - 중간 결과는 Executor사이에 스트리밍 된다 - 쿼리 최종 결과는 Client로 스트리밍 된다 24
  • 25. Query Planning • 2 단계 플래닝 처리 - 단일 노드 플랜 : Left-deep tree plan - 병렬 실행을 위해서 오퍼레이터 트리를 분할한다 • 플랜 오퍼레이터들의 병렬화 - 모든 쿼리 오퍼레이터들은 완전히 분산됨 - 조인 : broadcast와 partitioned가 있고 cost based로 결정됨 - aggregation : fully parallel pre-aggregation과 merge aggregation - top-n : 최초 스테이지에서 병렬로 처리됨 • 조인 순서 = FROM 절 순서 (cost-based로 변경 예정) 25
  • 26. Query Planning : Example • 플랜 오퍼레이터들: - Scan, HashJoin, HashAggregation, Union,TopN, Exchange • 예제 쿼리 SELECT t1.custid, SUM(t2.revenue) AS revenue FROM LargeHdfsTable t1 JOIN LargeHdfsTable t2 ON (t1.id1 = t2.id) JOIN SmallHbaseTable t3 ON (t1.id2 = t3.id) WHERE t3.category = 'Online' GROUP BY t1.custid ORDER BY revenue DESC LIMIT 10 26
  • 27. Query Planning : Example • 단일 노드 플랜: SELECT t1.custid, SUM(t2.revenue) AS revenue FROM LargeHdfsTable t1 JOIN LargeHdfsTable t2 ON (t1.id1 = t2.id) JOIN SmallHbaseTable t3 ON (t1.id2 = t3.id) WHERE t3.category = 'Online' GROUP BY t1.custid ORDER BY revenue DESC LIMIT 10 Query Planning: Example •  Single-node plan: 27
  • 28. Query Planning : Distributed Plans • 목표: - 지역(locality) 스캔을 극대화, 데이터 이동을 최소화 - 쿼리 오퍼레이터들을 완전 분배 • 병렬 조인 - broadcast join : • 오른쪽 테이블은 조인을 수행하는 각 노드에 broadcast된다 • 오른쪽 테이블이 작을 경우에 선호된다. - partitioned join • 두 테이블 모두 조인 컬럼들로 hash-partitioned 된다 • 큰 테이블 조인시 선호된다 - 예측된 데이터 전송 비용과 컬럼 통계기반으로 cost-based 결정을 내린다. 28
  • 29. Query Planning : Distributed Plans • 병렬 집계 - 데이터가 처음 물리화된 곳에서 pre-aggregation - merge aggregation은 그루핑 컬럼들로 나누어진다 • 병렬 top-N - 데이터가 처음 물리화된 곳에서 최초 top-N - 단일 노드 플랜 조각에서 마지막 top-N 29
  • 30. Query Planning: Distributed PlansQuery Planning: Distributed Plans 30
  • 31. Impala Architecture: Query Execution • ODBC/JDBC를 통해서 Request 도착 Impala Architecture: Query Execution •  Request arrives via ODBC/JDBC Query Planner Query Coordinator Query Executor HDFS DN HBase SQL App ODBC Hive Metastore HDFS NN Statestore Query Planner Query Coordinator Query Executor HDFS DN HBase Query Planner Query Coordinator Query Executor HDFS DN HBase SQL request 31
  • 32. Impala Architecture: Query Execution • Planner가 Request를 쿼리 연산자 트리 변환 • Coordinator가 원격 impalad의 실행 초기화 Impala Architecture: Query Execution •  Planner turns request into collections of plan fragments •  Coordinator initiates execution on remote impalad's Query Planner Query Coordinator Query Executor HDFS DN HBase SQL App ODBC Query Planner Query Coordinator Query Executor HDFS DN HBase Query Planner Query Coordinator Query Executor HDFS DN HBase Hive Metastore HDFS NN Statestore 32
  • 33. Impala Architecture: Query Execution • 중간 결과는 Executor사이에 스트리밍 된다 • 쿼리 최종 결과는 Client로 스트리밍 된다. Impala Architecture: Query Execution •  Intermediate results are streamed between impalad’s •  Query results are streamed back to client Query Planner Query Coordinator Query Executor HDFS DN HBase SQL App ODBC Hive Metastore HDFS NN Statestore Query Planner Query Coordinator Query Executor HDFS DN HBase Query Planner Query Coordinator Query Executor HDFS DN HBase query results 33
  • 34. Metadata Handling • Hive 메타스토어를 이용함 • 메타데이터를 캐시함 : 쿼리 실행 도중에 synchronous 메타스토어 API 호출은 없다 • statestored가 메타데이터를 분배한다 34
  • 35. Supported Data Type • Hive 데이터 원시타입과 동일한 이름과 시멘틱으로 지원 - tinyint, smallint, int, bigint, float, double, boolean, string, timestamp • 복합 데이터 타입은 지원하지 않는다 - struct, map, array 35
  • 36. Language Reference • Impala CREATE TABLE 커맨드, Hive DDL를 사용 한 테이블 생성 • HiveQL과 비슷한 DML 지원 • HiveQL과 동일한 파라메터와 이름의 내장 함 수들을 지원 • JOIN,AGGREGATE, DISTINCT, UNION ALL, ORDER BY, LIMIT, 서브쿼리 • INSERT INTO, INSERT OVERWRITE 36
  • 37. ALTER TABLE • 테이블 이름 바꾸기 - ALTER TABLE old_name RENAME TO new_name; • 테이블 데이터 파일의 물리적인 위치 바꾸기 - ALTER TABLE table_name SET LOCATION ‘hdfs_path_of_directory’; • 테이블 컬럼 재배치 - ALTER TABLE table_name ADD COLUMNS (column_defs); - ALTER TABLE table_name REPLACE COLUMNS(column_defs); - ALTER TABLE table_name CHANGE column_name new_name new_spec; - ALTER TABLE table_name DROP column_name; • 파일 포맷 변경 - ALTER TABLE table_name SET FILEFORMAT { PARQUETFILE | RCFILE | SEQUENCEFILE | TEXTFILE } • 파티션 추가 삭제 - ALTER TABLE part_table ADD PARTITION (month=concat(‘Decem’,‘ber’)); - ALTER TABLE part_table DROP PARTITION (month=‘January’); 37
  • 38. CREATE DATABASE / TABLE • HDFS 디렉토리가 존재하지 않으면 생성한다 • 데이터베이스 생성 후 impala-shell 세션에서 기본 데이 터베이스로 지정하기 위해서는 USE 구문을 사용한다 데이터 베이스 생성 CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name [COMMENT 'database_comment'] [LOCATION hdfs_path]; 38
  • 39. CREATE TABLE [LIKE] 테이블 생성 문법 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name [(col_name data_type [COMMENT 'col_comment'], ...)] [COMMENT 'table_comment'] [PARTITIONED BY (col_name data_type [COMMENT 'col_comment'], ...)] [ [ROW FORMAT row_format] [STORED AS file_format] ] [LOCATION 'hdfs_path'] data_type : primitive_type primitive_type : TINYINT | SMALLINT | INT | BIGINT | BOOLEAN | FLOAT | DOUBLE | STRING | TIMESTAMP row_format : DELIMITED [FIELDS TERMINATED BY 'char'] [LINES TERMINATED BY 'char'] file_format : PARQUETFILE | SEQUENCEFILE | TEXTFILE | RCFILE CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name LIKE [db_name.]table_name [COMMENT 'table_comment'] [STORED AS file_format] [LOCATION 'hdfs_path'] 39
  • 40. DISTINCT Clause • 같은 쿼리에서 하나 이상의 DISTINCT 사용은 지원하지 않는다 DISTINCT 예제 -- Returns the unique values from one column. SELECT DISTINCT c_birth_country FROM customer; -- Returns the unique combinations of values from multiple columns. SELECT DISTINCT c_salutation, c_last_name FROM customer; 다음은 지원하지 않음 SELECT COUNT(DISTINCT c_first_name) and COUNT(DISTINCT c_last_name) FROM customer; 40
  • 41. DROP DATABASE / TABLE • 기본적으로 Impala는 연관된 HDFS 디렉토리를 삭제한다 • 테이블이 EXTERNAL 절과 함께 생성되었다면 디렉토리는 삭제하지 않는다 데이터베이스 삭제 DROP (DATABASE|SCHEMA) [IF EXISTS] database_name; 테이블 삭제 DROP TABLE [IF EXISTS] table_name 41
  • 42. GROUP BY • 지원되는 함수는 • COUNT(), SUM(),AVG(), MIN(), MAX() 이다. 예제 SELECT ss_item_sk as Item, count(ss_item_sk) as Times_Purchased, sum(ss_quantity) as Total_Quantity_Purchased FROM store_sales GROUP BY ss_item_sk ORDER BY sum(ss_quantity) desc LIMIT 5; +--------+----------------------+--------------------------------+ | item | times_purchased | total_quantity_purchased | +--------+----------------------+--------------------------------+ | 9325 | 372 | 19072 | | 4279 | 357 | 18501 | | 7507 | 371 | 18475 | | 5953 | 369 | 18451 | | 16753 | 375 | 18446 | +--------+----------------------+--------------------------------+ 42
  • 43. 조인 예제 [localhost:21000] > SELECT c_last_name, ca_city FROM customer, customer_address WHERE c_customer_sk = ca_address_sk LIMIT 10; +----------------+-------------------+ | c_last_name | ca_city | +----------------+-------------------+ | Lewis | Fairfield | | Moses | Fairview | | Hamilton | PleasantValley | | White | Oak Ridge | | Moran | Glendale | | Sharp | Lakeview | | Wiles | Farmington | | Shipman | Union | | Gilbert | New Hope | | Brunson | Martinsville | +----------------+-------------------+ Returned 10 row(s) in 0.63s JOIN 43
  • 44. JOIN • partitioned join - 두 테이블 모두 해시 알고리즘을 이용해서 로우의 서브셋을 다른 노드 들에게 보낸다 - 테이블의 인덱스 통계정보를 알 수 없다면 broadcast join으로 처리된다 • broadcast join - 오른쪽 테이블의 전체 내용을 조인을 처리에 관련된 모든 노드들에게 보내는 방식 - 인덱스나 통계정보를 알 수 없을 때 기본값으로 사용됨 • 조인 순서가 Impala 성능에 영향을 미친다. - 가장 좋은 방법은 오른쪽에서 부터 큰 테이블 순서로 조인하는 것이다 - cost-based로 바뀔 예정 44
  • 45. INSERT • 다음 두가지 INSERT를지원한다. - INSERT INTO - INSERT OVERWRITE • 현재 Impala는 오직 Text와 Parquet 포맷을 사용하 는 테이블에만 삽입을 할 수 있다 • 다른 포맷들은 하이브를 사용해서 데이터를 삽입 하고 Impala로 쿼리를 실행한다 45
  • 46. LIMIT, ORDER BY • LIMIT - 결과셋의 로우 수를 제한 - Top-N 쿼리시 사용 - 특정 쿼리의 샘플 결과 확인 시 사용 (LIMIT절을 사용하면 성능이 대폭 향상 된다) • ORDER BY - 최종 결과 로우들의 순서를 보장 - LIMIT 절과 같이 써야 성능을 높일 수 있다 46
  • 47. REFRESH • Impala에만 있는 구문 • Impala가 쿼리에 신속하게 응답하기 위해서는 데이터베 이스와 테이블에 대한 메타데이터를 가지고 있어야 한다 • Hive와 Impala가 공유하는 메타스토어에서 Impala가 사용 하는 정보를 수정한다면, Impala는 캐시된 정보가 업데이 트 되어야 한다. • 모든 메타데이터를 업데이트 시킨다 문법 REFRESH [table_name] 47
  • 48. Unsupported Language Elements • ALTER DDL 요소 • 권한 (Authorization) 관련 요소들 • 복합 데이터 타입 maps, arrays, structs. • LOAD DATA (로컬에서 데이터 로드) • TRANSFORM, 커스텀 파일 포맷, 커스텀 SerDe • XML, JSON 함수 • UDF, UDTF • 샘플링 • LateralView • 쿼리에 다중 DISTINCT 절 48
  • 49. • SHOW PARTITIONS. • SHOW TABLE EXTENDED. • SHOW TBLPROPERTIES. • SHOW FUNCTIONS. • SHOW INDEXES. • SHOW COLUMNS. • SHOW CREATE TABLE. • DESCRIBE DATABASE. • DESCRIBE COLUMN • IMPORT TABLE and EXPORT TABLE. • ANALYZE TABLE. Unsupported Language Elements 49
  • 50. Impala does not • MapJoin, StreamJoin 힌트 지원하지 않음 • SORT BY, DISTRIBUTED BY, CLUSTER BY • 가상 컬럼 지원하지 않음 • Lock 지원하지 않음 • 설정 프로퍼티 노출하지 않음 • 컬럼이 오버플로우 되었을 때 NULL을 반환하지 않 고 타입의 범위의 최소 또는 최대 값을 반환한다 • local 타임존으로 Timestamp를 저장하지 않고 GMT로 저장된다 50
  • 51. Understanding File Formats File Type Format Compression Codes Impala Can CREATE ? Impala Can INSERT? Parquet Structured Snappy, GZIP, deflate, BZIP2; Snappy이 기본값 Yes Yes : CREAT TABLE INSERT, and query Text Unstructured LZO Yes (... ) Avro Structured Snappy, GZIP, deflate, BZIP2 No, create using Hive No, query only RCFILE Structured Snappy, GZIP, deflate, BZIP2 Yes No, query only SequenceFile Structured Snappy, GZIP, deflate, BZIP2 Yes No, query only 51
  • 52. Parquet File Format • 새로운 컬럼기반 파일 포맷 • 더그 커팅의 Trevni를 계승함 • 클라우데라와 트위터에서 공동 개발 • 구글 Dremel definition/repetition level 기반 • 중첩 구조와 sparse한 데이타 • 컬럼 별 인코딩을 위한 확장성을 지원 (e.g. indexes, bloom filters, statistics) • Trevni 보다 더 빠른 메타데이타 쓰기 성능 52
  • 53. HDFS Improvements • HDFS 개선점 4가지 1. 개별 블록 레플리카 디스크 위치 정보를 표시 • 중복 읽기를 하지 않기 위해서 레플리카의 위치를 알아야 함 • 네임노드밖에 레플리카의 위치를 알지 못함 • 새로운 RPC콜을 통해 어떤 데이터 노드에 블록 레플리카가 있는지 정의하고 임팔라가 데이터 노드에 쿼리해 어느 디스 크에 있는지 알게함 2. 특정 파일 블록 레플리카를 같은 데이터 노드에 위치시키게 만듬 • 모든 읽기는 로컬에서 읽는 게 이상적 • 특정 파일의 레플리카는 같은 노드에 위치 시켜 로컬 읽기를 유도함 53
  • 54. HDFS Improvements 3. 자주 쓰는 테이블과 파일을 인메모리에 캐싱 • 디스크 OS의 버퍼 캐시를 사용하는 것보다 임팔라 인메모리 성 능을 활용할 때 훨씬 빨라졌기 때문에 HDFS에 인메모리캐싱 기능을 추가해 관리자가 HDFS 파일이나 하이브 테이블을 메인 메모리에서 읽고 저장하게 함 4. HDFS 읽기 작업시 거치는 복제 과정을 줄임 • 기존 : 로컬 -> 메모리 -> 버퍼 -> 커널 -> 네트웍 -> 클라이언트 • 임팔라 데몬이 데이터 노드를 우회해 CPU가 직접 읽게 함 • HDFS에 API를 추가해서 직접 바이트버퍼도 읽을 수 있게 만듬 54
  • 55. Performance Evaluation • CDH 4.2.1 + Impala 1.0 GA • 오픈소스 벤치마크 도구 “HiBench” - https://github.com/hibench • 1/10 스케일 • Read-only 성능을 평가하기 위해서 “INSERT INTO TABLE ...” 쿼리 삭제 • 몇 개의 파일 포맷과 압축코덱을 조합 • 잡 쿼리 latency를 비교 • 평균 5번의 측정 http://www.slideshare.net/sudabon/performance-evaluation-of-cloudera-impala-ga 55
  • 56. • 마스터 * 3 (stand-by 노드 포함), 슬레이브 * 11 • 슬레이브 서버 • CPU - Intel Core 2 Duo 2.13 GHz with Hyper Threading • OS - Centos 6.2 • Memory - 4G • Disk - 7,200 rpm SATA HDD * 1 Performance Evaluation http://www.slideshare.net/sudabon/performance-evaluation-of-cloudera-impala-ga 56
  • 57. Performance Evaluation • Uservisits  테이블 - 1억건 16,895MB  as  TextFile • Rankings  테이블 - 천만건, 744MB  as  TextFile 테스트 쿼리 SELECT sourceIP, sum(adRevenue)  as  totalRevenue, avg(pageRank)   FROM rankings_̲t  R JOIN  (   SELECT sourceIP,destURL, adRevenue   FROM uservisits_̲t  UV   WHERE (datediff(UV.visitDate,  '1999-0-01')>=0 AND datediff(UV.visitDate,  '2000-01-01')<=0) )  NUV ON  (R.pageURL  =  NUV.destURL) GROUP BY  sourceIP order  by  totalRevenue  DESC LIMIT  1; http://www.slideshare.net/sudabon/performance-evaluation-of-cloudera-impala-ga 57
  • 58. Benchmark Result ParquetFile + Snappy (Impala only) RCFILE + Snappy RCFILE + Gzip SequenceFile + Snappy SequenceFile + Gzip TextFile + No Comp. 0 75 150 225 300 235 227 213 234 197 36 29 24 26 19 16 Impala Hive Avg.  Job  Latency  [sec] http://www.slideshare.net/sudabon/performance-evaluation-of-cloudera-impala-ga • Top-N 쿼리(limit 포함)라서 성능이 Hive 보다 월등하게 나온다 • 임팔라는 최종 결과셋이 작은 쿼리의 경우 성능이 높게 나온다 • 다른 쿼리에 경우에는 이 정도의 성능을 보장하지 못 함 (테스트 필요) 58
  • 59. Gigaom Report • SQL-on-Hadoop platforms in 2013 • 섹터 로드맵 보고서 • 벤더 - Cloudera, Hadapt,Teradata (SQL-H) EMC Greenplum (HAWQ) Citus Data, Splice Machine. JethroData Concurrent (Lingual) • 아파치 프로젝트 - Apache Drill, Hortonworks Stinger 59
  • 60. • 앞으로 1년~2년 예측 - 클라우데라가 적어도 2년 정도 걸릴지라도 가장 유연하고 성공적인 솔루션 구축에 성공할 것 - 두번째 오픈소스 대안은 Apache Drill 또는 Stinger 둘 중에 먼저 성숙 한 프로젝트가 될 것 (클라우데라가 삽질하거나 모멘텀을 잃어버리 면, 아파치 프로젝트 중 하나가 리더를 차지할 수 있을 것) - Hadapt은 틈새시장에서 이기기 위해 초점을 맞추고 연구할 것 - EMC(Greenplum) ,Teradata는 버그 없는 솔루션을 원하는 대기업의 초이스로 남을 것 - 더 넓게 데이터베이스 시장에는, newSQL 데이터베이스가 성숙할 것 이고 사용자는 하둡에서 멀어질 것 - NewSQL은 Strong structure를 가진 빅데이터에서 사용될 것이고 SQL-on_Hadoop 솔루션들은 semistructured 데이터에 사용될 것이다 Gigaom Report Conclusion 60
  • 61. Conclusion • SQL on Hadoop 경쟁 제품 중에서는 가장 성숙 • CDH 의존성이 생김 • Hive와 윈-윈 전략 - 기존 하둡 / 하이브 사용자를 자연스럽게 흡수 • Hive와 서로 보완재로서 다른 제품을 제치고 시장에 안착 할 가능성이 높다 • Hive는 high latency 쿼리에 적합(배치 데이터 처리) • Impala는 작은 결과셋을 주는 쿼리에 적합 (Top-N 쿼리) • Hbase는 select 쿼리에 적합(row key 조회) 61
  • 62. Resources • Impala 문서 - http://www.cloudera.com/content/support/en/documentation/cloudera-impala/ cloudera-impala-documentation-v1-latest.html • 클라우데라 블로그 - http://blog.cloudera.com/blog/2012/10/cloudera-impala-real-time-queries-in-apache- hadoop-for-real/ • Dremel 논문 - http://research.google.com/pubs/pub36632.html • Impala 1.0 성능 평가 - http://www.slideshare.net/sudabon/performance-evaluation-of-cloudera-impala-ga • Gigaom 보고서 - http://cloudera.com/content/dam/cloudera/Resources/PDF/sql-on-hadoop- roadmap-2013.pdf • 발표자료 - http://www.slideshare.net/SwissHUG/cloudera-impala-15376625 62