Hello World on Impala

13759 ワード

Cloudera Impalaの公式チュートリアル「Impala Tutorial」では、Impalaの基本的な操作について説明していますが、操作手順の前後に一貫性が欠けています.本節Wでは、「Impala Tutorial」の一部のプレゼンテーションサンプルを選択し、テーブルの作成、データのロード、データの照会など、完全なプレゼンテーションサンプルをゼロから説明します.入門レベルのチュートリアルを提供し、本明細書の操作を通じて、Impalaに「Hello World」と言います.
この文書では、インストール済みのImpala環境を備えている場合は、環境構築を参照してください.  CDH 5にHive,HBAse,Impala,Sparkなどのサービスをインストールする
clouderaユーザーとグループの作成
Impala Tutorialでサンプルをプレゼンテーションするログインusernameはclouderaですが、Cloudera Manager 5.0.2のインストール時にホストノード(h 1.worker.comなど)に自分からclouderaユーザーを作成することはありません.Impala Tutorialでプレゼンテーションサンプルと一致するように、clouderaユーザーとグループを手動で作成する必要があります.
rootユーザーとしてホストノード(h 1.worker.comなど)にログインし、clouderaユーザーが存在するかどうかを確認し、以下のコマンドを実行します.
[root@h1 home]# cat /etc/passwd | grep cloudera
cloudera-scm:x:496:493:Cloudera Manager:/var/run/cloudera-scm-server:/sbin/nologin

clouderaユーザーは存在しません.存在すると仮定すると、次のユーザー作成手順を行う必要はありません.
clouderaユーザーとグループを作成し、passwordをclouderaに設定します.
[root@h1 home]# groupadd cloudera
[root@h1 home]# useradd -g cloud era cloudera
[root@h1 home]# passwd cloudera
Changing password for user cloudera.an
New password:
BAD PASSWORD: it is based on a dictionary word
Retype new password:
passwd: all authentication tokens updated successfully.

HDFSでの/user/clouderaディレクトリの作成
HDFSに/user/clouderaディレクトリを新規作成し、このディレクトリのすべてをclouderaに変更する必要があります.これらの操作を実行するにはHDFSのスーパーユーザーが必要です.HDFSのスーパーユーザーは、name nodeプロセスを実行するユーザーです.一般的には、name nodeを起動したとします.あなたはスーパーユーザーです.Cloudera Manager 5を介して環境をインストールするスーパーusernameは、hdfsです.
HDFSのスーパーユーザーに切り替え、/user/clouderaディレクトリが存在するかどうかを確認し、存在しないと仮定して作成します.
[root@h1 home]# su - hdfs
-bash-4.1$ hdfs dfs -ls /user
Found 7 items
drwx------   - hdfs   supergroup          0 2014-06-26 08:44 /user/hdfs
drwxrwxrwx   - mapred hadoop              0 2014-06-20 10:10 /user/history
drwxrwxr-t   - hive   hive                0 2014-06-20 10:13 /user/hive
drwxrwxr-x   - impala impala              0 2014-06-20 10:18 /user/impala
drwxrwxr-x   - oozie  oozie               0 2014-06-20 10:15 /user/oozie
drwxr-x--x   - spark  spark               0 2014-06-20 10:08 /user/spark
drwxrwxr-x   - sqoop2 sqoop               0 2014-06-20 10:16 /user/sqoop2

HDFSに/user/clouderaフォルダを作成し、フォルダの所有者とグループをclouderaに設定します.
-bash-4.1$ hdfs dfs -mkdir -p /user/cloudera
-bash-4.1$ hdfs dfs -chown cloudera:cloudera /user/cloudera
-bash-4.1$ hdfs dfs -ls /user
Found 8 items
drwxr-xr-x   - cloudera cloudera            0 2014-06-26 09:05 /user/cloudera
drwx------   - hdfs     supergroup          0 2014-06-26 08:44 /user/hdfs
drwxrwxrwx   - mapred   hadoop              0 2014-06-20 10:10 /user/history
drwxrwxr-t   - hive     hive                0 2014-06-20 10:13 /user/hive
drwxrwxr-x   - impala   impala              0 2014-06-20 10:18 /user/impala
drwxrwxr-x   - oozie    oozie               0 2014-06-20 10:15 /user/oozie
drwxr-x--x   - spark    spark               0 2014-06-20 10:08 /user/spark
drwxrwxr-x   - sqoop2   sqoop               0 2014-06-20 10:16 /user/sqoop2

