首先,請確認 Impala 的狀態是否正常運作中。您可以連線至 http://lab.3du.me:25000 來確認 Impala 的狀態。 若您可以正常連線並看到如下圖的結果,代表 Impala 已經正常運作中。

若您無法看到如上圖之狀態,代表 Impala 可能還沒啟動,或者有錯誤發生。您可以使用 SSH 連線至 Etu Manager Sandbox,並檢查 Impala 的相關日誌檔,來進行故障排解。在 Etu Manager Sandbox 中,日誌檔的存放位置是 /var/log/impala/。
[user00@master baseball]$ hadoop fs -chmod g+w /user/hive/warehouse/user00.db
執行 impala-shell 指令,來提交 Impala SQL 查詢語句。執行 impala-shell 後,正常您應該會看到如下的互動式介面。
[user00@master ~]$ impala-shell Starting Impala Shell without Kerberos authentication Connected to master:21000 Welcome to the Impala shell. Press TAB twice to see a list of available commands. Copyright (c) 2012 Cloudera, Inc. All rights reserved. [master:21000] >
倘若 impala 服務尚未正常開啟,您可能會看到 not connected 的訊息。
[Not connected] >
首先,我們來做一些簡單的查詢,看看 Impala 會有怎麼樣的回應。以下是一些簡單的例子,分別示範數值運算式、字串處理、型別轉換、邏輯判斷與日期函數。
SELECT 2+2;
SELECT SUBSTR('Hello world',1,5);
SELECT CAST(99.5 AS INT);
SELECT CONCAT('aaa',"bbb",'ccc');
SELECT 2 > 1;
SELECT NOW();
若您有使用過 HiveQL,不難發現 Impala 的反應速度比起 Hive 來得快上許多。因為 Impala 不需要將查詢轉換成 MapReduce 任務,排程送給 TaskTracker 執行。Impala 是直接透過 LLVM 解析 Impala SQL,並將 Execution Plan 丟給 impalad 在記憶體中執行。因此,Impala 的查詢反應速度比較快,大約都是在數秒至毫秒等級就能完成。
[master:21000] > SELECT 2+2;
Query: select 2+2
+-------+
| 2 + 2 |
+-------+
| 4 |
+-------+
Fetched 1 row(s) in 0.35s
[master:21000] > SELECT SUBSTR('Hello world',1,5);
Query: select SUBSTR('Hello world',1,5)
+-----------------------------+
| substr('hello world', 1, 5) |
+-----------------------------+
| Hello |
+-----------------------------+
Fetched 1 row(s) in 0.14s
[master:21000] > SELECT CAST(99.5 AS INT);
Query: select CAST(99.5 AS INT)
+-------------------+
| cast(99.5 as int) |
+-------------------+
| 99 |
+-------------------+
Fetched 1 row(s) in 0.01s
[master:21000] > SELECT CONCAT('aaa',"bbb",'ccc');
Query: select CONCAT('aaa',"bbb",'ccc')
+-----------------------------+
| concat('aaa', 'bbb', 'ccc') |
+-----------------------------+
| aaabbbccc |
+-----------------------------+
Fetched 1 row(s) in 0.44s
[master:21000] > SELECT 2 > 1;
Query: select 2 > 1
+-------+
| 2 > 1 |
+-------+
| true |
+-------+
Fetched 1 row(s) in 0.01s
[master:21000] > SELECT NOW();
Query: select NOW()
+-------------------------------+
| now() |
+-------------------------------+
| 2015-08-05 22:41:51.369783000 |
+-------------------------------+
Fetched 1 row(s) in 0.01s