Symfoware

Symfowareについての考察blog

Apache Drill 1.0をDebian 8(jessie)にインストールする

Apache Drill
http://drill.apache.org/


Query any non-relational datastore (well, almost...)



とのことで、データの保存形式が何であってもSQL文が実行できるようです。
早速、Debian 8にインストールしてみます。

こちらを参考にしました。
Apache Drill 1.0がリリースされたのでAmazon S3と連携してみた
Drill in 10 Minutes


Java 8



Javaで動作するので、事前にOracle Java 8をインストールしておきました。
Debian 8(jessie)にJava 8(OracleVM)をインストールする






Drillのインストールと起動



/optに配置することにしました。
tar.gzファイルを取得します。


# cd /opt/
# wget http://getdrill.org/drill/download/apache-drill-1.0.0.tar.gz




ダウンロードしたファイルを展開。
展開したディレクトリに移動します。


# tar -zxf apache-drill-1.0.0.tar.gz
# cd apache-drill-1.0.0




起動しようとすると、こんなエラーになりました。


# bin/drill-embedded
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512M; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000006c0000000, 1431633920, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 1431633920 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /opt/apache-drill-1.0.0/hs_err_pid1507.log




メモリ2Gの仮想環境で試していたのですが、どうもメモリが足りない模様。
設定ファイルを確認してみます。


# vi conf/drill-env.sh



8GBって...


DRILL_MAX_DIRECT_MEMORY="8G"
DRILL_HEAP="4G"




ちょっと試してみるだけなので、1Gと500Mに指定を変更しました。


DRILL_MAX_DIRECT_MEMORY="1G"
DRILL_HEAP="500M"




改めて起動。


# bin/drill-embedded
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512M; support was removed in 8.0
5 24, 2015 11:30:09 午後 org.glassfish.jersey.server.ApplicationHandler initialize
情報: Initiating Jersey application, version Jersey: 2.8 2014-04-29 01:25:26...
apache drill 1.0.0
"json ain't no thang"
0: jdbc:drill:zk=local>




コンソールが表示されました。





Drillの停止



停止は、コンソールで「!quit」を実行します。


0: jdbc:drill:zk=local> !quit
Closing: org.apache.drill.jdbc.DrillJdbc41Factory$DrillJdbc41Connection
/opt/apache-drill-1.0.0#








CSVファイルに対してクエリー



CSVファイルに対して問い合わせを実行してみます。
適当にCSVファイルを用意。


# cat /opt/data/sample.csv
1,nishizumi,miho
2,takebe,saori
3,isuzu,hana
4,akiyama,yukari
5,reizei,mako




コンソールに対してクエリを実行します。


0: jdbc:drill:zk=local> select * from dfs.`/opt/data/sample.csv`;
+---------------------------+
|         columns         |
+---------------------------+
| ["1","nishizumi","miho"] |
| ["2","takebe","saori"]    |
| ["3","isuzu","hana"]     |
| ["4","akiyama","yukari"] |
| ["5","reizei","mako"]     |
+---------------------------+



ちゃんと結果が表示されました。



カラムを分割してみます。


> select columns[0] as id, columns[1] as first_name, columns[2] as last_name
> from dfs.`/opt/data/sample.csv`;

+-----+-------------+------------+
| id | first_name | last_name |
+-----+-------------+------------+
| 1 | nishizumi | miho     |
| 2 | takebe     | saori     |
| 3 | isuzu     | hana     |
| 4 | akiyama     | yukari     |
| 5 | reizei     | mako     |
+-----+-------------+------------+





where句を指定。


> select columns[0] as id, columns[1] as first_name, columns[2] as last_name
> from dfs.`/opt/data/sample.csv`
> where
> columns[0] = 1;

+-----+-------------+------------+
| id | first_name | last_name |
+-----+-------------+------------+
| 1 | nishizumi | miho     |
+-----+-------------+------------+





where句で範囲指定。


> select columns[0] as id, columns[1] as first_name, columns[2] as last_name
> from dfs.`/opt/data/sample.csv`
> where
> columns[0] > 3;

+-----+-------------+------------+
| id | first_name | last_name |
+-----+-------------+------------+
| 4 | akiyama     | yukari     |
| 5 | reizei     | mako     |
+-----+-------------+------------+





LIKE検索。


> select columns[0] as id, columns[1] as first_name, columns[2] as last_name
> from dfs.`/opt/data/sample.csv`
> where
> columns[1] like '%m%';

+-----+-------------+------------+
| id | first_name | last_name |
+-----+-------------+------------+
| 1 | nishizumi | miho     |
| 4 | akiyama     | yukari     |
+-----+-------------+------------+






テーブルの結合



2つのCSVファイルを用意しました。

最初のデータ。

# cat /opt/data/first.csv
1,nishizumi
2,takebe
3,isuzu
4,akiyama
5,reizei




もうひとつのデータ。

# cat /opt/data/last.csv
1,miho
2,saori
3,hana
4,yukari
5,mako





JOINして結果を表示してみます。


> select t1.columns[0] as id, t1.columns[1] as first_name, t2.columns[1] as last_name
> from
> dfs.`/opt/data/first.csv` as t1
> ,dfs.`/opt/data/last.csv` as t2
> where
> t1.columns[0] = t2.columns[0];

+-----+-------------+------------+
| id | first_name | last_name |
+-----+-------------+------------+
| 1 | nishizumi | miho     |
| 2 | takebe     | saori     |
| 3 | isuzu     | hana     |
| 4 | akiyama     | yukari     |
| 5 | reizei     | mako     |
+-----+-------------+------------+




うまく行きました。
これはログ解析が捗るかも。
関連記事

テーマ:サーバ - ジャンル:コンピュータ

  1. 2015/05/25(月) 00:08:09|
  2. Java
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
次のページ