以上の操作により、Impala Tutorialでのデモサンプルを実行する条件が整った.
HDFSにテーブルデータをロードするフォルダを作成する
このセクションでは、初めて使用したユーザー実験Impala SQL機能に適した小さなテーブルを作成する方法を示します.TAB 1とTAB 2はHDFSファイルからデータをロードします.
クエリーしたいデータをHDFSに格納できます.この手順を開始するには、まずHDFSユーザーフォルダの下に1つ以上のサブフォルダを作成します.各テーブルのデータは別のサブフォルダに格納されます.この例では、mkdirの-pオプションを使用して、存在しない親フォルダが自分で作成されると仮定します.
[root@h1 ~]# su - cloudera
[cloudera@h1 ~]$ whoami
cloudera
[cloudera@h1 ~]$ hdfs dfs -ls /user
Found 8 items
drwxr-xr-x   - cloudera cloudera            0 2014-06-26 09:05 /user/cloudera
drwx------   - hdfs     supergroup          0 2014-06-26 08:44 /user/hdfs
drwxrwxrwx   - mapred   hadoop              0 2014-06-20 10:10 /user/history
drwxrwxr-t   - hive     hive                0 2014-06-20 10:13 /user/hive
drwxrwxr-x   - impala   impala              0 2014-06-20 10:18 /user/impala
drwxrwxr-x   - oozie    oozie               0 2014-06-20 10:15 /user/oozie
drwxr-x--x   - spark    spark               0 2014-06-20 10:08 /user/spark
drwxrwxr-x   - sqoop2   sqoop               0 2014-06-20 10:16 /user/sqoop2
[cloudera@h1 ~]$ hdfs dfs -mkdir -p /user/cloudera/sample_data/tab1 /user/cloudera/sample_data/tab2
[cloudera@h1 ~]$ 

以上より,TAB 1とTAB 2のテーブルデータを格納するフォルダが作成される.
csvファイルはHDFSフォルダコピー、例えば以下の2つの.csvファイルをローカルのファイルシステムに格納します.
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

