基於hadoop集羣的hive 安裝(mysql,derby)

基於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;

就可以看見相應的顯示;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章