Apache Drillの調査

エッジコンピューティングによって高性能化したエッジ機器にデータが格納されるようになると、クラウドサービスにデータを集めないでエッジ機器のデータを直接検索したいとニーズが生まれてきました。そして、IoT(Internet of Things) システムでは広域に分散されたエッジ機器のデータ群を高速に検索するために、マルチデータベースにアクセスできる分散SQLエンジンが求められています。そこで、分散SQLエンジンの Apache Drill についてまとめました。
動作環境やライセンスなど基本情報から、対応プログラム言語、可用性、拡張性など機能情報やセキュリティまで掘り下げて、以下のようにまとめました。

# Apache Drill

Drill は構造化/セミ構造化/ネスト化データを含んだ大規模データセット向け低レイテンシ分散クエリエンジンです。Drill は Google の Dremel の刺激を受けて、数千ノードをスケールさせ、かつ BI/Analytics が要求するインタラクティブ可能な速度でペタバイト級データをクエリできるように設計されています。さらに、Drill は大規模データセット上のインタラクティブ・アドホック・クエリに有益です。また、Drill は集中型メタデータ・リポジトリを必要としません。<br>参照 : [Architecture Introduction](https://drill.apache.org/docs/architecture-introduction/)

# 基本情報

|項目&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|内容|
|-----|--------|
|URL|https://drill.apache.org/|
|データモデル|JSONデータモデル<br>参照 : [Drillix: Combined Operational &amp; Analytical SQL at Scale](http://phoenix.apache.org/presentations/Drillix.pdf)|
|動作環境|**CPU**：<br>**メモリ**： 4GB 以上 <br>**ストレージ** : <br>**OS**：Linux, Mac OS X, Windows (Oracle JDK version 8以上) <br>参照 : [Drill in 10 Minutes](https://drill.apache.org/docs/drill-in-10-minutes/)|
|実装言語|Java|
|ライセンス|Apache License, Version 2.0<br>https://github.com/apache/drill/blob/master/LICENSE|
|主なバージョン|**1.16.0** (2019-05-02) : ANALYZE TABLEステートメントでParquetデータの統計計算、CREATE OR REPLACE SCHEMAコマンドでテキストファイルのスキーマを定義、REFRESH TABLE METADATAコマンドでカラム指定でのメタデータのキャッシュファイルを生成機能、SYSLOG 用プラグイン<br>**1.15.0** (2018-12-31) : SQLLine のアップグレード、インデックスのサポート、カスタム・アクセス制御リスト(ACL)付き znodeによるセキュア機能、INFORMATION_SCHEMAファイルテーブル、システムテーブル・ファンクション<br>**1.14.0** (2018-08-05) : Docker containerでDrillを動かすための機能、ストレージ・プラグインのコンフィグレーションのエクスポートとセーブ機能、イメージ・メタデータ・フォーマット・プラグインの追加、セッション単位の Hiveプロパティの設定オプション|
|開発元|Apache Software Foundation|
|開発体制|PMC(Project Management Committee) Chair 1名(Arina Ielchiieva氏)、PMC 24名、Committers 53名、Contoributors 125名<br>参照 : [Apache Drill Committee](https://projects.apache.org/committee.html?drill)|
|活動状況|開発者用メーリングリストの投稿月間 平均約 600件、GitHubでソースコード・コミット月間約 20件<br>参照 : [dev@drill.apache.org](http://mail-archives.apache.org/mod_mbox/drill-dev/)|
|国内サポート体制|現時点で国内での保守サポートサービスを行っている企業、団体はありません。|
|その他||

# 機能情報

|項目&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|内容|
|-----|--------|
|対応プログラム言語|RESTful HTTP API、JDBC、ODBCを利用可能なプログラム言語であればアクセス可能です|
|アクセス可能なDB|HBase、MongoDB、MapR-DB、Hive、HDFS、MapR-FS、Amazon S3、Azure Blob Storage、Google Cloud Storage、OpenStack Swift、NAS、JSONデータモデル、ローカルファイル(JSON形式/CSV形式)、ODBC/JDBC、PostgreSQL、 MySQL、Oracle、MS SQL Server、Apache Derby、Restful APIなどがアクセス可能です。<br>参照 : [Query any non-relational datastore](https://drill.apache.org/)|
|クエリ言語|SQL|
|マルチテナント|マルチテナント機能は存在しません|
|インデックス|DrillはMapR-DBストレージプラグインだけインデックスを(Drill 1.5から)サポートします。インデックスベースのクエリプランを生成するためにデータソースのインデックスを利用することができます(primary か secondary)。<br>Drillはインデックスをカバーリング、ノンカバーリング、ファンクショナルのインデックスプランで利用することができる。<br>参照 : [Querying Indexes Introduction](https://drill.apache.org/docs/querying-indexes-introduction/)|
|トランザクション|トランザクション機能は存在しません|
|ストアドプロシジャ|ユーザ定義関数を作成することが可能です。<br>参照 : [Develop Custom Functions Introduction](https://drill.apache.org/docs/develop-custom-functions-introduction/)|
|dockerコンテナ|dockerhubでDrillのDocker Containerイメージが公開されています。<br>https://hub.docker.com/r/harisekhon/apache-drill/|
|性能拡張|Drillbitと呼ばれる Drilを構成する各サーバノードによって性能拡張を行います。各DrillBitは処理のコーディネーション、クエリプランニング、処理の実行などのすべての役割を全ノードが共通で持っています。<br>参照 : [Architecture](https://drill.apache.org/architecture/)|
|高可用性|Drillbitに有効なフォールト・トレランスを持っていません|
|運用|バックアップや監視ツールは存在しません|
|出来ないこと||

# セキュリティ

|項目&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|内容|
|-----|--------|
|通信暗号化|クライアントからのすべての通信は、SSL/TLS 1.2に対応しています。|
|DB格納領域の暗号化|なし|
|認証機能|Kerberos認証、PAM認証、ダイジェスト認証が使用可能です|
|権限管理|権限管理は可能です|
|DB監査|Auditロギングがあります|

参照 : [Securing Drill Introduction](https://drill.apache.org/docs/securing-drill-introduction/)

# まとめ

Apache Drill は、分散型SQLクエリエンジンに特化しているため、一般的なDB機能はサポートしていません。特に高可用性、運用面は対策が必要だと考えます。マルチテナント機能がないことはマイナスポイントと考えます。
また、[SQL on Hadoopのホントのところ～Impala v.s. Hive on Tez v.s. Drill～](https://www.ospn.jp/osc2017-fall/pdf/OSC2017_TokyoFall_Hitachi.pdf)の18ページで報告されているように、クエリ実行成功数が極端に少なく検証が困難、実行成功したクエリでも最速となるケースが見られない、という現象を私達も確認しています。
これらの状況から、Apeche Drillは、IoTデータのビッグデータ検索には向いていないと考えます。

掲載内容は、(株)東芝 デジタルイノベーションテクノロジーセンター及びソフトウェア技術センターの見解です。コメント等は広くご意見を頂ければ幸いです。<br>
また、記述について誤りがあったり、気になることがあれば、編集リクエストやコメントでフィードバックしていただけると助かります。