最強にスケーラブルなカラムナーDBよ、
Hadoopとのタッグで
ビッグデータの地平を目指せ!
- Actian Matrix -
平間大輔
株式会社インサイトテクノロジー
Actian Analytics Platformの中核
Actian Analytics Platform™
Analyze ActConnect
Actian Analytics Accelerators
Actian
DataFlow™
...
Matrixとは?
Amazon RedshiftはMatrixを採用
“Actian has an industry leading solution and is
rethinking database cloud – we’re excited to
bac...
本当にスケールするの?
CentOS 6.4 64bit
Intel Xeon L5640
2.26GHz (2 cores only)
8GB
SATA SSD * 2
(RAID0 全ノード共有)
Actian Matrix 5.1
Vir...
スケールアウト!
2nodes 4nodes 8nodes 16nodes
TPC-H 30GB
どうだ!
4nodes 8nodes 16nodes
TPC-H 100GB
スケールアウトの秘密を暴く
Leader Node
Parser
Queries & Joins Non-Query Commands
Execution Planner & Optimizer
Code Generation
Queue & ...
データ処理の基本は「Slice」
Leader
Node
Compute
Node 1
Slice 1
1, 10, 20,
30, 40, 50,
60, 70….
5, 14, 24,
34, 44, 54,
64, 74….
Slice ...
Stream, Segment, Step
集計処理は2段階
Supplier
Nation AcctBal
S0
---------
1
2
4
4
8
S1
---------
1
1
7
7
8
S0
---------
$5
$10
$12
$15
$30
S1
--------...
Queryの実行例
• TPC-H Q16
select
p_brand, p_type, p_size, count(distinct ps_suppkey) as supplier_cnt
from
partsupp, part
where...
Queryの実行例
stm | seg | step | maxtime | avgtime | rows | bytes | label | slices
-----+-----+------+-----------------+------...
いぢめないで…
select l_partkey, l_extendedprice from lineitem order by 2, 1;
stm | seg | step | maxtime | avgtime | rows | bytes...
データの持ち方も重要
分散キー (distkey)
catid
category
catgroup catname catdesc
distkey
Slice 0 Slice 1
catitem
catid
distkey
itemid
ソート...
カラムナーDBの十八番、圧縮
エンコード名 キーワード サポートされるデータ型 圧縮の特徴
Byte dictionary BYTEDICT VARCHARとBOOLEAN
を除く全て
ブロックごとに最大255通りの値を辞書に持たせる
ことで1...
上手に圧縮、サイズは1/2以下!
create table lineitem (
l_orderkey int8 not null encode delta sortkey distkey,
l_partkey int4 not null,
l...
隠し味はUDF(ユーザー定義関数)
• PL/pgSQLの例
CREATE OR REPLACE FUNCTION f_echo(_text varchar)
RETURNS varchar AS
$$
BEGIN
return _text;
...
ビッグなデータはHadoopから取り込め!
ビッグなデータはHadoopから取り込め!
DataNode
DataNode
DataNode
NameNode
Compute
Node
Compute
Node
Compute
Node
LeaderNode
これでは遅い…
ビッグなデータはHadoopから取り込め!
DataNode
DataNode
DataNode
NameNode
Compute
Node
Compute
Node
Compute
Node
LeaderNode
直接ロードしたい!
直接読み...
Google Booksで現れる単語を見てみよう
まずはHadoopでデータ加工だ!
algorithm_PRON 1991 297 185
algorithm_PRON 1992 325 217
algorithm_PRON 1993 336 235
algorithm_PRON 1994 ...
ちょっとしたクエリはODIで
こんなクエリが書けちゃう
select word, sum(wordcount) from odi_hadoop_import(
with jobname('googlebooks_job')
masternode('hadoop01.com'...
ODIを実行だ!
がっつりロードするならDataFlow!
高速ロード、すぐに分析!
最強のタッグがBigDataの世界を変える!
無断転載を禁ず
この文書はあくまでも参考資料であり、掲載されている情報は予告なしに変更されることがあります。
株式会社インサイトテクノロジーは本書の内容に関していかなる保証もしません。また、本書の内容に関連したいかなる
損害についても責任を負い...
Upcoming SlideShare
Loading in...5
×

[D15] 最強にスケーラブルなカラムナーDBよ、Hadoopとのタッグでビッグデータの地平を目指せ!by Daisuke Hirama

709

Published on

Published in: Technology, Business
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
709
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
24
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

[D15] 最強にスケーラブルなカラムナーDBよ、Hadoopとのタッグでビッグデータの地平を目指せ!by Daisuke Hirama

  1. 1. 最強にスケーラブルなカラムナーDBよ、 Hadoopとのタッグで ビッグデータの地平を目指せ! - Actian Matrix - 平間大輔 株式会社インサイトテクノロジー
  2. 2. Actian Analytics Platformの中核 Actian Analytics Platform™ Analyze ActConnect Actian Analytics Accelerators Actian DataFlow™ Actian Matrix™ Actian Vector™ Enterprise Applications Data Warehouse Social Internet of Things SaaS WWW Machine Data Mobile World-Class Risk Management Competitive Advantage Customer Delight Disruptive New Business Models NoSQLTraditional Actian Analytics Platform™ Accelerate Hadoop Accelerate Analytics Accelerate BI
  3. 3. Matrixとは?
  4. 4. Amazon RedshiftはMatrixを採用 “Actian has an industry leading solution and is rethinking database cloud – we’re excited to back such a strong team.” - Jeff Blackburn, SVP of Business Development for Amazon Amazon Redshift is the fastest growing service in their portfolio Selected after deep evaluation against all competitors based on price-performance value proposition of Actian’s platform Amazon Redshift service has over 1000 new customers since launch in Feb ’13 Actian complements Redshift with on-premise, high-scale analytics suite and support Actian Analytics Platform Underpins AMAZON REDSHIFT Created New Cloud Service driving $50M+ revenue annually.
  5. 5. 本当にスケールするの? CentOS 6.4 64bit Intel Xeon L5640 2.26GHz (2 cores only) 8GB SATA SSD * 2 (RAID0 全ノード共有) Actian Matrix 5.1 Virtual Gigabit Ethernet x N = ?
  6. 6. スケールアウト! 2nodes 4nodes 8nodes 16nodes TPC-H 30GB
  7. 7. どうだ! 4nodes 8nodes 16nodes TPC-H 100GB
  8. 8. スケールアウトの秘密を暴く Leader Node Parser Queries & Joins Non-Query Commands Execution Planner & Optimizer Code Generation Queue & Workload Manager Scheduler Communication Layer listener ODBC / JDBC / PSQL
  9. 9. データ処理の基本は「Slice」 Leader Node Compute Node 1 Slice 1 1, 10, 20, 30, 40, 50, 60, 70…. 5, 14, 24, 34, 44, 54, 64, 74…. Slice 2 2, 11, 21, 31, 41, 51, 61, 71…. 6, 15, 25, 35, 45, 55, 65, 75…. Slice 3 3, 12, 22, 32, 42, 52, 62, 72.... 7, 16, 26, 36, 46, 56, 66, 76… Slice 4 4, 13, 33, 43, 53, 63, 73…. 8, 17, 27, 37, 47, 57, 67, 77… Compute Node 2 Slice 5 5, 14, 24, 34, 44, 54, 64, 74…. 1, 10, 20, 30, 40, 50, 60, 70…. Slice 6 6, 15, 25, 35, 45, 55, 65, 75…. 2, 11, 21, 31, 41, 51, 61, 71…. Slice 7 7, 16, 26, 36, 46, 56, 66, 76…. 3, 12, 22, 32, 42, 52, 62, 72.... Slice 8 8, 17, 27, 37, 47, 57, 67, 77… 4, 13, 33, 43, 53, 63, 73….
  10. 10. Stream, Segment, Step
  11. 11. 集計処理は2段階 Supplier Nation AcctBal S0 --------- 1 2 4 4 8 S1 --------- 1 1 7 7 8 S0 --------- $5 $10 $12 $15 $30 S1 --------- $10 $11 $15 $5 $8 S0 Hash aggregate table 1 – $5 2 – $10 4 – $27 8 - $30 S1 Hash aggregate table 1 – $21 7 – $20 8 - $8 S0 ----------- 1 1 1 2 2 S1 --------- 4 4 S0 --------- $5 $21 $15 $10 $7 S1 --------- $27 $1054 Aggr Dist Aggr Supplier Nation AcctBal S2 --------- 1 7 7 9 10 S3 --------- 2 4 4 6 9 S2 --------- $15 $1 $12 $10 $3 S3 --------- $7 $1050 $4 $10 $2 S2 Hash aggregate table 1 – $15 7 – $13 9 – $10 10 - $3 S3 Hash aggregate table 2 – $7 4 – $1054 6 – $10 9 = $2 S2 ----------- 6 7 7 S3 --------- 8 8 9 9 10 S2 --------- $10 $20 $13 S3 --------- $30 $8 $10 $2 $3 Node 2Node 1 ... ... Scan S2 Hash aggregate table 6 – $10 7 – $33 S3 Hash aggregate table 8 – $38 9 – $12 10 – $3 S0 Hash aggregate table 1 – $41 2 – $17 S1 Hash aggregate table 4 – $1081 select nation, sum(acctbal) from supplier group by nation; create table supplier ( suppkey int4 not null distkey, name char(25) not null, address varchar(40) not null, nation int4 not null, phone char(15) not null, acctbal numeric(12,2) not null, comment varchar(101) not null ) sortkey (suppkey);
  12. 12. Queryの実行例 • TPC-H Q16 select p_brand, p_type, p_size, count(distinct ps_suppkey) as supplier_cnt from partsupp, part where p_partkey = ps_partkey and p_brand <> 'Brand#15' and p_type not like 'STANDARD POLISHED%' and p_size in (3, 8, 49, 19, 29, 9, 47, 32) and ps_suppkey not in ( select s_suppkey from supplier where s_comment like '%Customer%Complaints%' ) group by p_brand, p_type, p_size order by supplier_cnt desc, p_brand, p_type, p_size;
  13. 13. Queryの実行例 stm | seg | step | maxtime | avgtime | rows | bytes | label | slices -----+-----+------+-----------------+-----------------+----------+------------+----------------------+-------- 0 | 0 | 0 | 00:00:00.082427 | 00:00:00.047169 | 479 | 37414 | scan tblP =108506 | 32 0 | 0 | 2 | 00:00:00.082427 | 00:00:00.047169 | 479 | 1916 | bcast | 32 0 | 1 | 0 | 00:00:00.099844 | 00:00:00.094777 | 7664 | 30656 | scan fabric=67 | 32 0 | 1 | 2 | 00:00:00.099844 | 00:00:00.094777 | 7664 | 122624 | hash tblT =240 | 32 1 | 2 | 0 | 00:00:00.002559 | 00:00:00.001517 | 0 | 0 | scan tblP =108490 | 32 1 | 2 | 1 | 00:00:00.002559 | 00:00:00.001517 | 0 | 0 | sort tblT =242 | 32 2 | 3 | 0 | 00:00:00.002244 | 00:00:00.001048 | 0 | 0 | scan tblP =108514 | 32 2 | 3 | 1 | 00:00:00.002244 | 00:00:00.001048 | 0 | 0 | sort tblT =244 | 32 3 | 4 | 0 | 00:00:02.231598 | 00:00:01.725522 | 79999318 | 1279989088 | scan tblP =108514 | 32 3 | 4 | 1 | 00:00:02.231598 | 00:00:01.725522 | 0 | 0 | merge | 32 3 | 4 | 5 | 00:00:02.231598 | 00:00:01.725522 | 11885548 | 0 | mjoin tbl =239 | 32 3 | 4 | 8 | 00:00:02.231598 | 00:00:01.725522 | 11879878 | 0 | hjoin tblT =240 | 32 3 | 4 | 11 | 00:00:02.231598 | 00:00:01.725522 | 11879783 | 712462256 | aggr tblT =257 | 32 3 | 4 | 12 | 00:00:02.231598 | 00:00:01.725522 | 11879783 | 565281908 | dist | 32 3 | 5 | 0 | 00:00:02.426613 | 00:00:02.371618 | 11879783 | 569904860 | scan fabric=68 | 32 3 | 5 | 1 | 00:00:02.426613 | 00:00:02.371618 | 11877404 | 712319756 | aggr tblT =260 | 32 4 | 6 | 0 | 00:00:00.192183 | 00:00:00.133277 | 11877404 | 712319756 | scan tblT =260 | 32 4 | 6 | 5 | 00:00:00.192183 | 00:00:00.133277 | 890878 | 56991616 | aggr tblT =265 | 32 4 | 6 | 6 | 00:00:00.192183 | 00:00:00.133277 | 890878 | 45434532 | dist | 32 4 | 7 | 0 | 00:00:00.301407 | 00:00:00.292919 | 890878 | 49864592 | scan fabric=69 | 32 4 | 7 | 1 | 00:00:00.301407 | 00:00:00.292919 | 27840 | 1780992 | aggr tblT =268 | 32 5 | 8 | 0 | 00:00:00.001789 | 00:00:00.001143 | 27840 | 1780992 | scan tblT =268 | 32 5 | 8 | 3 | 00:00:00.001789 | 00:00:00.001143 | 27840 | 1558272 | sort tblT =238 | 32 6 | 9 | 0 | 00:00:00.000595 | 00:00:00.000336 | 27840 | 1558272 | scan tblT =238 | 32 6 | 9 | 1 | 00:00:00.000595 | 00:00:00.000336 | 27840 | 1419844 | return | 32 6 | 10 | 0 | 00:00:00.046609 | 00:00:00.046609 | 27840 | 0 | merge | 1 6 | 10 | 2 | 00:00:00.046609 | 00:00:00.046609 | 0 | 0 | return | 1
  14. 14. いぢめないで… select l_partkey, l_extendedprice from lineitem order by 2, 1; stm | seg | step | maxtime | avgtime | rows | bytes | label | slices -----+-----+------+-----------------+-----------------+-----------+-------------+----------------------+-------- 0 | 0 | 0 | 00:00:23.496729 | 00:00:19.806 | 600037902 | 12000758040 | scan tblP =108542 | 32 0 | 0 | 3 | 00:00:23.496729 | 00:00:19.806 | 600037902 | 9600606432 | sort tblT =238 | 32 1 | 1 | 0 | 00:08:29.514698 | 00:08:29.109248 | 600037902 | 9600606432 | scan tblT =238 | 32 1 | 1 | 1 | 00:08:29.514698 | 00:08:29.109248 | 600037902 | 9600474240 | return | 32 1 | 2 | 0 | 00:08:33.764077 | 00:08:33.764077 | 600037902 | 0 | merge | 1 1 | 2 | 2 | 00:08:33.764077 | 00:08:33.764077 | 0 | 0 | return | 1
  15. 15. データの持ち方も重要 分散キー (distkey) catid category catgroup catname catdesc distkey Slice 0 Slice 1 catitem catid distkey itemid ソートキー (sortkey) Amazon Buffer Create Drive Enjoy . . . . Xbox You zone Super Final high VACUUM
  16. 16. カラムナーDBの十八番、圧縮 エンコード名 キーワード サポートされるデータ型 圧縮の特徴 Byte dictionary BYTEDICT VARCHARとBOOLEAN を除く全て ブロックごとに最大255通りの値を辞書に持たせる ことで1カラム1バイトに圧縮。 Global dictionary GLOBALDICT256, GLOBALDICT64K BOOLEAN以外全て カラム全体で1つの辞書を持つ。256だと255通りの 値を1バイトに、64Kだと65535通りの値を2バイトに 圧縮。 Delta DELTA, DELTA32K SMALLINT (DELTAのみ), INT, BIGINT, DATE, TIMESTAMP, DECIMAL 前の値との差分を格納。差分の値が元データ型の サイズよりも小さければ圧縮可能。 Run-length RUNLENGTH 全て ランレングス圧縮。同一のデータがいくつ連続する かを格納。連続した同一値には高い圧縮率。 LZ (Lempel-Ziv) DEFLATE BOOLEAN, REAL, DOUBLE PRECISION を除く全て LZ法(ZIPなど一般的なファイル圧縮で使われている アルゴリズム)で圧縮。圧縮率は高いが圧縮・展開 のCPU負荷も高い。 Mostly MOSTLY8 SMALLINT, INT, BIGINT, DECIMAL カラム内の値が指定されたデータ型よりも小さいサ イズで格納可能な場合、指定された(元のデータ型 よりも小さい)サイズでデータを格納する。収まらな い場合は元のサイズで格納。 MOSTLY16 INT, BIGINT, DECIMAL MOSTLY32 BIGINT, DECIMAL TEXT255, 32K TEXT255, TEXT32K VARCHARのみ 辞書を使用した圧縮のVARCHAR版。245通りの単 語まで辞書に登録可能。
  17. 17. 上手に圧縮、サイズは1/2以下! create table lineitem ( l_orderkey int8 not null encode delta sortkey distkey, l_partkey int4 not null, l_suppkey int4 not null encode mostly16, l_linenumber int4 not null encode mostly8, l_quantity numeric(19,2) not null encode bytedict, l_extendedprice numeric(19,2) not null encode mostly32, l_discount numeric(19,2) not null encode mostly8, l_tax numeric(19,2) not null encode mostly8, l_returnflag char(1) not null encode runlength, l_linestatus char(1) not null encode runlength, l_shipdate date not null encode delta, l_commitdate date not null encode delta, l_receiptdate date not null encode delta, l_shipinstruct char(25) not null encode bytedict, l_shipmode char(10) not null encode bytedict, l_comment varchar(44) not null ); create table lineitem ( l_orderkey int8 not null sortkey distkey, l_partkey int4 not null, l_suppkey int4 not null, l_linenumber int4 not null, l_quantity numeric(19,2) not null, l_extendedprice numeric(19,2) not null, l_discount numeric(19,2) not null, l_tax numeric(19,2) not null, l_returnflag char(1) not null, l_linestatus char(1) not null, l_shipdate date not null, l_commitdate date not null, l_receiptdate date not null, l_shipinstruct char(25) not null, l_shipmode char(10) not null, l_comment varchar(44) not null ); 行数: 600,037,902 40,204 MB 18,900 MB !
  18. 18. 隠し味はUDF(ユーザー定義関数) • PL/pgSQLの例 CREATE OR REPLACE FUNCTION f_echo(_text varchar) RETURNS varchar AS $$ BEGIN return _text; END; $$ LANGUAGE plpgsql; • C++の例 #include "padb_udf.hpp" PADB_UDF_VERSION(charcount); extern "C" { padb_udf::int_t charcount ( padb_udf::ScalarArg &aux, padb_udf::varchar_t *target, padb_udf::varchar_t *tst ) { padb_udf::int_t ret = 0; if ( tst->len != 1 ) { aux.throwError( __func__,"probe length must be = 1" ); } char ch = tst->str[0]; for ( padb_udf::len_t ix = 0; ix < target->len; ix++ ) { if ( target->str[ix] == ch ) { ret++; } } return aux.retIntVal( ret ); } } CREATE OR REPLACE FUNCTION charcount (target_string varchar, search_character varchar) RETURNS int AS '/tmp/scalar_charcount.o' LANGUAGE C STABLE; • ユーザーのビジネスロジック組み込み • サードパーティ製分析関数 • ODI(On-Demand Integration)の実現
  19. 19. ビッグなデータはHadoopから取り込め!
  20. 20. ビッグなデータはHadoopから取り込め! DataNode DataNode DataNode NameNode Compute Node Compute Node Compute Node LeaderNode これでは遅い…
  21. 21. ビッグなデータはHadoopから取り込め! DataNode DataNode DataNode NameNode Compute Node Compute Node Compute Node LeaderNode 直接ロードしたい! 直接読み込みたい!
  22. 22. Google Booksで現れる単語を見てみよう
  23. 23. まずはHadoopでデータ加工だ! algorithm_PRON 1991 297 185 algorithm_PRON 1992 325 217 algorithm_PRON 1993 336 235 algorithm_PRON 1994 308 202 algorithm_PRON 1995 331 244 algorithm_PRON 1996 376 243 algorithm_PRON 1997 404 243 algorithm_PRON 1998 404 269 algorithm_PRON 1999 495 295 algorithm_PRON 2000 480 318 algorithm PRON 1991 297 185 algorithm PRON 1992 325 217 algorithm PRON 1993 336 235 algorithm PRON 1994 308 202 algorithm PRON 1995 331 244 algorithm PRON 1996 376 243 algorithm PRON 1997 404 243 algorithm PRON 1998 404 269 algorithm PRON 1999 495 295 algorithm PRON 2000 480 318 単語と品詞を分離したい MapReduceだ!
  24. 24. ちょっとしたクエリはODIで
  25. 25. こんなクエリが書けちゃう select word, sum(wordcount) from odi_hadoop_import( with jobname('googlebooks_job') masternode('hadoop01.com') inputdir('/user/dhirama/googlebooksModifyDemo') padb_schema('googlebooksWords') delimiter('¥t') ) where word like 'another%' group by word;
  26. 26. ODIを実行だ!
  27. 27. がっつりロードするならDataFlow!
  28. 28. 高速ロード、すぐに分析!
  29. 29. 最強のタッグがBigDataの世界を変える!
  30. 30. 無断転載を禁ず この文書はあくまでも参考資料であり、掲載されている情報は予告なしに変更されることがあります。 株式会社インサイトテクノロジーは本書の内容に関していかなる保証もしません。また、本書の内容に関連したいかなる 損害についても責任を負いかねます。 本書で使用している製品やサービス名の名称は、各社の商標または登録商標です。
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×