將“Hive-x.x.x.tar.gz”復(fù)制到“/usr/local”目錄中,“x.x.x”標(biāo)識(shí)及具體的版本號(hào),執(zhí)行“tar -zxvf hive-x.x.x.tar.gz”命令對(duì)其解壓縮,執(zhí)行“mv hivex.x.x hive”命令,將解壓目錄更名為“hive”,便于之后的使用。執(zhí)行“vi vi /etc/profile”命令,將其中增加export HIVE_HOME=/usr/local/hive”行,在“export PATH”語句中添加“:$HIVE_HOME/bin”的內(nèi)容。保存該文件后,執(zhí)行“source /etc/profile”命令,完成對(duì)環(huán)境變量的設(shè)置。
進(jìn)入“/usr/local/hive/conf”目錄,執(zhí)行“mv hiveenv.sh.template hive-env.sh” 和“mv hive-default.xml.template hive-site.xml”命令,得到所需的Hive配置文件。前面談到了Hive在HDFS中的默認(rèn)位置,在“hive-site.xml” 文 件 中可以更改該位置,執(zhí)行“vi hive-site.xml”命 令,在其中搜索“”,您可以根據(jù)需要對(duì)其進(jìn)行修改,例如將其更改為“hive/warehouse”。
為了避免在啟動(dòng)Hive時(shí)出現(xiàn)找不到類的錯(cuò)誤,執(zhí)行“vi $HADOOP_HOME/conf/hadoop-env.sh”命令,在其中 添 加“export HADOOP_CLASSPATH=.:$CLAS
PATH:$HADOOP_CLASSPATH:$HADOOP_HOME/bin”行。
執(zhí) 行“vi $HIVE_HOME/bin/hive-config.sh” 命令,在 其 中 添 加“export JAVA_HOME=/usr/local/jdk”,“export HIVE_HOME=/usr/local/hive”,“export HADOOP_HOME=/usr/local/hadoop”等行。進(jìn)入“/usr/local/hive/bin”目錄,執(zhí)行“hive”命令,進(jìn)入其控制臺(tái)接口,在“hive>”提示符下可以執(zhí)行各種命令。
例 如 執(zhí) 行“show databases;”命令,會(huì)顯示Hive的所有數(shù)據(jù)庫信息。例 如 執(zhí) 行“use default;”命令,選擇名為“default”的數(shù)據(jù)庫。執(zhí)行“show tables;”命令,顯示其下的表信息。用戶可以根據(jù)實(shí)際需要,來創(chuàng)建表。
例如執(zhí)行“create table tk1(biaohao int,pinming string);”命令,就可以創(chuàng)建名為“tk1”的表。在瀏覽器中訪問“hadoopsrv1:5000/dfshealth.jsp”地 址,其中 的“hadoopsrv1” 為 本機(jī)名稱。在打開的節(jié)點(diǎn)網(wǎng)頁中點(diǎn)擊“Browse the filesystem”鏈接,在目錄內(nèi)容網(wǎng)頁中點(diǎn)擊表格中的“user”鏈接,之后依次點(diǎn)擊“hive”,“warehouse”,“tk1”等鏈接,可以查看與上述表對(duì)應(yīng)的目錄信息。在“/usr/local/hive/bin”目錄下執(zhí)行“l(fā)s”命令,可以看到名為“derby.log”,“metastore_db”等文件。
MySQL的安裝分為客戶端和服務(wù)器端兩部分,執(zhí)行“rpm -i MySQL-server-5.x.xx-x.e16.i686.rpm” 命令,安裝服務(wù)器端程序。
執(zhí) 行“mysqld_safe &”命令,在后臺(tái)啟動(dòng)MySQL服務(wù)程序。
執(zhí) 行“rpm -i MySQL-client-5.x.xx-x.e16.i686.rpm”命令,安裝MySQL客戶端程序。執(zhí)行“mysql_secure_installation” 命令,根據(jù)提示設(shè)置MySQL密碼。
然后執(zhí)行“mysql -uroot-pxxx”命令登錄 MySQL,其中的“xxx”表示密碼。
當(dāng)然,要想通過Hive連接MySQL,必須將MySQL的JDBC驅(qū)動(dòng)包存儲(chǔ)到“/usr/local/hive/lib”目 錄中,所需的文件為“mysqlconnector-java-5.x.xx.jar”。
執(zhí) 行“vi hive-site.xml”命令,在Hive的配置文件中找到“
找 到“”行,將其修改為“”,找 到“”行,將其修改為“”,其主要作用是設(shè)置MySQL的賬戶名和密碼信息。
為了讓用戶可以遠(yuǎn)程連接MySQL,需要進(jìn)行授權(quán)操作。在MySQL控制臺(tái)中執(zhí)行“create database hive;”命令,創(chuàng)建名為“hive”的數(shù)據(jù)庫。執(zhí)行“GRANT all ON hive.* TO root@'%'IDENTIFIED BY 'xxx';”命令,為Root賬戶分配完全訪問權(quán)限。執(zhí)行“flush privileges;”命令刷新權(quán)限設(shè)置。執(zhí)行“set global binlog_format='MIXED';”命令,將二進(jìn)制日志設(shè)置為混合模式。
Hive的數(shù)據(jù)存儲(chǔ)基于Hadoop HDFS存儲(chǔ)的,其沒有專門的數(shù)據(jù)存儲(chǔ)格式,Hive支持?jǐn)?shù)據(jù)庫、文件、表、視圖等存儲(chǔ)結(jié)構(gòu),其可以直接加載文本文件和序列文件。Hive中數(shù)據(jù)庫的概念和MySQL等常見數(shù)據(jù)庫是類似的,其默認(rèn)數(shù)據(jù)庫為default”,當(dāng)啟動(dòng) Hive后,可以使用“use xxx”來使用目標(biāo)數(shù)據(jù)庫,“xxx”為數(shù)據(jù)庫的名稱。
執(zhí) 行“hive>create database xxx;”命令,可以創(chuàng)建一個(gè)新的數(shù)據(jù)庫。對(duì)于Hive的操作來說,最常見的是對(duì)表的處理。在Hive中表的類型包括“Table”(內(nèi)部 表),“Partition”(分 區(qū)表),“External Table”(外部 表),“Bucket Table”(桶表)等。對(duì)于內(nèi)部表來說,其概念與一般數(shù)據(jù)庫中的表是類似的,所不同的是,內(nèi)部表在 Hive 中都有一個(gè)對(duì)應(yīng)的目錄用來存儲(chǔ)數(shù)據(jù)。例如對(duì)于表“TK1”來說,因?yàn)榍懊嬉呀?jīng)更改了其默認(rèn)存儲(chǔ)路徑,所以其在 HDFS中的存儲(chǔ)目錄為“/hive/warehouse/tk1”,該表中所有的數(shù)據(jù)都保存在這個(gè)目錄中。當(dāng)刪除該表時(shí),與之相關(guān)的元數(shù)據(jù)與數(shù)據(jù)都會(huì)被刪除。
使 用“CREATE TABLE”命令來創(chuàng)建內(nèi)部表,例如執(zhí)行“CREATE TABLE tk2(yh name,mima string)row format delimited fields terminated by ' ;”命令,可以創(chuàng)建名為“tk2”的表,注意其行分隔符為“ ”,這樣便于加載數(shù)據(jù)。在執(zhí)行數(shù)據(jù)添加操作時(shí),需要先建立一個(gè)文本文件,按照預(yù)設(shè)的分隔符編輯數(shù)據(jù)。之后執(zhí)行“l(fā)oad data local inpath'/var/shujubiao.txt'into tk2;”命令,從指定的“shujubiao.txt”文件中直接加載數(shù)據(jù),完成表數(shù)據(jù)添加操作。
當(dāng)然,也可以使用HDFS中 的“put”命 令,例如 執(zhí) 行“hadoop fs -put shujubiao.txt /hive/tk2”命令,也可以實(shí)現(xiàn)相同的加載操作。
執(zhí) 行“select * from tk1”,“select count(*)from tk2”等命令,可以查看該表中的內(nèi)容。
執(zhí) 行“select * from tk1 limit 9”命令,只隨機(jī)顯示TK1表9條數(shù)據(jù)。
注意,如果對(duì)指定的字段查詢,Hive會(huì)使用mapReduce的Job執(zhí)行操作。執(zhí)行“drop table tk2”命令,可以刪除該表。
對(duì)于分區(qū)表來說,可以對(duì)數(shù)據(jù)進(jìn)行分區(qū)操作,即按照某個(gè)字段,將文件劃分為不同的標(biāo)準(zhǔn)。在 Hive 中分區(qū)對(duì)應(yīng)于數(shù)據(jù)庫的分區(qū)列的密集索引,表中的一個(gè)分區(qū)對(duì)應(yīng)于表下的一個(gè)目錄,所有的分區(qū)的數(shù)據(jù)都存儲(chǔ)在對(duì)應(yīng)的目錄中。例如在“Product”表 中 包 含“brand” 和“factory”兩個(gè)分區(qū),那么對(duì)應(yīng) 于“Brand”=“dayang”,“F a c t o r y”=“b f y c”的 目 錄 為“/hive/product/brand=dayang/factory=bfyc”, 對(duì) 應(yīng)于“Brand”=“gyang”,“F a c t o r y”=“y z m t”的 目 錄 為“/hive/product/brand=gyang/factory=yzmt”。
例 如,執(zhí) 行“create t a b l e p r o d u c t(x h string,factory string)partitioned by(brand) row format delimited fields terminated by ' ' stored as TEXTFILE;”命令,可以創(chuàng)建名為“product”的分區(qū)表。
執(zhí)行“l(fā)oad data local inpath '/data/fenqubiao.dat' into table product partition (Brand='gyang'Factory='bfyc');”命令,就可以從“fenqubiao.dat”文件中按照預(yù)設(shè)分隔符加載分區(qū)數(shù)據(jù)了。
執(zhí)行“show partitions xxx;”命令,可以看到名為“xxx”的表中存在哪些分區(qū)。查看分區(qū)表的方法以及刪除的方法與上述內(nèi)部表一致。如果要增加分區(qū)信息,可以執(zhí)行“alter table product add partition(Brand='flck');”命令,來添加新的分區(qū)。
如果要?jiǎng)h除分區(qū),可 以 執(zhí) 行“alter table product drop partition(Brand='flck');”命令來實(shí)現(xiàn)。
注意:當(dāng)刪除對(duì)應(yīng)分區(qū)后,其元數(shù)據(jù)和數(shù)據(jù)文件被刪除,但對(duì)應(yīng)的目錄依然存在。當(dāng)然,這里僅僅使用了簡(jiǎn)單的例子進(jìn)行說明。
上述類型的表也被稱為受控表,其特點(diǎn)是表的創(chuàng)建和數(shù)據(jù)加載是兩個(gè)過程,在加載數(shù)據(jù)時(shí),數(shù)據(jù)實(shí)際上會(huì)被移動(dòng)到對(duì)應(yīng)的數(shù)據(jù)倉(cāng)庫目錄中,并且對(duì)數(shù)據(jù)對(duì)訪問都是直接在數(shù)據(jù)倉(cāng)庫目錄中完成。當(dāng)刪除表時(shí),表中的數(shù)據(jù)和元數(shù)據(jù)會(huì)被同時(shí)刪除。
對(duì)于外部表來說,和上述類型的表存在很大的不同,其特點(diǎn)是指向在HDFS中已經(jīng)存在的數(shù)據(jù),可以預(yù)先創(chuàng)建分區(qū)。表的創(chuàng)建和數(shù)據(jù)加載屬于同一個(gè)過程,兩者可以同時(shí)完成,實(shí)際數(shù)據(jù)不會(huì)移動(dòng)到數(shù)據(jù)倉(cāng)庫目錄中,只是與外部數(shù)據(jù)建立一個(gè)鏈接。
當(dāng)刪除一個(gè)外部表時(shí),也僅僅刪除該鏈接。例如,事先創(chuàng)建名為“/waibu/data”的目錄,執(zhí)行“hadoop fs-put /tmp/wb.dat /waibu/data/”命令,將“wb.dat”文件上傳到該目錄中。執(zhí)行“create external table tkk1 (key1 string,key2 int) ROW FORMAT DELIMITED FIELDS TERMINATED BY' ' location '/waibu/data';”命令,使用預(yù)先存在的文件,按照預(yù)設(shè)的分隔符創(chuàng)建名為“tkk1”的外部表,這實(shí)際上是和外部數(shù)據(jù)建立了一個(gè)連接。當(dāng)執(zhí)行“drop table tkk1”命令,表示僅僅刪除表連接,但是實(shí)際數(shù)據(jù)并沒有被刪除。