首先,請確認 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