次のコマンドを実行して、2つの.csvファイルを個別のHDFSフォルダに挿入します.
[cloudera@h1 testdata]$ pwd
/home/cloudera/testdata
[cloudera@h1 testdata]$ ll
total 8
-rw-rw-r--. 1 cloudera cloudera 193 Jun 27 08:33 tab1.csv
-rw-rw-r--. 1 cloudera cloudera 158 Jun 27 08:34 tab2.csv
[cloudera@h1 testdata]$ hdfs dfs -put tab1.csv /user/cloudera/sample_data/tab1
[cloudera@h1 testdata]$ hdfs dfs -ls /user/cloudera/sample_data/tab1
Found 1 items
-rw-r--r--   3 cloudera cloudera        193 2014-06-27 08:35 /user/cloudera/sample_data/tab1/tab1.csv
[cloudera@h1 testdata]$ hdfs dfs -put tab2.csv /user/cloudera/sample_data/tab2
[cloudera@h1 testdata]$ hdfs dfs -ls /user/cloudera/sample_data/tab2
Found 1 items
-rw-r--r--   3 cloudera cloudera        158 2014-06-27 08:36 /user/cloudera/sample_data/tab2/tab2.csv
[cloudera@h1 testdata]$ 
各データファイルの名前は重要ではありません.実は、Impalaが初めてデータフォルダの内容を検出したとき、フォルダの下のすべてのファイルはテーブルの中のデータファイルだと思っています.フォルダの下にどれだけのファイルがあっても、どんなファイル名でも構いません.
HDFSファイルシステムで使用可能なフォルダと、異なるフォルダとファイルにどのような権限があるかを理解するには、hdfs dfs-ls/を実行し、表示されているフォルダツリーに沿って-ls操作を実行します.
テーブルの作成、データのロード
impala-shellコマンドを使用してテーブルを作成し、インタラクティブに作成したり、SQLスクリプトを使用したりできます.
次のサンプル・プレゼンテーションでは、3つのテーブルが作成されました.各テーブルの列には、Booleanやintegerなどの異なるデータ型が使用されています.サンプルには、.csvファイルからデータをインポートするために、カラムをカンマで区切るなどのデータ形式のコマンドも含まれています.HDFSフォルダ・ツリーに格納されているデータを含む.csvファイルがあり、テーブルに相を指定しますImpalaは、これらのフォルダの下にあるすべてのファイルのすべてのデータが表のデータであると考えています.
table_setup.sqlファイルには、次のようなものがあります.
DROP TABLE IF EXISTS tab1;
-- The EXTERNAL clause means the data is located outside the central location for Impala data files
-- and is preserved when the associated Impala table is dropped. We expect the data to already
-- exist in the directory specified by the LOCATION clause.
CREATE EXTERNAL TABLE tab1
(
   id INT,
   col_1 BOOLEAN,
   col_2 DOUBLE,
   col_3 TIMESTAMP
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/user/cloudera/sample_data/tab1';

DROP TABLE IF EXISTS tab2;
-- TAB2 is an external table, similar to TAB1.
CREATE EXTERNAL TABLE tab2
(
   id INT,
   col_1 BOOLEAN,
   col_2 DOUBLE
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/user/cloudera/sample_data/tab2';

DROP TABLE IF EXISTS tab3;
-- Leaving out the EXTERNAL clause means the data will be managed
-- in the central Impala data directory tree. Rather than reading
-- existing data files when the table is created, we load the
-- data after creating the table.
CREATE TABLE tab3
(
   id INT,
   col_1 BOOLEAN,
   col_2 DOUBLE,
   month INT,
   day INT
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

table_setup.sqlスクリプトを実行します.使用:impala-shell-i 172.16.23.3152-f table_setup.sql操作手順は、次のとおりです.
[cloudera@h1 testdata]$ pwd
/home/cloudera/testdata
[cloudera@h1 testdata]$ ll
total 12
-rw-rw-r--. 1 cloudera cloudera  193 Jun 27 08:33 tab1.csv
-rw-rw-r--. 1 cloudera cloudera  158 Jun 27 08:34 tab2.csv
-rw-rw-r--. 1 cloudera cloudera 1106 Jun 27 08:49 table_setup.sql
[cloudera@h1 testdata]$ impala-shell -i 172.16.230.152 -f table_setup.sql
Starting Impala Shell without Kerberos authentication
Connected to 172.16.230.152:21000
Server version: impalad version 1.3.1-cdh5 RELEASE (build )
...
...
Returned 0 row(s) in 0.28s
[cloudera@h1 testdata]$ 

Impalaテーブル構造の表示
impala-shellにログインし、次のコマンドを実行します.
show tables;
describe tab1;
次のような操作手順があります.
[cloudera@h1 testdata]$ impala-shell -i 172.16.230.152
Starting Impala Shell without Kerberos authentication
Connected to 172.16.230.152:21000
Server version: impalad version 1.3.1-cdh5 RELEASE (build )
Welcome to the Impala shell. Press TAB twice to see a list of available commands.

Copyright (c) 2012 Cloudera, Inc. All rights reserved.

(Shell build version: Impala Shell v1.3.1-cdh5 () built on Mon Jun  9 09:30:26 PDT 2014)
[172.16.230.152:21000] > show tables;
Query: show tables
+------+
| name |
+------+
| tab1 |
| tab2 |
| tab3 |
+------+
Returned 3 row(s) in 0.01s
[172.16.230.152:21000] > describe tab1;
Query: describe tab1
+-------+-----------+---------+
| name  | type      | comment |
+-------+-----------+---------+
| id    | int       |         |
| col_1 | boolean   |         |
| col_2 | double    |         |
| col_3 | timestamp |         |
+-------+-----------+---------+
Returned 4 row(s) in 6.85s
[172.16.230.152:21000] > quit;
Goodbye
[cloudera@h1 testdata]$ 

クエリーImpalaテーブル
impala-shellにログインし、次のようなsql文を実行します.
SELECT * FROM tab1;
SELECT * FROM tab2 LIMIT 5;
SELECT tab2.* FROM tab2, (SELECT tab1.col_1, MAX(tab2.col_2) AS max_col2  FROM tab2, tab1  WHERE tab1.id = tab2.id  GROUP BY col_1) subquery1 WHERE subquery1.max_col2 = tab2.col_2;
次のような操作手順があります.
[cloudera@h1 testdata]$ impala-shell -i 172.16.230.152
Starting Impala Shell without Kerberos authentication
Connected to 172.16.230.152:21000
Server version: impalad version 1.3.1-cdh5 RELEASE (build )
Welcome to the Impala shell. Press TAB twice to see a list of available commands.

Copyright (c) 2012 Cloudera, Inc. All rights reserved.

(Shell build version: Impala Shell v1.3.1-cdh5 () built on Mon Jun  9 09:30:26 PDT 2014)
[172.16.230.152:21000] > 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           |
+----+-------+------------+-------------------------------+
Returned 5 row(s) in 2.39s
[172.16.230.152:21000] > 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   |
+----+-------+-----------+
Returned 5 row(s) in 1.30s
[172.16.230.152:21000] > SELECT tab2.*
                       > FROM tab2,
                       > (SELECT tab1.col_1, MAX(tab2.col_2) AS max_col2
                       >  FROM tab2, tab1
                       >  WHERE tab1.id = tab2.id
                       >  GROUP BY col_1) subquery1
                       > WHERE subquery1.max_col2 = tab2.col_2;
Query: select tab2.* FROM tab2, (SELECT tab1.col_1, MAX(tab2.col_2) AS max_col2 FROM tab2, tab1 WHERE tab1.id = tab2.id GROUP BY col_1) subquery1 WHERE subquery1.max_col2 = tab2.col_2
+----+-------+-----------+
| id | col_1 | col_2     |
+----+-------+-----------+
| 1  | true  | 12789.123 |
| 3  | false | 24453.325 |
+----+-------+-----------+
Returned 2 row(s) in 1.02s
[172.16.230.152:21000] > quit;
Goodbye
[cloudera@h1 testdata]$ 

終了:
この文書では、Impalaが使用する基本的なプレゼンテーションサンプルについて説明し、入門指導を提供します.他の多くのプレゼンテーションサンプルについては、 Impala Tutorialを参照してください.
この文書では、impala-shellコマンドの多くの方法を使用しています.詳細は、  Using the Impala Shell (impala-shell Command)
オリジナル作品、転載は出典http://blog.csdn.net/yangzhaohui168/article/details/35340387を明記してください