一、 相關概念
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
