LoginSignup
3
2

More than 5 years have passed since last update.

Impalaを使ってみる

Last updated at Posted at 2015-12-27

以下のImpalaチュートリアルを読みながら実際に動作確認して理解を深めていく。
http://www.cloudera.com/content/www/en-us/documentation/archive/impala/1-x/1-4-x/Installing-and-Using-Impala/ciiu_tutorial.html

※途中なので後ほど加筆修正

1. 基本的な.csvテーブルをセットアップ

> hdfs dfs -mkdir -p /user/sample/sample_data/tab1 /user/sample/sample_data/tab2
tab1.csv
1,true,123.123,2012-10-24 08:55:00 
2,false,1243.5,2012-10-25 13:40:00
3,false,24453.325,2008-08-22 09:33:21.123
4,false,243423.325,2007-05-12 22:32:21.33454
5,true,243.325,1953-04-22 09:11:33
tab2.csv
1,true,12789.123
2,false,1243.5
3,false,24453.325
4,false,2423.3254
5,true,243.325
60,false,243565423.325
70,true,243.325
80,false,243423.325
90,true,243.325

それぞれの.csvファイルを異なるHDFSディレクトリに格納する。

> hdfs dfs -put tab1.csv /user/sample/sample_data/tab1
> hdfs dfs -ls /user/sample/sample_data/tab1
Found 1 items
-rw-r--r--   3 hdfs supergroup        193 2015-11-01 22:07 /user/sample/sample_data/tab1/tab1.csv
> hdfs dfs -put tab2.csv /user/sample/sample_data/tab2
> hdfs dfs -ls /user/sample/sample_data/tab2
Found 1 items
-rw-r--r--   3 hdfs supergroup        158 2015-11-01 22:09 /user/sample/sample_data/tab2/tab2.csv

※/user/sampleがImpalaユーザからアクセスできないとWarning(WARNINGS: Impala does not have READ_WRITE access to path 'hdfs://xxxxxxx:8020/user/sample/sample_data')がでるため、impalaユーザにとりあえず変更。

hdfs dfs -chown -R impala:supergroup /user/sample

Impalaがデータディレクトリのコンテツを調べるとき、ディレクトリ内の全てのファイルはテーブルのデータとしてまとめられる。
テーブルを作成するには、impala-shellコマンドを使用する。
以下の例では3つのテーブルを作成し、それぞれのテーブルにおいて、Booleanやintegerなどの属性を持つカラムの作成を行っている。csvファイルからインポートするデータのフォーマット(カンマ区切りなど)の情報を与えている。csvファイルは既にHDFS上にあるので、その場所を示しチエる。Impalaはディレクトリにある全てのファイルデータを取り出し、テーブルに登録するデータとみなす。

$ impala-shell
> DROP TABLE IF EXISTS tab1;
Query: drop TABLE IF EXISTS tab1
> CREATE EXTERNAL TABLE tab1 ( id INT, col_1 BOOLEAN, col_2 DOUBLE, col_3 TIMESTAMP) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/user/sample/sample_data/tab1';

Fetched 0 row(s) in 0.05s
> DROP TABLE IF EXISTS tab2;
Query: drop TABLE IF EXISTS tab2
> CREATE EXTERNAL TABLE tab2 (id INT, col_1 BOOLEAN, col_2 DOUBLE) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/user/sample/sample_data/tab2';
> DROP TABLE IF EXISTS tab3;
Query: drop TABLE IF EXISTS tab3
> > CREATE EXTERNAL TABLE tab3 (id INT, col_1 BOOLEAN, col_2 DOUBLE,month INT, day INT ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

4. Impalaテーブルから検索

4.1. Examining Contents of Tables

$ impala-shell
> show tables;
Query: show tables
+-----------+
| name      |
+-----------+
| tab1      |
| tab2      |
| tab3      |
+-----------+
 > select * from tab1;
Query: select * from tab1
+----+-------+------------+-------------------------------+
| id | col_1 | col_2      | col_3                         |
+----+-------+------------+-------------------------------+
| 1  | true  | 123.123    | 2012-10-24 08:55:00           |
| 2  | false | 1243.5     | 2012-10-25 13:40:00           |
| 3  | false | 24453.325  | 2008-08-22 09:33:21.123000000 |
| 4  | false | 243423.325 | 2007-05-12 22:32:21.334540000 |
| 5  | true  | 243.325    | 1953-04-22 09:11:33           |
+----+-------+------------+-------------------------------+
> SELECT * FROM tab2 LIMIT 5;
Query: select * FROM tab2 LIMIT 5
+----+-------+-----------+
| id | col_1 | col_2     |
+----+-------+-----------+
| 1  | true  | 12789.123 |
| 2  | false | 1243.5    |
| 3  | false | 24453.325 |
| 4  | false | 2423.3254 |
| 5  | true  | 243.325   |
+----+-------+-----------+
$ cat query.sql
SELECT * FROM tab1;
SELECT * FROM tab2;
SELECT * FROM tab2 LIMIT 5;

$ impala-shell -f query.sql 

4.2. Example: Aggregate and Join

テーブルtab1とtab2をid列で結合(USINGで条件指定)。

> select tab1.col_1, MAX(tab2.col_2),MIN(tab2.col_2) FROM tab2 JOIN tab1 USING(id) GROUP BY col_1 ORDER BY 1 LIMIT 5;
Query: select tab1.col_1, MAX(tab2.col_2),MIN(tab2.col_2) FROM tab2 JOIN tab1 USING(id) GROUP BY col_1 ORDER BY 1 LIMIT 5
+-------+-----------------+-----------------+
| col_1 | max(tab2.col_2) | min(tab2.col_2) |
+-------+-----------------+-----------------+
| false | 24453.325       | 1243.5          |
| true  | 12789.123       | 243.325         |
+-------+-----------------+-----------------+
Fetched 2 row(s) in 0.71s
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2