Drillを読んでみよう
Kai Sasaki(@Lewuathe)
自己紹介
• 佐々木 海(@Lewuathe)
• Hadoop, Stormなどの開発、運用
• Spark MLLibの開発も手伝ってます
• Big DataとDeep Learningをつなげるのが夢
Apache Drill
• MapRが中心となって開発している分散SQLエンジン
• GoogleのDremel論文がもとになっている
• 同種のソフトウェアとしては以下が有名
• Impala (http://impala.io/)
• Phoenix (http://phoenix.apache.org/)
• Presto (https://prestodb.io/)

今日のお話
• Drillの元論文を読んでみよう
• Drillのドキュメントを読んでみよう
• Drillのソースコードを読んでみよう
• まとめ
Dremel
• Googleの社内で利用されているアドホッククエリ
のためのリアルタイム分析プラットフォーム
• BigQueryのバックエンド
• 論文は公開されている
• “Dremel: Interactive Analysis of Web-Scale Datasets"
Dremelの貢献
• ネストされたデータに対するColumnar Storage Format
• 木構造のNode群によるクエリ実行とAggregation
• 数千規模のノードでのスケール
Columnar Storage Format
http://static.googleusercontent.com/media/research.google.com/ja//pubs/archive/36632.pdf
Columnar Storage Format
http://static.googleusercontent.com/media/research.google.com/ja//pubs/archive/36632.pdf
Columnar Storage Format
http://static.googleusercontent.com/media/research.google.com/ja//pubs/archive/36632.pdf
instantiate
Columnar Storage Format
http://static.googleusercontent.com/media/research.google.com/ja//pubs/archive/36632.pdf
CSF
r: Repetition Level
d: Definition LebelsDefinition Level
Columnar Storage Format
http://static.googleusercontent.com/media/research.google.com/ja//pubs/archive/36632.pdf
CSF
r: Repetition Level
d: Definition Lebels
Loss Less
Definition Level
ドキュメントを読んでみよう
Agility

構築利用が容易。ITチームの力を必要としない
Flexibility

半構造化データ、ネストされたデータに対応
Familiarity

ANSI SQLのスキルセットが使える。JDBC/ODBC経由での既
存のBIツールも利用可能。
Agility
Embedded Mode

serviceがコマンドライン動作時に起動。試しに簡単に使うこ
とができる。
Distributed Mode

Productionでの動作モード。クラスタ上にDrillbitサービスを起
動する。ZooKeeperサーバも必要。
Agility
Distributed Mode用のCookbookを用意
https://supermarket.chef.io/cookbooks/drill
Flexibility
• Data Sourceへの接続はPluginから提供される
Flexibility
• Data Sourceへの接続はPluginから提供される
Familiarity
!
異なるJSONファイルに対してのjoin操作
ソースを読んでみよう
• SQLLine

RDBMSと接続するためのコンソールユーティリティ
• Optiq

JDBCサーバ、SQLパーサなどを含むフレームワーク"
• Drillbit

各サーバに配置されるDrillクラスタを構成するノードサービス

クエリプランの構築、実行などを担う
SQLLine
1. クエリを発行
Optiq
DrillClient
Drillbit Drillbit Drillbit Drillbit Drillbit
SQLLine
1. クエリを発行
Optiq
DrillClient
Drillbit Drillbit Drillbit Drillbit Drillbit
2. JDBC接続でパース
SQLLine
1. クエリを発行
Optiq
DrillClient
Drillbit Drillbit Drillbit Drillbit Drillbit
2. JDBC接続でパース
3. Logical Planを渡す
SQLLine
1. クエリを発行
Optiq
DrillClient
Drillbit Drillbit Drillbit Drillbit Drillbit
2. JDBC接続でパース
3. Logical Planを渡す
4. ProtocolBufferでPlanを送信
SQLLine
1. クエリを発行
Optiq
DrillClient
Drillbit Drillbit Drillbit Drillbit Drillbit
Foreman
2. JDBC接続でパース
3. Logical Planを渡す
4. ProtocolBufferでPlanを送信
5. クエリ実行を管理するForemanが起動
SQLLine
1. クエリを発行
Optiq
DrillClient
Drillbit Drillbit Drillbit Drillbit Drillbit
Foreman
2. JDBC接続でパース
3. Logical Planを渡す
4. ProtocolBufferでPlanを送信
5. クエリ実行を管理するForemanが起動
6. Planのfragmentをばらまく
特徴
• JDBC, ODBCが使えるどんなツールからもSQL

を発行できる
• クエリの受付に関してSPOFがない
• Fragmentを分散できればできるほどスループット
があがる
Contributionのアイデア
SQL Functions

Add, AVG, ConvertなどのSQL上で利用できる関数群

exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl
New File Format

XML, Apache Avro, Thrift"
New Data Source

Apache Solr, Elastic Search, MySQL, HTTP URL
New Query Language

Pig Latin, HiveQL
まとめ
• DrillはSelf-Drivenな分散SQLエンジン
• データソースとしての選択が柔軟に行える
• 一般的なSQLのスキルセットが使える
• 各コンポーネントが疎結合なため拡張性が高い
ありがとうございました

Reading drill