實作八

Impala (1) : 內建函數初探

確認 Impala 服務狀態

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

確認 Impala 服務狀態
● Impala 服務狀態

若您無法看到如上圖之狀態,代表 Impala 可能還沒啟動,或者有錯誤發生。您可以使用 SSH 連線至 Etu Manager Sandbox,並檢查 Impala 的相關日誌檔,來進行故障排解。在 Etu Manager Sandbox 中,日誌檔的存放位置是 /var/log/impala/。

開放 HDFS 權限

由於 HDFS 權限的關係,我們必須開放 impala 這個身份可以存取剛剛我們在 Hive 裏面建的資料庫。
[user00@master baseball]$ hadoop fs -chmod g+w /user/hive/warehouse/user00.db

進入 Impala Shell

執行 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

參考資料

  1. Built-in Functions

本文件最後更新於: