Hive是一個(gè)基于Hadoop的數(shù)據(jù)倉(cāng)庫(kù)平臺(tái)。通過(guò)hive,我們可以方便地進(jìn)行ETL的工作。hive定義了一個(gè)類似于SQL的查詢語(yǔ)言:HQL,能夠?qū)⒂脩艟帉?xiě)的QL轉(zhuǎn)化為相應(yīng)的Mapreduce程序基于Hadoop執(zhí)行。
本文講解如何搭建一個(gè)Hive平臺(tái)。假設(shè)我們有3臺(tái)機(jī)器:hadoop1,hadoop2,hadoop3。并且都安裝好了Hadoop-0.19.2(hive支持的Hadoop版本很多),hosts文件配置正確。Hive部署在hadoop1機(jī)器上。
最簡(jiǎn)單,最快速的部署方案
在Hadoop-0.19.2中自帶了hive的文件。版本為0.3.0。
我們首先啟動(dòng)Hadoop:sh $HADOOP_HOME/bin/start-all.sh
然后啟動(dòng)hive即可:sh $HADOOP_HOME/contrib/hive/bin/hive
這個(gè)時(shí)候,我們的Hive的命令行接口就啟動(dòng)起來(lái)了,你可以直接輸入命令來(lái)執(zhí)行相應(yīng)的hive應(yīng)用了。
這種部署方式使用derby的嵌入式模式,雖然簡(jiǎn)單快速,但是無(wú)法提供多用戶同時(shí)訪問(wèn),所以只能用于簡(jiǎn)單的測(cè)試,無(wú)法實(shí)際應(yīng)用于生產(chǎn)環(huán)境。所以,我們要修改hive的默認(rèn)配置,提高可用性。
搭建多用戶的,提供web界面的部署方案
目前只用比較多hive版本是hive-0.4.1。我們將使用這個(gè)版本來(lái)搭建hive平臺(tái)。
首先,下載hive-0.4.1:svn co http://svn.apache.org/repos/asf/hadoop/hive/tags/release-0.4.1/ hive-0.4.1
然后,修改下載文件里面的編譯選項(xiàng)文件shims/ivy.xml,將其修改為如下內(nèi)容(對(duì)應(yīng)的Hadoop版本為0.19.2)
<ivy-module version="2.0">
<info organisation="org.apache.hadoop.hive" module="shims"/>
<dependencies>
<dependency org="hadoop" name="core" rev="0.19.2">
<artifact name="hadoop" type="source" ext="tar.gz"/>
</dependency>
<conflict manager="all" />
</dependencies>
</ivy-module>
接下來(lái),我們使用ant去編譯hive: ant package
編譯成功后,我們會(huì)發(fā)現(xiàn)在build/dist目錄中就是編譯成功的文件。將這個(gè)目錄設(shè)為$HIVE_HOME
修改conf/hive-default.xml文件,主要修改內(nèi)容如下:
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:derby://hadoop1:1527/metastore_db;create=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>org.apache.derby.jdbc.ClientDriver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
在hadoop1機(jī)器上下載并安裝apache derby數(shù)據(jù)庫(kù):wget http://labs.renren.com/apache-mirror/db/derby/db-derby-10.5.3.0/db-derby-10.5.3.0-bin.zip
解壓derby后,設(shè)置$DERBY_HOME
然后啟動(dòng)derby的network Server:sh $DERBY_HOME/bin/startNetworkServer -h 0.0.0.0
接下來(lái),將$DERBY_HOME/lib目錄下的derbyclient.jar與derbytools.jar文件copy到$HIVE_HOME/lib目錄下。
啟動(dòng)Hadoop:sh $HADOOP_HOME/bin/start-all.sh
最后,啟動(dòng)hive的web界面:sh $HIVE_HOME/bin/hive --service hwi
這樣,我們的hive就部署完成了。我們可以直接在瀏覽器中輸入: http://hadoop1:9999/hwi/ 進(jìn)行訪問(wèn)了(如果不行話,請(qǐng)將hadoop1替換為實(shí)際的ip地址,如:http://10.210.152.17:9999/hwi/)。
這種部署方式使用derby的c/s模式,允許多用戶同時(shí)訪問(wèn),同時(shí)提供web界面,方便使用。推薦使用這種部署方案。
關(guān)注Hive的schema
我們上面談到的2中部署方案都是使用derby數(shù)據(jù)庫(kù)來(lái)保存hive中的schema信息。我們也可以使用其他的數(shù)據(jù)庫(kù)來(lái)保存schema信息,如mysql。
可以參考這篇文章了解如果使用mysql來(lái)替換derby:http://www.mazsoft.com/blog/post/2010/02/01/Setting-up-HadoopHive-to-use-MySQL-as-metastore.aspx
我們也可以使用HDFS來(lái)保存schema信息,具體的做法是修改conf/hive-default.xml,修改內(nèi)容如下:
<property>
<name>hive.metastore.rawstore.impl</name>
<value>org.apache.hadoop.hive.metastore.FileStore</value>
<description>Name of the class that implements org.apache.hadoop.hive.metastore.rawstore interface. This class is used to store and retrieval of raw metadata objects such as table, database</description>
</property>