1. 程式人生 > >Hive之 hive-1.2.1 + hadoop 2.7.4 叢集安裝

Hive之 hive-1.2.1 + hadoop 2.7.4 叢集安裝

一、 相關概念

Hive Metastore有三種配置方式,分別是:

Embedded Metastore Database (Derby) 內嵌模式
Local Metastore Server 本地元儲存
Remote Metastore Server 遠端元儲存
1.1 Metadata、Metastore作用

metadata即元資料。元資料包含用Hive建立的database、tabel等的元資訊。
元資料儲存在關係型資料庫中。如Derby、MySQL等。

Metastore的作用是:客戶端連線metastore服務,metastore再去連線MySQL資料庫來存取元資料。有了metastore服務,就可以有多個客戶端同時連線,而且這些客戶端不需要知道MySQL資料庫的使用者名稱和密碼,只需要連線metastore 服務即可。

1.2三種配置方式區別

內嵌模式使用的是內嵌的Derby資料庫來儲存元資料,也不需要額外起Metastore服務。這個是預設的,配置簡單,但是一次只能一個客戶端連線,適用於用來實驗,不適用於生產環境。

本地元儲存和遠端元儲存都採用外部資料庫來儲存元資料,目前支援的資料庫有:MySQL、Postgres、Oracle、MS SQL Server.在這裡我們使用MySQL。

本地元儲存和遠端元儲存的區別是:本地元儲存不需要單獨起metastore服務,用的是跟hive在同一個程序裡的metastore服務。遠端元儲存需要單獨起metastore服務,然後每個客戶端都在配置檔案裡配置連線到該metastore服務。遠端元儲存的metastore服務和hive執行在不同的程序裡。

在生產環境中,建議用遠端元儲存來配置Hive Metastore。

前提: 已經安裝好三個節點的 hadoop 叢集,參考 http://blog.csdn.net/zhang123456456/article/details/77621487
這裡選用mySql作為元資料庫,將mySql和Hive安裝在master伺服器上 
統一給放到/usr/local/hadoop

1.下載安裝檔案,並解壓: 
cd /usr/local/hadoop 
wget http://mirrors.cnnic.cn/apache/hive/hive-1.2.1/apache-hive-1.2.1-bin.tar.gz 
tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /usr/local/hadoop

-- 如果 hive 有專屬的使用者,記得賦權
sudo chown -R XXX:XXX /usr/local/hadoop/apache-hive-1.2.1-bin

2.設定環境變數
sudo vim /etc/profile
在最後加上
export HIVE_HOME=/usr/local/hadoop/apache-hive-1.2.1-bin(這兒是你的hive的解壓路徑)
export PATH=$PATH:$HIVE_HOME/bin
source /etc/profile ->使配置檔案生效

安裝mysql , 參考 http://blog.csdn.net/zhang123456456/article/details/53608554 ,注意MySQL資料庫不能設定為BINLOG_FORMAT = STATEMENT,否則報Cannot execute statement: impossible to write to binary log 。

3. 在 mysql 資料庫中建立 hive 專屬資料庫 與 使用者
mysql -u root -p ->輸入之後會提示你輸入之前你設定的root密碼
create database hiveDB; -> 建立資料庫
create user 'hive' identified by 'hive'; ->建立使用者
grant all privileges on hivedb.* to 'hive'@'%' identified by 'hive'; ->將允許從任意地點登陸的hive使用者對hiveDB資料庫的所有表執行增刪查改四種操作
flush privileges; -> 刷新系統許可權表

4.拷貝JDBC驅動包 
將mySql的JDBC驅動包複製到Hive的lib目錄下 
cp mysql-connector-java-5.1.34-bin.jar  /usr/local/hadoop/apache-hive-1.2.1-bin/lib


5.修改Hive配置檔案: 
cd apache-hive-1.2.1-bin/conf/
cp hive-default.xml.template hive-site.xml
vi hive-site.xml  #修改相應配置

hive.exec.scratchdir       ## 所有${system:java.io.tmpdir}和@{system:user.name}  都替換掉

/usr/local/hadoop/apache-hive-1.2.1-bin/iotmp

javax.jdo.option.ConnectionURL
jdbc:mysql://HadoopMaster:3306/hivedb?useUnicode=true&characterEncoding=UTF-8&createDatabaseIfNotExist=true

jdbc:mysql://hadp-master:3306/hivedb?useUnicode=true&createDatabaseIfNotExist=true

javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver

javax.jdo.option.ConnectionUserName
hive

javax.jdo.option.ConnectionPassword
hive

hive.metastore.warehouse.dir
/user/hive/warehouse
location of default database for the warehouse


說明:
hive.exec.scratchdir->執行HIVE操作訪問HDFS用於臨時儲存資料的目錄。目錄許可權設定為733。我這兒用的是/tmp/hive目錄。
javax.jdo.option.ConnectionURL -> 設定hive通過JDBC連結MYSQL資料庫儲存metastore存放的資料庫地址
javax.jdo.option.ConnectionDriverName ->設定連結mysql的驅動名稱。
javax.jdo.option.ConnectionUserName -> 設定儲存metastore內容的資料庫使用者名稱
javax.jdo.option.ConnectionPassword -> 設定儲存metastore內容的資料庫使用者名稱密碼
hive.metastore.warehouse.dir -> 設定用於存放hive元資料的目錄位置,改配置有三種模式,內嵌模式,本地元資料,遠端元資料。如果hive.metastore.uris是空,則是本地模式。否則則是遠端模式。

②配置hive-env.sh,這個檔案也是沒有的,是hive-env.sh.template複製過來的

sudo cp hive-env.sh.template hive-env.sh
sudo vim hive-env.sh
將jdk的路徑和hadoop的家目錄匯入到這個檔案中:
export JAVA_HOME=/usr/local/jdk1.8.0_131
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.4/

6.分發Hive分別到slave1,slave2上 
scp -r /usr/local/hadoop/apache-hive-1.2.1-bin hadp-node1:/usr/local/hadoop/ 
scp -r /usr/local/hadoop/apache-hive-1.2.1-bin hadp-node2:/usr/local/hadoop/

配置環境變數如同master。

7.測試Hive

進入到Hive的安裝目錄,命令列: 
cd $HIVE_HOME/bin
./hive --service metastore &
./hive --service hiveserver2 &
./hive

hive> show tables;
OK
Time taken: 1.995 seconds