Download - #cwt2016 Apache Kudu 構成とテーブル設計
![Page 1: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/1.jpg)
1©Cloudera,Inc.Allrightsreserved.
ApacheKudu構成とテーブル設計
矢野 智聡/Cloudera株式会社
2016/11/08
![Page 2: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/2.jpg)
2©Cloudera,Inc.Allrightsreserved.
自己紹介
• 矢野 智聡(やの ともあき)
• Customer Operations Engineer(テクニカルサポート)
• お客様がクラスタを運用する上での懸念や問題の解消を支援
![Page 3: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/3.jpg)
©Cloudera,Inc.Allrightsreserved.
アジェンダ
• What’s Apache Kudu?
• ユースケース
• 構成要素と動作
• テーブルとパーティションの設計
• Kuduの関連情報
![Page 4: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/4.jpg)
4©Cloudera,Inc.Allrightsreserved.
What’sApacheKudu?
4
![Page 5: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/5.jpg)
5©Cloudera,Inc.Allrightsreserved.
ApacheKuduStorageforFastAnalyHcsonFastData
• 更新可能なカラムナ ストレージ• ApacheFoundaHonの
オープンソースプロジェクト• Cloudera Managerで
管理可能(ベータ版)
Columnar Store Kudu
![Page 6: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/6.jpg)
6©Cloudera,Inc.Allrightsreserved.
HDFS with Parquet: • 入力はバッチ処理に特化 • 分析時などの大規模データの スキャンが高速
HBase : • 個別のデータの入出力が高速• データのアップデートが可能
更新可能なデータを高速に分析する基盤の不在
Hadoopエコシステムのストレージ関係図
![Page 7: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/7.jpg)
7©Cloudera,Inc.Allrightsreserved.
スケーラブルで高速なテーブル指向のストレージ
• Scalable• デザインとしては数千ノード,数十PBまでの拡張が可能
• Fast• クラスタ上で百万単位のI/O処理が可能• ノードあたり秒間数GB程度の読み込み性能
• Tabular• SQL-likeschema:有限の型のある列(数十程度)の表(HBaseとは異なる)• SQL(Impala/Spark/etc)と “NoSQL” APIs: Java/C++/Python でのアクセス• ALTER TABLEによる高速なメタデータの変更
![Page 8: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/8.jpg)
©Cloudera,Inc.Allrightsreserved.©Cloudera,Inc.Allrightsreserved.
他のエコシステムとのインテグレーション
Kuduは計算処理のためのフレームワークと協調して動作します
• インテグレーションのあるエコシステム• Impala• Spark• MapReduce• Flume• Drill
![Page 9: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/9.jpg)
9©Cloudera,Inc.Allrightsreserved.
ユースケース
![Page 10: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/10.jpg)
10©Cloudera,Inc.Allrightsreserved.
Kuduのユースケース
Kuduはシーケンシャルな読み込みとランダムな読み込み、書き込み処理が同時に発生するような状況に適している● 時系列データ
○ 例:センサーデータ、連続的な市場データ、、 ネットワークモニタリング、不正検知/抑止など○ 想定ワークロード:Insert,updates,scans,lookups
● オンラインレポーティング○ 例:OperaHonalDataStore○ 想定ワークロード:Inserts,updates,scans,lookups
![Page 11: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/11.jpg)
11©Cloudera,Inc.Allrightsreserved.
Hadoop上でのストリーミングデータ分析の現状不正検知システムでのストレージの複雑性
考慮点: ● Parquetへの変換処理の頻度 ● レポート作成時の変換処理の完
了していないデータの扱い ● メンテナンスに対する可用性
新しいパーティション
最近のパーティション
過去のパーティション
HBase
Parquet File
データの蓄積を待機して
HBaseデータのParquetへの
変換
• 現在実行中の処理の待機 • 新しいParquetファイルを参照する
Impalaのパーティションの作成
入力データ(Messaging)
Reporting
Impala on HDFS
![Page 12: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/12.jpg)
12©Cloudera,Inc.Allrightsreserved.
Hadoop上でのストリーミングデータ分析とKudu
改善点: ● 単一システムでの処理
● Cronなどでのバックグラウンド処理が不要
● 新しいデータが即時分析処理に使用可能
過去のデータと新しいデータ
入力データ(Messaging)
Reporting Request
Storage in Kudu
![Page 13: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/13.jpg)
13©Cloudera,Inc.Allrightsreserved.
Xiaomiのユースケース
• 世界4位のスマートフォンメーカー
• モバイルアプリケーションとバックグラウンドサービスのイベント情報の収集
• サービスの監視とトラブルシューティング
◆ 高い書き込み要求
• >200億records/day からさらに増大する流量
◆ 最新のデータに対するクエリ要件と応答速度
• 問題の特定と速やかな解決
◆ トラブルシューティングを容易にするための各行検索
![Page 14: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/14.jpg)
14©Cloudera,Inc.Allrightsreserved.
Xiaomiのビッグデータ解析パイプライン Kudu 導入前
• 処理の長時間化 データ変換における高レイテンシ(1 時間 ~ 1 日)
• 時系列でないデータ ログの到着順は生成順とは異なることがある 例: 一日分のログのために2,3日分のログを処理する必要がある
![Page 15: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/15.jpg)
15©Cloudera,Inc.Allrightsreserved.
Xiaomiのビッグデータ解析パイプラインKudu導入後
• ETL 高速化(0~10s のレイテンシ) アプリのためにデータの変換が必要な処理も高速化
• Kuduへの直接格納(no latency) 格納後即時処理可能
OLAP scan Side table lookup Result store
![Page 16: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/16.jpg)
©Cloudera,Inc.Allrightsreserved. 16
構成要素と動作
![Page 17: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/17.jpg)
17©Cloudera,Inc.Allrightsreserved.
テーブル
• テーブルは複数のカラムから構成される• カラムは下記のいずれかの型を取る必要がある• BOOL,INT8,INT16,INT32,INT64,UNIXTIME_MICROS,FLOAT,DOUBLE,STRING,BINARYカラムはNull値を取りうる
• カラムはbitshuffleなどでエンコーディングおよび圧縮が可能• 圧縮形式はlz4, snappy, gzipが使用可能• エンコーディングおよび圧縮は適用できない組み合わせがあるので注意
![Page 18: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/18.jpg)
18©Cloudera,Inc.Allrightsreserved.
プライマリキー
• 全ての表でプライマリキーは必須• プライマリキーは一つ以上の列の組み合わせ
• プライマリキーの値はユニークである必要がある• プライマリキーには下記は使用できない
• Booleanまたは浮動小数点型• Nullが含まれる列
• プライマリキーの値は更新できない• プライマリキーのカラムは表のはじめの列に定義する
![Page 19: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/19.jpg)
©Cloudera,Inc.Allrightsreserved. 19
タブレット/タブレットサーバ
• タブレットは表をパーティションで分割したもの• 各タブレットはタブレットサーバによって管理される• タブレットの分割にはプライマリキーの値を使用する
• 各列のハッシュ、レンジおよびその組み合わせを分割に使用可能
• タブレット毎にRadconsensusによるN個のレプリカを持つ(default=3)
• レプリカのタブレットサーバは一つのリーダーと複数のフォロワーからなる
• 書き込みはリーダーに対してリクエストされる• 各タブレットサーバのデータはローカルディスクにあり、他のレプリカとは独立している
![Page 20: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/20.jpg)
©Cloudera,Inc.Allrightsreserved.
ImpalaでのCreate tableの例
BIGINTのハッシュとSTRINGのRANGEによるパーティショニング
Kuduの表とのマッピング
![Page 21: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/21.jpg)
©Cloudera,Inc.Allrightsreserved. 21
Metadata/MasterServer
• MetadataはMasterServerに管理される• 表の構成情報
• タブレットの構成情報• タブレットサーバの死活監視やレプリケーション管理
• メタデータはメモリ上にキャッシュされる• クライアントはマスターにアクセスし、アクセスするタブレットの情報を得る
![Page 22: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/22.jpg)
©Cloudera,Inc.Allrightsreserved. 22
Client
‘tlipcon’ は table “T”に存在するか?
Tablet2(Tablet ServerはX,Y,Z)にあるそのうちリーダーはZ…
UPDATE tlipcon SET col=foo where id=‘tlipcon’
Updateの動作例
![Page 23: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/23.jpg)
©Cloudera,Inc.Allrightsreserved. 23
TSA
Tablet1(LEADER)
Client
TSB
Tablet1(FOLLOWER)
TSC
Tablet1(FOLLOWER)
WAL
WALWAL
1a.Client->Leader:Write()RPC
RadConsensus
![Page 24: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/24.jpg)
©Cloudera,Inc.Allrightsreserved. 24
TSA
Tablet1(LEADER)
Client
TSB
Tablet1(FOLLOWER)
TSC
Tablet1(FOLLOWER)
WAL
WALWAL
RadConsensus
TSA
Tablet1(LEADER)
Client
TSB
Tablet1(FOLLOWER)
TSC
Tablet1(FOLLOWER)
WAL
WALWAL
2a.LeaderwriteslocalWAL
2b.Leader->Followers:UpdateConsensus()RPC
![Page 25: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/25.jpg)
©Cloudera,Inc.Allrightsreserved. 25
RadConsensus
TSA
Tablet1(LEADER)
Client
TSB
Tablet1(FOLLOWER)
TSC
Tablet1(FOLLOWER)
WAL
WALWAL
TSA
Tablet1(LEADER)
Client
TSB
Tablet1(FOLLOWER)
TSC
Tablet1(FOLLOWER)
WAL
WALWAL
3.Follower:writeWAL 3.Follower:writeWAL
![Page 26: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/26.jpg)
©Cloudera,Inc.Allrightsreserved. 26
TSA
Tablet1(LEADER)
Client
TSB
Tablet1(FOLLOWER)
TSC
Tablet1(FOLLOWER)
WAL
WALWAL
RadConsensus
TSA
Tablet1(LEADER)
Client
TSB
Tablet1(FOLLOWER)
TSC
Tablet1(FOLLOWER)
WAL
WALWAL
4.Follower->Leader:success
![Page 27: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/27.jpg)
©Cloudera,Inc.Allrightsreserved. 27
TSA
Tablet1(LEADER)
Client
TSB
Tablet1(FOLLOWER)
TSC
Tablet1(FOLLOWER)
WAL
WALWAL
RadConsensus
TSA
Tablet1(LEADER)
Client
TSB
Tablet1(FOLLOWER)
TSC
Tablet1(FOLLOWER)
WAL
WALWAL
5.Leaderhasachievedmajority
![Page 28: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/28.jpg)
©Cloudera,Inc.Allrightsreserved. 28
TSA
Tablet1(LEADER)
Client
TSB
Tablet1(FOLLOWER)
TSC
Tablet1(FOLLOWER)
WAL
WALWAL
RadConsensus
TSA
Tablet1(LEADER)
Client
TSB
Tablet1(FOLLOWER)
TSC
Tablet1(FOLLOWER)
WAL
WALWAL
6.Leader->Client:Success!
![Page 29: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/29.jpg)
©Cloudera,Inc.Allrightsreserved.©Cloudera,Inc.Allrightsreserved. 29
書き込み(insert/update)
• Insertはメモリ上のrow storeに格納される• フラッシュ時にParquetに似たカラムナフォーマットのBase Imageとして
ディスクに格納される• Updateはメモリ上のdeltastoreに格納される
• フラッシュ時にディスクにdeltafilesとして格納される• コンパクションにより以前に書き出されたBase Imageに適用される
![Page 30: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/30.jpg)
©Cloudera,Inc.Allrightsreserved. 30
Kudustorage–InsertsandFlushesMemRowSet
name pay role
DiskRowSet1
name pay role
DiskRowSet2
INSERT(“doug”,“$1B”,“Hadoopman”)
flush
![Page 31: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/31.jpg)
©Cloudera,Inc.Allrightsreserved. 31
Kudustorage-UpdatesMemRowSet
name pay role
DiskRowSet 1
name pay role
DiskRowSet 2 Delta MS
Delta MS
DiskRowSetはそれぞれ専用のDeltaMemStoreをもちupdateはこちらで処理する
base data
base data
![Page 32: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/32.jpg)
©Cloudera,Inc.Allrightsreserved. 32
Kudustorage–UpdatesMemRowSet
name pay role
DiskRowSet 1
name pay role
DiskRowSet 2 Delta MS
Delta MS
UPDATE set pay=“$1M” WHERE name=“todd”
Bloom says: no!
Bloom says: maybe!
150: col 1=$1M
base data
Bloom Filterを利用した絞り込み
![Page 33: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/33.jpg)
©Cloudera,Inc.Allrightsreserved. 33
TSA
Tablet1(LEADER)
TSB
Tablet1(FOLLOWER)
TSC
Tablet1(FOLLOWER)
WAL
WALWAL
耐障害性
TSA
Tablet1(LEADER)
Client
TSB
Tablet1(FOLLOWER)
TSC
Tablet1(FOLLOWER)
WAL
WALWAL
![Page 34: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/34.jpg)
©Cloudera,Inc.Allrightsreserved. 34
TSA
Tablet1(LEADER)
TSB
Tablet1(FOLLOWER)
WAL
WAL
耐障害性
?
TSA
Tablet1(LEADER)
Client
TSB
Tablet1(FOLLOWER)
WAL
WAL
![Page 35: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/35.jpg)
©Cloudera,Inc.Allrightsreserved.©Cloudera,Inc.Allrightsreserved. 35
耐障害性(一時停止)
• フォロワーの一時的な停止:1. リーダーは依然過半数の取得が可能なのでサービスを継続2. 5分以内に起動すれば透過的に再度フォロワーとして加入
• リーダーの一時的な停止:1. フォロワーは1.5秒毎のリーダーからのハートビートを待機2. 3回ハートビートがなかった場合:リーダーの再選出
新しいリーダーは数秒の内に選出される3. 停止した元リーダーが5分以内に起動した場合はフォロワーとして加入
• N個のレプリカは(N-1)/2までのタブレットサーバ停止に対応可
![Page 36: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/36.jpg)
©Cloudera,Inc.Allrightsreserved.©Cloudera,Inc.Allrightsreserved. 36
耐障害性(永続停止)
1. リーダーが5分を閾値に検知2. 該当のフォロワーを排除3. マスターが新しいタブレットサーバーを選択4. リーダーが新しいタブレットサーバーにデータをコピー5. 新しいタブレットサーバーがフォロワーとして参加
![Page 37: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/37.jpg)
©Cloudera,Inc.Allrightsreserved.©Cloudera,Inc.Allrightsreserved.
チューニングガイドライン• タブレットサーバー毎のタブレットの数
• HWにもよるが、10-40程度• タブレットのサイズ数百GiB程度
• SSDが使える場合はWALを優先的に割り当てる• Diskが多く使えたり、SSDが使える場合はMaintenanceManagerのThread数
を増加させる(MaintenanceManager=Delta RowSetのコンパクションなどを行うスレッド)
• パーティションは分割されないので設計が重要
![Page 38: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/38.jpg)
©Cloudera,Inc.Allrightsreserved. 38
表とパーティションの設計
![Page 39: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/39.jpg)
©Cloudera,Inc.Allrightsreserved. 39
時系列データの例
Series Time Value
us-east.appserver01.loadavg.1min 2016-05-09T15:14:30Z 0.44
us-east.appserver01.loadavg.1min 2016-05-09T15:14:40Z 0.53
us-west.dbserver03.rss 2016-05-09T15:14:30Z 1572864
us-west.dbserver03.rss 2016-05-09T15:15:00Z 2097152
![Page 40: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/40.jpg)
©Cloudera,Inc.Allrightsreserved. 40
想定状況
• データ流入は各ソースの最新のtimestampのもの• 読み込みは特定のシリーズの広範囲のtimestamp
SELECT time, value FROM timeseries WHERE series = "us-west.dbserver03.rss" AND time >= 2016-05-08T00:00:00;
クエリ例
![Page 41: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/41.jpg)
©Cloudera,Inc.Allrightsreserved.
時刻のレンジによるパーティション
![Page 42: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/42.jpg)
©Cloudera,Inc.Allrightsreserved.
時刻のレンジによるパーティション(inserts)
新しいデータは全て一つのタブレットへ
![Page 43: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/43.jpg)
©Cloudera,Inc.Allrightsreserved.
時刻のレンジによるパーティション(scans)
多くのtimestampにまたがるクエリはパーティション間で分散される
![Page 44: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/44.jpg)
©Cloudera,Inc.Allrightsreserved.
ノードのレンジによるパーティション
![Page 45: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/45.jpg)
©Cloudera,Inc.Allrightsreserved.
ノードのレンジによるパーティション(inserts)
Insertは複数のパーティションに分散される
![Page 46: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/46.jpg)
©Cloudera,Inc.Allrightsreserved.
ノードのレンジによるパーティション(scans)
Scanは特定のパーティションに限定される
![Page 47: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/47.jpg)
©Cloudera,Inc.Allrightsreserved.
ノードのレンジによるパーティション
特定のシリーズ(同一サービスのノード群など)で多くのデータが生成されると流量が偏り、パーティションのサイズが偏る
![Page 48: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/48.jpg)
©Cloudera,Inc.Allrightsreserved.
ノードのハッシュパーティション
![Page 49: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/49.jpg)
©Cloudera,Inc.Allrightsreserved.
ノードのハッシュパーティション(inserts)
Insertは複数のパーティションに分散される(Hashによる平均化も期待される)
![Page 50: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/50.jpg)
©Cloudera,Inc.Allrightsreserved.
ノードのハッシュパーティション(scans)
Scanは特定のパーティションに限定される
![Page 51: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/51.jpg)
©Cloudera,Inc.Allrightsreserved.
ノードのハッシュパーティション
関連するシリーズ(同一サービスのノード群など)のデータが分散されるので平均化されやすくなる
![Page 52: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/52.jpg)
©Cloudera,Inc.Allrightsreserved.
時刻のレンジとノードハッシュ
時刻
ノードハッシュ
![Page 53: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/53.jpg)
©Cloudera,Inc.Allrightsreserved.
時刻のレンジとノードハッシュ(inserts)
Insertは最新のtimestampのパーティション間で分散される
時刻
ノードハッシュ
![Page 54: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/54.jpg)
©Cloudera,Inc.Allrightsreserved.
多くのtimestampにまたがるクエリはパーティション間で分散される
時刻
時刻のレンジとノードハッシュ(scans)ノードハッシュ
![Page 55: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/55.jpg)
©Cloudera,Inc.Allrightsreserved.
表とパーティション設計の考慮点
• プライマリキーにする列の検討
• 複数列とする場合の分割性能
• パーティションの種類と組み合わせの検討(Range/Hash)
• データ流入、更新パターンの検討/テスト
• アクセスパターンの検討/テスト
• Cloudera Managerで管理していれば処理実行時の負荷をチャートで把握可能
![Page 56: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/56.jpg)
©Cloudera,Inc.Allrightsreserved. 56
Kuduの関連情報
![Page 57: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/57.jpg)
©Cloudera,Inc.Allrightsreserved.
インストール情報
• Kuduのインストール(Cloudera Manager使用) http://www.cloudera.com/documentation/betas/kudu/latest/topics/kudu_installation.html
OSDのダウンロードと設置、Cloudera Manager Server再起動が必要なので
注意
• Impala-Kuduのインストール(CDH5.8以前)
http://www.cloudera.com/documentation/betas/kudu/latest/topics/kudu_impala.html#install_impala
(CDH5.9以降のImpalaはKuduとのインテグレーションが組み込まれている)
![Page 58: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/58.jpg)
©Cloudera,Inc.Allrightsreserved.
Kuduのトラブルシューティングと注意事項
• Apache Kudu Troubleshooting
http://kudu.apache.org/docs/troubleshooting.html
トラブルシューティング集、スパースファイルを処理するためのHole PunchingについてはLinux Kernelのバージョンとファイルシステムの要件があるので特に注意
Linux: RHEL/CentOS 6.4 + patch or later, Ubuntu 14.04
FileSystem: XFS/Ext4
![Page 59: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/59.jpg)
©Cloudera,Inc.Allrightsreserved.
Kuduの情報
• Apache Kudu project page
http://kudu.apache.org/
ドキュメントをはじめ各コミュニティ(slack, JIRA, mailing listなど)へのアクセス方法やBlog形式でのWeekly Reportを確認できる
• Cloudera Engineering Blog
https://blog.cloudera.com/
今後の方針やパフォーマンステスト、ベストプラクティスなど
![Page 60: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/60.jpg)
©Cloudera,Inc.Allrightsreserved.
Kuduの詳細情報
• Kudu Design Docs
https://github.com/apache/kudu/tree/master/docs/design-docs
Tabletのコンパクションやバックグラウンドでのメンテナンス処理、
APIなどのデザインについて情報がまとまっている
![Page 61: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/61.jpg)
©Cloudera,Inc.Allrightsreserved.
まとめ
• Apache KuduはHadoopクラスタの新しいカラムナストレージエンジン
• タブレットサーバーによりデータが管理され、Raft consensus による
レプリケーション、耐障害性を備えている
• 使用用途によってはHDFS+ParquetやHBaseの方が適切なことはあるので
検討と検証が不可欠
• パフォーマンス維持と安定運用のためにはパーティションの設計が重要
![Page 62: #cwt2016 Apache Kudu 構成とテーブル設計](https://reader034.vdocuments.site/reader034/viewer/2022052210/586f9ba21a28abcc238b57bb/html5/thumbnails/62.jpg)
©Cloudera,Inc.Allrightsreserved.
Thankyou!