Hive編程指南整理部分基礎概念
部分筆記
-
MapReduce任務的啓動過程需要消耗較長的時間,所以Hive的查詢延遲比較嚴重。
-
Hive不支持OLTP(聯機事務處理)所需的關鍵功能,而更接近成爲一個OLAP(聯機分析技術)工具。
-
圖靈完全性:通常是指具有無限存儲能力的通用物理機器或編程語言。
-
CLI:Hive的命令行界面。
-
像表的模式信息、分區信息等這些必須的元數據,其信息量是很小的,通常比存儲在Hive中的數據的量要少的多。因此,用戶其實無需爲元數據存儲提供一個強勁的專用數據庫服務器。不過,因爲這是一個單點問題(SPOF),所以強烈建議用戶使用對於其他關係型數據庫實例同樣適用的標準技術來對這個數據庫進行冗餘存儲和數據備份。
-
可以通過設置
hiveconf
配置項hive.cli.print.header
爲 true 來開啓這個功能。命令:
set hive.cli.print.header=true;
對於39頁的理解:這個配置應該就當前會話生效,當本次會話關閉後,下一次會話開啓時需要重新設定。
所以後面有一句:如果用戶希望總是看到字段名稱,那麼只需要將這一行添加到
$HOME/.hiverc
中。 -
在其他SQL語句中,會限制字符串的最大長度,例如:
varchar(4000)
,但是Hive所處用的 “寬鬆” 的世界裏, 不一定擁有數據文件但必須能夠支持使用不同的文件格式,Hive 根據不同字段間的分隔符來對其進行判斷。同時,Hadoop和Hive 強調優化磁盤的讀和寫的性能,而限制列的值的長度相對來說並不重要。 -
如果一個表的表結構指定的是3列,而實際數據文件每行記錄包含有 5 個字段的時候,Hive中最後2列數據將會被省略掉。
-
Hive中並沒有鍵的概念(這裏我理解爲主鍵和外鍵),但是用戶可以對錶建立索引。
-
Hive中數據庫的概念本質上是表的一個目錄或者命名空間。
Hive服務
選項 | 名稱 | 描述 |
---|---|---|
cli | 命今行界面 | 用戶定義表,執行查詢等。如果沒有指定其他服務,這個是默認的服務。 |
hiveserver | Hive Server | 監聽來自於其他進程的Thrift連接的一個守護進程 |
hwi | Hive Web界面 | 是一個可以執行查詢語句和其他命令的簡單的Web界面,這樣可以不用登錄到集羣中的某臺機器上使用CLI來進行查詢 |
jar | hadoop jar命令的一個擴展,這樣可以執行需要Hive 環境的應用 | |
metastore | 啓動一個擴展的Hive元數據服務,可以供多客戶端使用 | |
rcfilecat | 一個可以打印出RCFile格式 |
--auxpath
選項允許用戶指定一個以冒號分割的“附屬的”Java包(JAR),這些文件中包含有用戶可能需要的自定義擴展等。
--config
文件目錄這個命令允許用戶覆蓋$HIVE_HOME/conf中默認的屬性配置,而指向一個新的配置文件目錄。
Hive中的變量和屬性命名空間
命名空間 | 使用權限 | 描述 |
---|---|---|
hivevar | 可讀/可寫 | (Hive V0.8.0以及以上的版本)用戶自定義變量 |
hiveconf | 可讀/可寫 | Hive相關的配置屬性 |
system | 可讀/可寫 | Java定義的配置屬性 |
env | 只可讀 | shell環境(例如 bash ) 定義的環境變量 |
在CLI中,可以使用SET命令顯示或者修改變量值。
Hive CLI
CLI擁有和Linux的一樣的補全功能,在輸入的時候敲擊Tab製表鍵,那麼CLI會自動不全可能的關鍵字或者函數名。
當向CLI中輸入語句時,如果某些行是以Tab鍵開頭的話,就會產生一個常見的令人困惑的錯誤。用戶這時會看到一個“是否顯示所有可能的情況”的提示,而且輸入流後面的字符會被認爲是對這個提示的回覆,也因此會導致命令執行失敗。
Hive查看操作命令歷史
用戶可以使用上下箭頭來滾動查看之前的命令。事實上,每一行之前的輸入都是單獨顯示的,CLI不會把多行命令和查詢作爲一個單獨的歷史條目。Hive會將最近的 10000 行命令記錄到文件 SHOME/.hivehistory
中。
如果用戶想再次執行之前執行過的某條命令,只需要將光標滾動到那條記錄然後按Enter 鍵就可以了。如果用戶需要修改這行記錄後再執行,那麼需要使用左右方向鍵將光標移動到需要修改的地方然後重新編輯修改就可以了。修改後用戶直接敲擊Enter鍵就可以提交這條命令而無需切換到命令尾。
大多數的導航按鍵使用的 Contrl+字母的命令
和 bash shell
中是相同的(例如,Control+A
代表光標移到到行首,Control+B
代表光標移動到行尾)。然而,類似的“元操作” Option
或者 Escape
鍵就不起作用了(例如, Option+F
一次向前移動一個單詞這樣的命令)。相似地, Delete
刪除鍵會刪除光標左邊的字符,而 Forward Delete
回格鍵不會刪除掉光標當前所在的字符。
在Hive中使用Hadoop的dfs命令
Amazon S3
Amazon S3 :亞馬遜的雲計算服務。應用程序可以通過一個簡單的服務接口就可以通過互聯網在任何時候訪問S3上面的數據。