沼津暮らし

沼津で暮らしているウェブエンジニアが雑多に書くブログ

Apache Drill をインストールする

みなさん Apache Drill って使ったことありますか?

僕は Hive とか Presto は良く使うのですが、Apache Drill は試したことはありません。

今回は Apache Drill のインストールから簡単なクエリを試すところまでをやりたいと思います。

Apache Drill って?

Google が 2010 年に出した「Dremel」の論文のオープンソース実装らしいです。

特徴としてはHive とか Presto ではデータソースに対してどのような構造でデータを扱うか事前に定義が必要ですが、Drill では不要な事。

Apache Drill - Schema-free SQL for Hadoop, NoSQL and Cloud Storage

例えば Hive とかでは JSON などは扱えますが、
JSON に対してどのような構造で処理をするかテーブルとして定義が必要です。

Drill ではこのような事前の定義を必要とすることなくクエリの実行ができるらしいです。

試す環境

自宅の Linux の環境でスタンドアローンで試してみます。 
本当は複数台で試したいところですが・・・

インストール

ドキュメントを参考にインストール

Installing Drill on Linux and Mac OS X - Apache Drill

[localhost] $ wget http://apache.mirrors.hoobly.com/drill/drill-1.11.0/apache-drill-1.11.0.tar.gz
[localhost] $ tar xvf apache-drill-1.11.0.tar.gz

 起動と簡単なクエリを試す

[localhost] $ bin/drill-embedded

 起動が完了したので早速試して適当に試してみようと思います。

今回使用するのは以下の郵便番号の csv を利用しようと思います。

郵便番号データダウンロード - 日本郵便

カラム名を付けたいのでヘッダーと Shift-JIS から UTF8 に変換

以下は挿入したヘッダー

全国地方公共団体コード,(旧)郵便番号,郵便番号,都道府県名(半角カナ),市区町村名(半角カナ),町域名(半角カナ),都道府県名,市区町村名,町域名,flag0,flag1,flag2,flag3,flag4,flag5

文字コードの変換

[localhost] $ iconv -f Shift-JIS -t UTF8 ken_all.csv >> ken_all_utf8.csvh
[localhost] $ head -n 3 ken_all_utf8.csvh
全国地方公共団体コード,(旧)郵便番号,郵便番号,都道府県名(半角カナ),市区町村名(半角カナ),町域名(半角カナ),都道府県名,市区町村名,町域名,flag0,flag1,flag2,flag3,flag4,flag5
01101,"060  ","0600000","ホツカイドウ","サツポロシチユウオウク","イカニケイサイガナイバアイ","北海道","札幌市中央区","以下に掲載がない場合",0,0,0,0,0,0
01101,"064  ","0640941","ホツカイドウ","サツポロシチユウオウク","アサヒガオカ","北海道","札幌市中央区","旭ケ丘",0,0,1,0,0,0

 Drill でみて見ると・・・

