28
Drillを読んでみよう Kai Sasaki(@Lewuathe)

Reading drill

Embed Size (px)

Citation preview

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 Lebels

佐々木 海
佐々木 海
Definition 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サーバも必要。

AgilityDistributed Mode用のCookbookを用意

https://supermarket.chef.io/cookbooks/drill

Flexibility• Data Sourceへの接続はPluginから提供される

佐々木 海

Flexibility• Data Sourceへの接続はPluginから提供される

Familiarity��,'%&�'3+..�7-�.1&$.�� ����!�.10'10�/$+0�5(/2�� �#�10'10�!(/2#����������������������������������.10'10��/$+0�5(/2�� �#�10'10��!(/2#���������������������������������')4�#��.10'10"6($5*(3�,410#�.10'10��������������������������������')4�#��.10'10"6($5*(3��,410#�.10'10��������������������������������.10'10�0$/(���.10'10��0$/(���!��������������������������������8��10'10�!(/2�8��10'10��!(/2�8���������������������������������8������ ������8����� ������8����������������������������������316�4(.(&5('������4(&10'4�

異なるJSONファイルに対してのjoin操作

ソースを読んでみよう• SQLLine

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

• OptiqJDBCサーバ、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 FormatXML, Apache Avro, Thrift"

New Data Source Apache Solr, Elastic Search, MySQL, HTTP URL

New Query LanguagePig Latin, HiveQL

まとめ• DrillはSelf-Drivenな分散SQLエンジン

• データソースとしての選択が柔軟に行える

• 一般的なSQLのスキルセットが使える

• 各コンポーネントが疎結合なため拡張性が高い

ありがとうございました