Hive安裝部署以及初步使用

一、Hive概述

HIve是什么?為什么要使用hive卑惜?對于一個(gè)初步接觸hive的初學(xué)者,這些都是迷惑的驻售,因此本文主要帶你入門hive露久,讓你了解到hive的安裝使用以及在hive在大數(shù)據(jù)中的位置。



1.為什么要使用hive?

在了解hive之前欺栗,相信大家都使用過mapreduce以及hdfs毫痕,提及mapreduce我們都會想到對于一些數(shù)據(jù)的處理總是要自己去編寫mapreduce程序去處理,一大堆的Java代碼迟几,提高了用戶的學(xué)習(xí)成本镇草,基于這個(gè)原因,F(xiàn)acebook實(shí)現(xiàn)并且開源Hive瘤旨。

2.什么是Hive?

對于hive的介紹梯啤,我們先來看看官網(wǎng)的介紹(https://cwiki.apache.org/confluence/display/Hive/Home):

? The Apache Hive data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage and queried using SQL syntax.

Built on top of Apache Hadoop, Hive provides the following features:

*Tools to enable easy access to data via SQL, thus enabling data warehousing tasks such as extract/transform/load (ETL), reporting, and data analysis.

*A mechanism to impose structure on a variety of data formats

Access to files stored either directly in Apache HDFS or in other data storage systems such as Apache HBase

*Query execution via Apache Tez, Apache Spark, or MapReduce

Procedural language with HPL-SQL

*Sub-second query retrieval via Hive LLAP, Apache YARN and Apache Slider.

簡單總結(jié)一下:

1.hive是由Facebook開源的用于解決海量結(jié)構(gòu)化日志的數(shù)據(jù)統(tǒng)計(jì)。

2.hive基于hadoop建立的數(shù)據(jù)倉庫工具存哲,可以將結(jié)構(gòu)化日志數(shù)據(jù)映射到一張表因宇,使用SQL語句進(jìn)行查詢處理。

3.hive建立在hadoop之上提供了以下功能:

(1)祟偷、可以將數(shù)據(jù)通過sql語句來處理察滑,支持提取,轉(zhuǎn)換修肠,加載以及數(shù)據(jù)分析等大數(shù)據(jù)作業(yè)贺辰。

(2)、可以將結(jié)構(gòu)化日志數(shù)據(jù)轉(zhuǎn)化為文件存儲在HDFS或者Hase等數(shù)據(jù)存儲系統(tǒng)上。

(3)饲化、底層用mapreduce對數(shù)據(jù)進(jìn)行計(jì)算莽鸭,也可以自己通過mapreduce,spark編寫程序來拓展hive的功能來實(shí)現(xiàn)更多自定義的數(shù)據(jù)處理吃靠。

4.hive的實(shí)質(zhì)就是將HQL語言轉(zhuǎn)化為mapreduce硫眨。它適合離線數(shù)據(jù)的處理。

下面有一張圖我們來簡單了解一下hive在hadoop生態(tài)系統(tǒng)的位置:

圖片發(fā)自簡書App


由上圖可以看出hive在數(shù)據(jù)處理方面占著很重要的位置巢块,同時(shí)也可以看出它是運(yùn)行在yarn上面的礁阁。

3.hive的工作原理

在知道了什么是hive之后,我們有必要了解一下hive的工作原理族奢。

圖片發(fā)自簡書App

我們來通過上面hive的架構(gòu)圖來看看它的工作原理:

我們在上述hive的介紹當(dāng)中了解到hive是將數(shù)據(jù)轉(zhuǎn)換為文件存儲在hdfs文件系統(tǒng)當(dāng)中的姥闭,它對數(shù)據(jù)的計(jì)算處理底層實(shí)質(zhì)上也是mapreduce。hive的元數(shù)據(jù)(表名越走,所屬的數(shù)據(jù)庫棚品,擁有者,字段弥姻,表所在的目錄,表的類型等等)都是存儲在Meta store中掺涛,對于meta store下文會講解庭敦,讀者這里不必深究。在了解上面hive的核心之后再看他的架構(gòu)圖就很簡單了薪缆。首先客戶通過CLI(客戶端工具秧廉,命令行)或者JDBC連接到hive服務(wù)器,Driver需要讀取元數(shù)據(jù)(meta store)來加載數(shù)據(jù)拣帽,當(dāng)客戶端輸入HQL命令時(shí)疼电,Driver首先會通過SQL Parser來解析該sql,將sql語句轉(zhuǎn)換成抽象語法樹(AST)减拭,并且判斷是否存在該表蔽豺,字段是否存在,再通過編譯器將AST轉(zhuǎn)換為邏輯執(zhí)行計(jì)劃(比如map,reduce)拧粪,然后通過Query Optimizer對執(zhí)行計(jì)劃進(jìn)行優(yōu)化修陡,最后將優(yōu)化后的邏輯執(zhí)行計(jì)劃交給mapreduce進(jìn)行執(zhí)行處理,將結(jié)果存儲到hdfs文件系統(tǒng)上可霎。

4.hive的優(yōu)點(diǎn)以及使用場景:

*hive使用簡單的HQL語句對數(shù)據(jù)進(jìn)行查詢處理魄鸦,降低了程序員的學(xué)習(xí)成本,提高了開發(fā)效率癣朗。

*避免去寫繁瑣的程序(mapreduce)拾因,提高開發(fā)效率,元數(shù)據(jù)共享,支持多多客戶端操作绢记,同時(shí)也易于擴(kuò)展扁达。

二、安裝部署Hive

這里是hive的下載地址:(http://archive.apache.org/dist/hive/)

本文選擇hive 0.13的版本進(jìn)行安裝庭惜,讀者可以選擇自己需要的版本進(jìn)行安裝罩驻。

這里寫圖片描述

上面是hive安裝所需的環(huán)境(來自官網(wǎng)),因此讀者必須安裝jdk1.7或以上的版本护赊,并且需要hadoop環(huán)境的安裝惠遏。對于這些環(huán)境讀者可以查閱相關(guān)資料來安裝,也可閱讀我前面的文章進(jìn)行安裝骏啰。這里不贅述节吮。

1.在下載好hive安裝包之后,先將其解壓:

$ tar -xzvf hive-x.y.z.tar.gz

如果讀者閱讀官網(wǎng)會讓你配置hive的環(huán)境變量并且導(dǎo)出變量判耕,這樣做的目的是方便在任何目錄下啟動(dòng)hive透绩,這里我習(xí)慣上在hive的安裝目錄下啟動(dòng),因此就不配置環(huán)境變量了壁熄,如果想配置可以查看官方文檔帚豪。

2.在hive的安裝目錄下回有以下文件夾:

這里寫圖片描述

然后進(jìn)入hive的安裝目錄下有一個(gè)conf文件夾我們將hive-env.sh.template文件重命名為hive-env.sh然后修改下面配置(分別是hadoop安裝目錄和hive conf文件夾所在目錄)。

# Set HADOOP_HOME to point to a specific hadoop install directory

HADOOP_HOME=/opt/modules/hadoop-2.5.0

# Hive Configuration Directory can be controlled by:

export HIVE_CONF_DIR=/opt/modules/hive-0.13.1/conf

要想啟動(dòng)hive首先要啟動(dòng)hdfs文件系統(tǒng)草丧,接著還要在hdfs文件系統(tǒng)上創(chuàng)建下面的目錄并且修改權(quán)限:

$ $HADOOP_HOME/bin/hadoop fs -mkdir? ? ? /tmp

? $ $HADOOP_HOME/bin/hadoop fs -mkdir? ? ? /user/hive/warehouse

? $ $HADOOP_HOME/bin/hadoop fs -chmod g+w? /tmp

? $ $HADOOP_HOME/bin/hadoop fs -chmod g+w? /user/hive/warehouse

3.在執(zhí)行完上面的操作后我們就可以啟動(dòng)hive了狸臣,切換到hive安裝目錄下:

[shinelon@hadoop-senior hive-0.13.1]$ bin/hive

4.我們可以對hive進(jìn)行簡單的測試:

show databases ;

use default;

show tables ;

create table shinelon_log(id int,name string);

select * from shinelon_log;

select count(*) from shinelon_log;

其實(shí)和MySQL語句很相似,幾乎差不多昌执,經(jīng)過上面的測試我們就可以感受到hive的使用很簡單烛亦,不過在執(zhí)行select count(*) from shinelon_log;語句時(shí)我們會發(fā)現(xiàn)hive其實(shí)運(yùn)行的是mapreduce程序,這也就很好的解釋了上述hive的原理懂拾。下面我們?yōu)榱烁玫睦斫鈎ive煤禽,可以創(chuàng)建一個(gè)文件(student.txt),在里面寫入測試數(shù)據(jù)岖赋,其中列之間用tab鍵隔開:

1001? ? zhangsan

1002? ? lisi

1003? ? wangwu

然后在hive創(chuàng)建一張表:

create table student(id int, name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

上面的語句可能后半段不容易讓初學(xué)者明白檬果,ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t’是設(shè)置數(shù)據(jù)分隔符,剛開始我們介紹到hive對結(jié)構(gòu)化日志數(shù)據(jù)的處理唐断,所謂結(jié)構(gòu)化數(shù)據(jù)就是列與列之間有一定的界定符號來分割汁汗。

load data local inpath '/opt/datas/student.txt'into table student ;

select * from student ;

select id from student ;

然后我們執(zhí)行上述語句就會發(fā)現(xiàn)hive已經(jīng)成功的將數(shù)據(jù)映射到student表當(dāng)中。

5.在開發(fā)hive時(shí)我們會啟動(dòng)多個(gè)客戶端來進(jìn)行操作栗涂,但是對于剛安裝的hive它會將元數(shù)據(jù)存儲在自己的內(nèi)存數(shù)據(jù)庫(derby)當(dāng)中知牌,由于啟動(dòng)hive它就要加載元數(shù)據(jù),而此時(shí)元數(shù)據(jù)存儲在內(nèi)存數(shù)據(jù)庫中斤程,資源競爭角寸,所以只允許啟動(dòng)一個(gè)hive客戶端菩混。怎么解決呢?我們一般將元數(shù)據(jù)存儲在MySQL服務(wù)器或者oracle服務(wù)器中扁藕,這里我們來講解將元數(shù)據(jù)存儲到MySQL中沮峡。

三、linux下安裝MySQL并且設(shè)置hive元數(shù)據(jù)存儲

1.安裝MySQL

注意:MySQL和hive是安裝在同一臺服務(wù)器上亿柑。

首先下載MySQL安裝包邢疙,將其解壓,然后判斷服務(wù)器是否安裝有MySQL望薄,并且將其卸載:

[shinelon@hadoop-senior softwares]$ unzip mysql-libs.zip

[shinelon@hadoop-senior mysql-libs]$ sudo rpm -qa|grep mysql

[shinelon@hadoop-senior mysql-libs]$ sudo rpm -e --nodeps mysql-libs-5.1.66-2.el6_3.x86_64

[shinelon@hadoop-senior mysql-libs]$ sudo rpm -ivh MySQL-server-5.6.24-1.el6.x86_64.rpm

[shinelon@hadoop-senior mysql-libs]$ sudo rpm -ivh MySQL-client-5.6.24-1.el6.x86_64.rpm

安裝好MySQL之后疟游,就可以登錄測試一下,linux下MySQL root用戶初始隨機(jī)密碼防止在/root/.mysql_secret文件下痕支,可以查看復(fù)制登錄颁虐。

圖片發(fā)自簡書App


默認(rèn)的在mysql數(shù)據(jù)庫下有一個(gè)user表存儲著服務(wù)器用戶名以及密碼,因?yàn)橹辉试SMySQL 的root用戶登錄卧须,因此我們不能遠(yuǎn)程登錄另绩,可能會受到權(quán)限的限制,為了防止后續(xù)任務(wù)出現(xiàn)問題花嘶,這里我們將host為localhost的一條記錄改為host為%:

mysql> update user set host='%' where host='localhost';

然后刪除其他字段笋籽,只留這一條記錄,這樣我們就可以遠(yuǎn)程在其他主機(jī)上登錄了椭员。

2.設(shè)置hive元數(shù)據(jù)存儲位置

下面我們將hive的元數(shù)據(jù)存儲到mysql中车海。

在hive安裝目錄的conf目錄下創(chuàng)建一個(gè)文件夾hive-site.xml文件,添加如下配置:

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

? ? <property>

? ? ? ? <name>javax.jdo.option.ConnectionURL</name>

? ? ? ? <value>jdbc:mysql://hadoop-senior.shinelon.com/metastore?createDatabaseIfNotExist=true</value>

? ? ? ? <description>JDBC connect string for a JDBC metastore</description>

? ? </property>

? ? <property>

? ? ? ? <name>javax.jdo.option.ConnectionDriverName</name>

? ? ? ? <value>com.mysql.jdbc.Driver</value>

? ? ? ? <description>Driver class name for a JDBC metastore</description>

? ? </property>

? ? <property>

? ? ? ? <name>javax.jdo.option.ConnectionUserName</name>

? ? ? ? <value>root</value>

? ? ? ? <description>username to use against metastore database</description>

? ? </property>

? ? <property>

? ? ? ? <name>javax.jdo.option.ConnectionPassword</name>

? ? ? ? <value>123456</value>

? ? ? ? <description>password to use against metastore database</description>

? ? </property>

</configuration>

然后還要將MySQL驅(qū)動(dòng)包拷貝到hive的lib目錄下:

[shinelon@hadoop-senior mysql-connector-java-5.1.27]$ cp mysql-connector-java-5.1.27-bin.jar /opt/modules/hive-0.13.1/lib/

至此拆撼,我們就配置好元數(shù)據(jù)容劳,在我們重啟hive以及MySQL數(shù)據(jù)庫后會發(fā)MySQL數(shù)據(jù)庫多了一個(gè)數(shù)據(jù)庫metastore喘沿,這個(gè)數(shù)據(jù)庫也是我們上面配置文件connectionUrl中執(zhí)行的闸度。

圖片發(fā)自簡書App


這時(shí)我們也可以啟動(dòng)多個(gè)hive客戶端進(jìn)行操作了。



上述是我對hive的認(rèn)識以及安裝部署總結(jié)蚜印,不足之處還望指教莺禁,謝謝!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末窄赋,一起剝皮案震驚了整個(gè)濱河市哟冬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌忆绰,老刑警劉巖浩峡,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異错敢,居然都是意外死亡翰灾,警方通過查閱死者的電腦和手機(jī)缕粹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纸淮,“玉大人平斩,你說我怎么就攤上這事⊙士椋” “怎么了绘面?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長侈沪。 經(jīng)常有香客問我揭璃,道長,這世上最難降的妖魔是什么峭竣? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任塘辅,我火速辦了婚禮,結(jié)果婚禮上皆撩,老公的妹妹穿的比我還像新娘扣墩。我一直安慰自己,他們只是感情好扛吞,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布呻惕。 她就那樣靜靜地躺著,像睡著了一般滥比。 火紅的嫁衣襯著肌膚如雪亚脆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天盲泛,我揣著相機(jī)與錄音濒持,去河邊找鬼。 笑死寺滚,一個(gè)胖子當(dāng)著我的面吹牛柑营,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播村视,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼官套,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蚁孔?” 一聲冷哼從身側(cè)響起奶赔,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎杠氢,沒想到半個(gè)月后站刑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鼻百,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年绞旅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了质况。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡玻靡,死狀恐怖结榄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情囤捻,我是刑警寧澤臼朗,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站蝎土,受9級特大地震影響视哑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜誊涯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一挡毅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧暴构,春花似錦跪呈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至砾隅,卻和暖如春误阻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背晴埂。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工究反, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人儒洛。 一個(gè)月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓精耐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親晶丘。 傳聞我的和親對象是個(gè)殘疾皇子黍氮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容