Hive安裝簡介

來源:互聯網
上載者:User

Hive是基於Hadoop的資料倉儲平台。

Hive提供了類SQL查詢語言。Hive的資料存放區於HDFS中。一般情況下,使用者提交的查詢將被Hive轉換為MapReduce作業並提交給Hadoop運行。

我們從Hive的安裝開始,逐步學習Hive的方方面面。

安裝Hive安裝前提

l  Java 6

l  Hadoop

選擇哪一個版本請參照Hive官方文檔。安裝Have是不需要特別設定關於Hadoop的資訊,只要保證HADOOP_HOME環境變數正確設定就可以了。

安裝

我們選擇下載0.11.1穩定版本。:

http://mirrors.hust.edu.cn/apache/hive/stable/

1)      解壓安裝包到指定的目錄:

tar xzf hive-0.11.0.tar.gz

2)      設定環境變數

export HIVE_INSTALL=/opt/Hive-0.11.0

export PATH=$PATH:$HIVE_INSTALL/bin

3)輸入以下命令進入Shell

Hive

Hive互動環境( Shell)

Shell是我們和Hive互動的主要工具。

Hive的查詢語言我們稱為HiveQL。HiveQL的設計受到了MySQL的很多影響,所以如果你熟悉MySQL的話,你會發現使用HiveQL是同樣的方便。

進入Shell後,輸入以下命令看看Hive是否工作正常:

SHOW TABLES;

輸出結果為

OK

Time taken: 8.207seconds

如果輸出結果顯示有錯誤,可能是Hadoop沒有運行,或者HADOOP_HOME變數沒有真確設定。

和SQL一樣,HiveQL一般是大小寫無關的(字串比較除外)。

輸入命令是按Tab鍵,Hive將提示所有可用的輸入。(命令自動完成)

第一次使用該命令可能會花上好幾秒中甚至更長,因為Hive將建立metastore資料庫(儲存於metastore_db目錄,此目錄在你運行hive時所在目錄之下,所以第一次運行Hive時,請先進入到合適的目錄下)。

我們也可以直接從命令列運行hive指令碼,比如:

hive –f /home/user/ hive.q

其中,-f 後面跟上指令檔名(包括路徑)。

無論是在互動模式還是非互動模式下,hive一般都會輸出一些輔助資訊,比如執行命令的時間等。如果你不需要輸出這些訊息,可以在進入hive時加上-s選項,比如:

hive –S

注意:S為大寫

簡單樣本

我們以以下資料作為測試資料,結構為(班級號,學號,成績)。

C01,N0101,82

C01,N0102,59

C01,N0103,65

C02,N0201,81

C02,N0202,82

C02,N0203,79

C03,N0301,56

C03,N0302,92

C03,N0306,72

執行以下命令:

create table student(classNostring, stuNo string, score int) row format delimited fields terminated by ',';

其中,定義表結構和SQL類似.。其它設定表示欄位間以逗號分隔,一行為一個記錄。

load data local inpath '/home/user/input/student.txt'overwrite into table student;

輸出結果如下:

Copying data fromfile:/home/user/input/student.txt

Copying file:file:/home/user/input/student.txt

Loading data to tabledefault.student

rmr: DEPRECATED: Please use 'rm-r' instead.

Deleted/user/hive/warehouse/student

Table default.student stats:[num_partitions: 0, num_files: 1, num_rows: 0, total_size: 117, raw_data_size:0]

這個命令將student.txt檔案內容載入到表student中。這個載入操作將直接把student.txt檔案複製到hive的warehouse目錄中,這個目錄由hive.metastore.warehouse.dir配置項設定,預設值為/user/hive/warehouse。Overwrite選項將導致Hive事先刪除student目錄下所有的檔案。

Hive不會對student.txt做任何格式處理,因為Hive本身並不強調資料的儲存格式。

此例中,Hive將資料存放區於HDFS系統中。當然,Hive也可以將資料存放區於本地。

如果不加overwrite選項,且載入的檔案在Hive中已經存在,則Hive會為檔案重新命名。比如不加overwrite選項將以上命令執行兩次,則第二次載入後,hive中新產生的檔案名稱將會是“student_copy_1.txt”。(和Hadoop權威教程中描述的不一致,讀者請謹慎驗證)

接下來,我們執行以下命令:

select * from student;

輸出如下:

C01  N0101      82

C01  N0102      59

C01  N0103      65

C02  N0201      81

C02  N0202      82

C02  N0203      79

C03  N0301      56

C03  N0302      92

C03  N0306      72

執行以下命令:

Select classNo,count(score) fromstudent where score>=60 group by classNo;

輸出如下:

C01  2

C02  3

C03  2

由此看見,HiveQL的使用和SQL及其類似。我們用到了group和count,其實在後台Hive將這些操作都轉換成了MapReduce操作提交給Hadoop執行,並最終輸出結果。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.