基於hadoop集群的hive安裝步驟 ----嵌入式derby 模式
安裝環境
hadoop已經安裝結束,
mysql已經安裝結束。
hive是安裝在集群中的主節點上(hostname:node0)
hadoop 版本號:hadoop-0.23.5 hive版本號:
hive-0.8.1 derby版本號:db-derby-10.9.1.0
mysql版本號:mysql-5.1.47(linux redhat 安裝時已經安裝)
首先是hive的嵌入式模式的安裝,
在hive嵌入式安裝時默認的數據庫是derby,
嵌入式模式的安裝無法用於實際的工作,
即這種模式的運行環境無法支持雙向同步或是集群工作。
但是可以用來對hive安裝是否正確起到測試和調配作用,
待到嵌入模式下hive正確運行后,
可以在此基礎上對配置文件做簡單的調配就可以進行mysql安裝配置了。
可以先創建好目錄:
mkdir -p /usr/hive 用來存放hive壓縮包解壓后的相應文件
mkdir -p /usr/derby 用來存放derby解壓后的相應文件
--------------------------------------------------------
將hive的壓縮包從主機copy到虛擬機上的 /usr 目錄下,
然后對壓縮包進行解壓,命令是:
tar -xzf hive-0.8.1-bin.tar
解壓后會在/usr目錄下生成一個 hive-0.8.1-bin的文件夾,
切換到該文件夾下 cd /usr/hive-0.8.1-bin
ls 會看到conf lib bin 等相應的文件夾,
cp * -r /usr/hive 將所有的文件都拷貝到/usr/hive下
cd /usr 切換目錄到/usr路徑下
rm -r -f hive-0.8.1-bin 這步可選,將原先的解壓后的文件刪除
-------------------------------------------------------------------
將derby的壓縮包從主機copy到虛擬機上的 /usr 目錄下,
解壓該壓縮文件:
tar -xzf db-derby-10.9.1.0-bin.tar
解壓后生成文件夾: db-derby-10.9.1.0-bin
將該文件夾下的所有內容轉入到/usr/derby 文件夾下
cd /db-derby-10.9.1.0-bin
ls 執行這個命令之后會看見 bin lib test 等一些文件夾
cp * -r /usr/derby
cd /usr
rm -f -r db-derby-10.9.1.0 將文件夾遞歸強制刪除。
------------------------------------------------------------
這樣derby被安裝在/usr/derby 下
而hive則被安裝在/usr/hive下,
安裝路徑的設置很重要,因為這關系到配置文件的改寫。
------------------------------------------------------------- vi /etc/profile
在末尾加上:
#set for hive
export HIVE_HOME=/usr/hive
export HIVE_CONF_DIR=/usr/hive/conf
//在系統中指出hive的配置文件所在
export PATH=$PATH:$HIVE_HOME/bin
//這個可以實現,只要輸入hive,hive service就會自動響應, //而不用必須輸入hive所在的絕對路徑。
export HIVE_LIB=$HIVE_HOME/lib
由於hadoop已經安裝上了,所以關於hadoop路徑的export不再說明。
當然為了讓profile文件立即生效:
source /etc/profile
這樣既可生效。
-------------------------------------
接下來是對hive配置文件的調配
首先應該切換到目錄:
cd /usr/hive/conf/
ls 會看見有:hive-env.sh.template這個文件,
(.template文件是模板文件, 讓用戶參照其中的格式進行自定義的修改和優化)
將其cp並命名為:hive-env.sh 命令如下:
cp hive-env.sh.template hive-env.sh
vi hive-env.sh
將export HADOOP_HEAPSIZE=1024前面的‘#’去掉
當然可以根據自己的環境對這個默認的1024進行優化
將export HADOOP_HOME前面的‘#’號去掉,
並讓它指向您所安裝hadoop的目錄 (就是切換到這個目錄下有hadoop的conf,lib,bin 等文件夾的目錄),
(mine:HADOOP_HOME=/home/hadoop/hadoop)
其實在安裝hive時需要指定HADOOP_HOME的原理基本上與 在安裝Hadoop時需要指定JAVA_HOME的原理是相類似的。
Hadoop需要java作支撐,而hive需要hadoop作為支撐。
將export HIVE_CONF_DIR=/usr/hive/conf,並且把‘#’號去掉
將export HIVE_AUX_JARS_PATH=/usr/hive/lib
esc(鍵) :wq
source /hive-env.sh(生效文件)
----------------------------------------------------------finish hive-env.sh
在修改之前,要相應的創建目錄,以便與配置文件中的 路徑相對應,否則在運行hive時會報錯的。
mkdir -p /usr/hive/warehouse mkdir -p /usr/hive/tmp mkdir -p /usr/hive/log
cp hive-default.xml.template hive-site.xml
vi hive-site.xml
這個文件中的配置項很多,篇幅也很長,所以要有耐心看。
當然也可以使用搜索匹配字符串的方式進行查找:
鍵入‘/hive.metastore.warehouse.dir’(回車) 就會鎖定到所需要的字符串上。
其中有三處需要修改:
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/usr/hive/warehouse</value>
</property> 這個是數據目錄
<property>
<name>hive.exec.scratdir</name>
<value>/usr/hive/tmp</value>
</property> 這個是臨時文件目錄
//這個在筆者的文件中沒有可以自己添加
<property>
<name>hive.querylog.location</name>
<value>/usr/hive/log</value>
</property>
這個是用於存放hive相關日志的目錄
其余的不用修改。
-------------------------------------------finish hive-site.xml
cp hive-log4j.properties.template hive-log4j.proprties
vi hive-log4j.properties
hive.log.dir= 這個是當hive運行時,
相應的日志文檔存儲到什么地方
(mine:hive.log.dir=/usr/hive/log/${user.name})
hive.log.file=hive.log 這個是hive日志文件的名字是什么 默認的就可以,
只要您能認出就好,
只有一個比較重要的需要修改一下否則會報錯。 log4j.appender.EventCounter=org.apache.hadoop.log.metrics.EventCounter
如果沒有修改的話會出現: WARNING: org.apache.hadoop.metrics.EventCounter is deprecated. please use org.apache.hadoop.log.metrics.EventCounter
in all the log4j.properties files. (只要按照警告提示修改即可)。
-------------------------------------------------------finish all
接着只要輸入命令:hive 就可以顯示出: hive> 輸入命令show tables;
(不要忘記加上分號,否則不會執行)
輸入命令exit;(不要忘記加上分號) 退出hive
---------------------------------------------------------finish install
接下來要配置的是mysql模式下的hive;
此種模式下是將hive的metadata存儲在Mysql中, Mysql的運行環境支撐雙向同步或是集群工作環境,
這樣的話,至少兩台數據庫服務器上會備份hive的元數據。
既然在derby模式下的hive已經能夠成功運行, 這就說明在系統中關於hive配置文件中的參數是正確的。
接下來是關於mysql的安裝, 以及hive的配置文件關於mysql而進行一些參數的調配。
---------------------------------------------------------------------- 可以在系統中輸入命令:
service mysqld restart
mysql
來判斷計算機中是否安裝有mysql。 如果系統中安有mysql,會出現提示: mysql> (進入到mysql的命令模式)
------------------------------------------
如果系統中沒有安裝可以從mysql官方網站下載。
http://www.mysql.com/downloads/
----------------------------------------------
繼續配置hive-site.xml文件:
<property>
<name>hive.metastore.warehouse.dir</name>
<value>hdfs://node0:9000/usr/hive/warehouse</value>
</property>
其中node0指的是筆者的NameNode的hostname;
<property>
<name>hive.exec.scratchdir</name>
<value>hdfs://node0:9000/usr/hive/warehouse</value>
</property>
//這個沒有變化
<property>
<name>hive.querylog.location</name>
<value>/usr/hive/log</value> </property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNoExist=true</value>
</property>
javax.jdo.option.ConnectionURL 這個參數使用來設置元數據連接字串
----------------------------------------------------
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
javax.jdo.option.ConnectionDriverName 關於在hive中用java來開發與mysql進行交互時,
需要用到一個關於mysql的connector,
這個可以將java語言描述的對database進行的操作,
轉化為mysql可以理解的語句。
connector是一個用java語言描述的jar文件。
而這個connector可在官方網站上下載得到。
筆者附件中有一個,如果需要可以自行下載。
經證實即便connector與mysql的版本號不一致,
也可以實現相應的功能。
connector是要copy到/usr/hive/lib目錄下面的。
cp mysql-connector-java-5.1.1.18-bin /usr/hive/lib
-----------------------------------------------------------
<property>
<name>javax.jdo.option.ConnectorUserName</name>
<value>hive</value>
</property>
這個javax.jdo.option.ConnectionUserName
是用來設置hive存放的元數據的數據庫(這里是mysql數據庫) 的用戶名稱的。
而這個‘hive‘可以根據用戶自己的需要來自行設置
---------------------------------------------------------------
<property> <name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
</property>
這個javax.jdo.option.ConnetionPassword是用來設置,
用戶登錄數據庫的時候需要輸入的密碼的。
而這個‘hive’同樣可以根據用戶自己的需要來進行設置。
---------------------------------------------------------------
<property>
<name>datanucleus.fixedDatastore</name>
<value>false</value>
<description>Disable updates to the schema once it has been created.</description>
</property>
//在筆者的hive-site.xml文件中並沒有關於這個的設置項
//后添加后會遇到運行錯誤,如果您對此感興趣可以參閱網站上的說明
//更進一步的研究可以參考:
https://issues.apache.org/jira/browse/HIVE-1841
----------------------------------------------------------------------
在hive配置好以后,若想讓其運行起來,
應該在mysql庫中創建用戶hive,並且密碼也要設置為hive;
這個用戶名與密碼是和前面的配置文件的
javax.jdo.option.ConnectorUserName
javax.jdo.option.ConnectionPassword
是相對應的。
如何在mysql中創建用戶?並賦予其權限?
service mysqld start
mysql
mysql> CREATE USER 'hvie'@'node0' IDENTIFIED BY 'hive';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'hive'@'node0' WITH GRANT OPTION;
mysql> flush privileges;
執行上述語句后就可以用hive用戶登錄來檢驗用戶是否添加成功
mysql -uhive -hnode0 -p (enter)
password:****(hive)
node0是筆者主機的hostname,當然您也可以寫localhost 其中-u參數后接創建的用戶名稱,而-h后接的是創建mysql用戶時主機的名稱(@之后的)
-----------------------------------------------------------------------------------------
對於hive登錄后出現的錯誤:
hive>show tables; FAILED :Error in metadata : java.lang.IllegalArgumentException :URL: does not have a scheme
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask
hive>show tables;
FAILED:Error in metadata:javax.jdo.JDOFatalDataStoreException:Unknow database 'hive' NestedThrowables; com.mysql.jdbc.execeptions.jdbc4.MySQLSyntaxErrorException:Unknown database 'hive'
按照錯誤提示:必須要為hive的metadata存儲創建相應的database。
而創建database應該使用的是mysql 的hive用戶來創建的database
以hive用戶創建hive數據庫的命令:
mysql -uhive -hnode0 -p(enter)
password:****(hive)
mysql>show databases;
......
mysql>create database hive;
.......
mysql>show databases;
.......
mysql>exit;
輸入hive(enter) hive>show databases; OK;
就可以看見相應的顯示;