Weitere ähnliche Inhalte
Ähnlich wie Kuduを調べてみた #dogenzakalt (20)
Mehr von Toshihiro Suzuki (9)
Kuduを調べてみた #dogenzakalt
- 2. 自己紹介
● 鈴木俊裕(すずき としひろ)
● ソフトウェアエンジニア
● サイバーエージェント 技術本部 秋葉原ラボ
○ Hadoopを用いたログ解析基盤
○ HBaseを用いた基盤システム
● 最近の興味:Go, NewSQL
● Twitter @brfrn169
● 著書「HBase徹底入門」
- 6. Kuduの位置づけ
● HDFS + Parquet or ORC
○ スキャン ◎
○ ランダムアクセス ☓
● HBase, Cassandra
○ スキャン ☓ or △
○ ランダムアクセス ◎
● Kudu
○ スキャン ◯
○ ランダムアクセス ◯
- 11. API
● Java, C++, Python(実験段階)
● 書き込みは Insert, Update, Delete
○ 主キーを指定しなければならない
○ (HBase等のように)書き込み時にタイムスタンプを指定で
きない
○ 複数RowのトランザクショナルAPIはない
■ 単一Row内の更新はアトミック
- 12. API
● 読み込みは Scan のみ
○ Filterの指定はできる
■ Colmunの値と定数の比較(e.g. col = “aaa”)
■ 主キーのレンジ(e.g. key >= 100 AND key <= 200)
○ プロジェクション(射影)を指定できる(e.g. SELECT key,
col where ...)
■ KuduはカラムナストレージエンジンなのでColumnを絞
るとパフォーマンスがよくなる
○ タイムスタンプを指定して point-in-time クエリが可能
- 15. アーキテクチャ
● データのパーティショニング
○ key-range-based の例
CREATE TABLE customers (
id STRING,
name STRING,
age INT
)
DISTRIBUTE BY RANGE(id)
SPLIT ROWS(('a'), ('b'), ('c'), .., ('y'), ('z'))
TBLPROPERTIES(
'storage_handler' = 'com.cloudera.kudu.hive.KuduStorageHandler',
'kudu.table_name' = 'customers',
'kudu.master_addresses' = 'kudu-master1:7051',
'kudu.key_columns' = 'id'
);
- 16. アーキテクチャ
● データのパーティショニング
○ hash-based の例
CREATE TABLE customers (
id STRING,
name STRING,
age INT
)
DISTRIBUTE BY HASH(id) INTO 16 BUCKETS
TBLPROPERTIES(
'storage_handler' = 'com.cloudera.kudu.hive.KuduStorageHandler',
'kudu.table_name' = 'customers',
'kudu.master_addresses' = 'kudu-master1:7051',
'kudu.key_columns' = 'id'
);
- 25. まとめ
● データモデルはRDBに近い
● APIはInsert, Update, Delete, Scan
● TableはTabletにパーティショニングされる
● パーティション方式はkey-range-based, hash-based, それら
の組み合わせ
● レプリケーションはRaftで
● Master + Tabletサーバ 構成
- 27. インストール
● 詳細は省略
● Cloudera Managerを使えば簡単
○ Kudu
■ http://getkudu.io/docs/installation.html
○ Impala_Kudu
■ http://getkudu.io/docs/kudu_impala_integration.html
● ただし、CPUがSSE4.2やSSSE3をサポートしていないと起動
しない
- 52. Tabletストレージ
● Delta Compaction
DiskRowSet
col2 col3col1 DeltaMemStoreDeltaFileDeltaFileDeltaFile
DiskRowSet
col2 col3col1 DeltaMemStore
DeltaFile
(REDO)
DeltaFile
(UNDO)
新しい
Base Data
マージされなかった
DeltaFile
Base Dataより過去の差分
(point-in-timeクエリ用)
- 55. Tabletストレージ
● RowSet Compaction
DiskRowSet1PK=alice PK=joe PK=linda PK=linda
DiskRowSet2PK=bob PK=jon PK=mary PK=zeke
DiskRowSet3PK=carl PK=julie PK=omar PK=zoe
DiskRowSet4PK=alice PK=bob PK=carl PK=joe
DiskRowSet5PK=jon PK=julie PK=linda PK=mary
DiskRowSet6PK=omar PK=zach PK=zeka PK=zoe