0: jdbc:drill:zk=local> select * from dfs.`/tmp/ken_all_utf8.csvh` limit 10;
+--------------+-------------+----------+--------------+---------------+-----------------------+--------+---------+----------------+--------+--------+--------+--------+--------+--------+
| 全国地方公共団体コード  | col_旧_郵便番号  |   郵便番号   | 都道府県名_半角カナ_  |  市区町村名_半角カナ_  |       町域名_半角カナ_       | 都道府県名  |  市区町村名  |      町域名       | flag0  | flag1  | flag2  | flag3  | flag4  | flag5  |
+--------------+-------------+----------+--------------+---------------+-----------------------+--------+---------+----------------+--------+--------+--------+--------+--------+--------+
     |1        | 060         | 0600000  | ホツカイドウ      | サツポロシチユウオウク  | イカニケイサイガナイバアイ       | 北海道    | 札幌市中央区  | 以下に掲載がない場合     | 0      | 0      | 0      | 0      | 0      | 0
     |1        | 064         | 0640941  | ホツカイドウ      | サツポロシチユウオウク  | アサヒガオカ               | 北海道    | 札幌市中央区  | 旭ケ丘            | 0      | 0      | 1      | 0      | 0      | 0
     |1        | 060         | 0600041  | ホツカイドウ      | サツポロシチユウオウク  | オオドオリヒガシ            | 北海道    | 札幌市中央区  | 大通東            | 0      | 0      | 1      | 0      | 0      | 0
     |1        | 060         | 0600042  | ホツカイドウ      | サツポロシチユウオウク  | オオドオリニシ(1-19チヨウメ)    | 北海道    | 札幌市中央区  | 大通西(1~19丁目)    | 1      | 0      | 1      | 0      | 0      | 0
     |1        | 064         | 0640820  | ホツカイドウ      | サツポロシチユウオウク  | オオドオリニシ(20-28チヨウメ)   | 北海道    | 札幌市中央区  | 大通西(20~28丁目)   | 1      | 0      | 1      | 0      | 0      | 0
     |1        | 060         | 0600031  | ホツカイドウ      | サツポロシチユウオウク  | キタ1ジヨウヒガシ           | 北海道    | 札幌市中央区  | 北一条東           | 0      | 0      | 1      | 0      | 0      | 0
     |1        | 060         | 0600001  | ホツカイドウ      | サツポロシチユウオウク  | キタ1ジヨウニシ(1-19チヨウメ)   | 北海道    | 札幌市中央区  | 北一条西(1~19丁目)   | 1      | 0      | 1      | 0      | 0      | 0
     |1        | 064         | 0640821  | ホツカイドウ      | サツポロシチユウオウク  | キタ1ジヨウニシ(20-28チヨウメ)  | 北海道    | 札幌市中央区  | 北一条西(20~28丁目)  | 1      | 0      | 1      | 0      | 0      | 0
     |1        | 060         | 0600032  | ホツカイドウ      | サツポロシチユウオウク  | キタ2ジヨウヒガシ           | 北海道    | 札幌市中央区  | 北二条東           | 0      | 0      | 1      | 0      | 0      | 0
     |1        | 060         | 0600002  | ホツカイドウ      | サツポロシチユウオウク  | キタ2ジヨウニシ(1-19チヨウメ)   | 北海道    | 札幌市中央区  | 北二条西(1~19丁目)   | 1      | 0      | 1      | 0      | 0      | 0
+--------------+-------------+----------+--------------+---------------+-----------------------+--------+---------+----------------+--------+--------+--------+--------+--------+--------+

処理ができるようになったみたいです。

スキーマレスという事だけあって簡単です。

都道府県別の郵便番号のカウントもしてみました。

0: jdbc:drill:zk=local> select 都道府県名,count(1) as c from dfs.`/tmp/ken_all_utf8.csvh` group by 都道府県名 order by c desc;
+--------+-------+
| 都道府県名  |   c   |
+--------+-------+
| 北海道    | 8253  |
| 愛知県    | 7695  |
| 京都府    | 6673  |
| 新潟県    | 5441  |
| 兵庫県    | 5221  |
| 福島県    | 3942  |
| 東京都    | 3851  |
| 大阪府    | 3847  |
| 千葉県    | 3593  |
| 岐阜県    | 3369  |
| 宮城県    | 3360  |
| 福岡県    | 3295  |
| 富山県    | 3257  |
| 埼玉県    | 2956  |
| 静岡県    | 2945  |
| 茨城県    | 2858  |
| 石川県    | 2552  |
| 青森県    | 2518  |
| 三重県    | 2475  |
| 神奈川県   | 2290  |
| 福井県    | 2261  |
| 岡山県    | 2189  |
| 広島県    | 2160  |
| 秋田県    | 2156  |
| 岩手県    | 2073  |
| 山形県    | 1958  |
| 奈良県    | 1935  |
| 熊本県    | 1897  |
| 長崎県    | 1894  |
| 滋賀県    | 1847  |
| 大分県    | 1845  |
| 栃木県    | 1834  |
| 山口県    | 1813  |
| 愛媛県    | 1745  |
| 高知県    | 1695  |
| 長野県    | 1685  |
| 和歌山県   | 1601  |
| 群馬県    | 1501  |
| 鹿児島県   | 1459  |
| 徳島県    | 1426  |
| 鳥取県    | 1397  |
| 島根県    | 1183  |
| 山梨県    | 949   |
| 宮崎県    | 877   |
| 佐賀県    | 872   |
| 沖縄県    | 799   |
| 香川県    | 712   |
+--------+-------+
47 rows selected (2.333 seconds)

カラム名がマルチバイトでアクセスできるのに気持ち悪い感じがありますが、
正常に動作し集計ができました。

まとめ

スタンドアローンで動作させるのはすごい簡単でした。
次は性能面なども見ていきたいと思います。