之前的文章帶大家一起從hadoop最開(kāi)始的搭建析蝴,到最終寫(xiě)一個(gè)MapReduce結(jié)尾,相信大家也基本了解什么是hadoop。當(dāng)然了現(xiàn)如今的開(kāi)發(fā)妹萨,基本少很少有人寫(xiě)MapReduce,因?yàn)閷?xiě)起來(lái)太麻煩了炫欺,又是map乎完,又是reduce,還要寫(xiě)運(yùn)行的客戶(hù)端品洛。程序猿們太喜歡偷懶了树姨,所以hive就出現(xiàn)了
Hive
Hive是一個(gè)數(shù)據(jù)倉(cāng)庫(kù)基礎(chǔ)工具在Hadoop中用來(lái)處理結(jié)構(gòu)化數(shù)據(jù)摩桶。它架構(gòu)在Hadoop之上,總歸為大數(shù)據(jù)娃弓,并使得查詢(xún)和分析方便典格。并提供簡(jiǎn)單的sql查詢(xún)功能,可以將sql語(yǔ)句轉(zhuǎn)換為MapReduce任務(wù)進(jìn)行運(yùn)行.
是的台丛,你沒(méi)有看錯(cuò)耍缴,hive就是把sql語(yǔ)句轉(zhuǎn)換為我們MapReduce任務(wù)的,所以做hive開(kāi)發(fā)完全可以不懂編程挽霉,只需要會(huì)寫(xiě)sql語(yǔ)句就可以了防嗡。
貼一張hive的結(jié)構(gòu)圖,大家可以體會(huì)以下
注意
Hive不是為在線(xiàn)事務(wù)處理而設(shè)計(jì)侠坎。它最適合用于傳統(tǒng)的數(shù)據(jù)倉(cāng)庫(kù)任務(wù)
接下來(lái)就帶大家在CenterOS7
上搭建一下Hive環(huán)境
Hive安裝有三種模式
嵌入模式:
元熟悉信息被存儲(chǔ)在Hive自帶的Derby數(shù)據(jù)庫(kù)中
只允許創(chuàng)建一個(gè)連接
多用于Demo
本地模式:
元數(shù)據(jù)信息被存儲(chǔ)在MySQL數(shù)據(jù)庫(kù)中
MySQL數(shù)據(jù)庫(kù)與Hive運(yùn)行在同一臺(tái)物理機(jī)器上
多用于開(kāi)發(fā)和測(cè)試
遠(yuǎn)程模式:
Hive與Mysql安裝在不同的操作系統(tǒng)上
在這里就給搭建演示本地模式安裝蚁趁,元數(shù)據(jù)存在mysql中
第一步
- 準(zhǔn)備Hive-2.3.3工具包:點(diǎn)擊下載
- 放入linux自己目錄下,通過(guò)
tar -zxvf xxxxx
命令解壓实胸,然后通過(guò)以下命令創(chuàng)建一個(gè)臨時(shí)目錄mkdir hive_tmpdir
為后面配置做準(zhǔn)備
第二步
- 進(jìn)入conf目錄,復(fù)制
hive-default.xml.template
為hive-site.xml
文件
cp hive-default.xml.template hive-site.xml
- 配置
hive-site.xml
文件
將所有的${system:java.io.tmpdir}
替換為第一步創(chuàng)建的臨時(shí)目錄hive_tmpdir
如果后面還接的有類(lèi)似這樣引用的變量${}他嫡,可以直接刪除
如:
<property>
<name>hive.exec.local.scratchdir</name>
#<value>${system:java.io.tmpdir}/${system:user.name}</value>
<value>/home/mmcc/hive_tmpdir</value>
</property>
...
然后將hive.metastore.schema.verification
的值設(shè)置為false,取消metastore驗(yàn)證庐完,
再將datanucleus.schema.autoCreateTables
設(shè)置為true钢属,自動(dòng)在數(shù)據(jù)庫(kù)里建表。
其次配置我們的mysql數(shù)據(jù)庫(kù)门躯,關(guān)于mysql的安裝大家可以自行研究淆党。
依然是在hive-site.xml
中
<property>
<name>javax.jdo.option.ConnectionURL</name> #數(shù)據(jù)庫(kù)鏈接
<value>jdbc:mysql://localhost:3306/hive?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> #數(shù)據(jù)庫(kù)驅(qū)動(dòng)名
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value> #數(shù)據(jù)庫(kù)賬號(hào)
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value> #數(shù)據(jù)庫(kù)密碼
<description>password to use against metastore database</description>
</property>
配置好hive-site.xml
之后保存退出。
第三步
- 將mysql的驅(qū)動(dòng)包放入hive的lib目錄下讶凉,mysql-5.1.25驅(qū)動(dòng)下載
- 去掉hive里的sl4j的jar包染乌,可能會(huì)和hadoop里的沖突(保留log4j-api和log4j-core和log4j-web)
第四步
到這里關(guān)于準(zhǔn)備配置及一些準(zhǔn)備工作就已經(jīng)完成了,接下來(lái)就可以正式進(jìn)行啟動(dòng)的流程了懂讯。首先關(guān)閉hadoop的安全模式荷憋,避免出現(xiàn)不必要的錯(cuò)誤,執(zhí)行命令hdfs dfsadmin -safemode leave
褐望,然后執(zhí)行以下命令進(jìn)行啟動(dòng)勒庄。
#啟動(dòng)hive的metastore服務(wù)
[root@master bin]# ./hive --service metastore &
#初始化元數(shù)據(jù)為mysql數(shù)據(jù)庫(kù)(只有第一次需要),這一步完成后,在mysql里其實(shí)就會(huì)生成hive表
[root@master bin]# ./schematool -dbType mysql -initSchema #
#接下來(lái)可以直接運(yùn)行hive了
[root@master bin]# ./hive
然后我們就進(jìn)入到了hive的命令行模式譬挚,就可以做hive的執(zhí)行操作了锅铅。