個人主頁: http://www.linbingdong.com
本文介紹Hive安裝配置的整個過程,包括MySQL、Hive及Metastore的安裝配置,並分析了Metastore三種配置方式的區別。網上有很多介紹Hive Metastore三種配置方式的文章,但是理解都不對,給讀者造成了很多誤導。本人詳細閱讀Apache和CDH官方文檔中關於Hive Metastore的部分,並經過實踐,終於填好各種坑,安裝配置成功,遂記錄下本文,供大家參考。
1. 相關概念
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。
2. 集群規划
本教程Hadoop相關軟件全部基於CDH5.5.1,用yum安裝,系統環境如下:
- 操作系統:CentOS 7.2
- Hadoop 2.6.0
- Hive1.1.0
- Spark1.5.0
- MySQL 5.6
- JDK 1.8
- Maven 3.3.3
- Scala 2.10
各節點規划如下:
192.168.117.51 Goblin01 nn1 jn1 rm1 worker master hive metastore mysql
192.168.117.52 Goblin02 zk2 nn2 jn2 rm2 worker hive metastore
192.168.117.53 Goblin03 zk3 dn1 jn3 worker hive
192.168.117.54 Goblin04 zk4 dn2 worker hive
說明:Goblin01~04是每台機器的hostname,zk代表zookeeper,nn代表hadoop的namenode,dn代表datanode,jn代表journalnode,rm代表resourcemanager,worker代表Spark的slaves,master代表Spark的master
如果不需要Hive on Spark,只需要Hive on MR,則不需要安裝Spark、Maven和Scala。
我們把metastore服務和MySQL都裝在51上(裝在哪一台都可以),51-54都安裝Hive,這樣多個客戶端可以同時執行Hive命令。
在執行以下步驟之前,請確保已經安裝了Hadoop集群
3. 安裝MySQL
- 下載mysql的repo源
$ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
- 安裝mysql-community-release-el7-5.noarch.rpm包
$ sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm
安裝這個包后,會獲得兩個mysql的yum repo源:/etc/yum.repos.d/mysql-community.repo,/etc/yum.repos.d/mysql-community-source.repo。
- 安裝mysql
$ sudo yum install mysql-server
4. 配置MySQL和metastore
Step 1: Install and start MySQL if you have not
already done so
$ sudo yum install mysql-server
$ sudo service mysqld start
Step 2: Configure the MySQL Service and Connector
因為使用MySQL作為存儲元數據的數據庫,所以需要把連接MySQL的jar包放入或鏈接到$HIVE_HOME/lib目錄下。
$ sudo yum install mysql-connector-java
$ ln -s /usr/share/java/mysql-connector-java.jar /usr/lib/hive/lib/mysql-connector-java.jar
To set the MySQL root password:
$ sudo /usr/bin/mysql_secure_installation
[...]
Enter current password for root (enter for none):
OK, successfully used password, moving on...
[...]
Set root password? [Y/n] y
New password:
Re-enter new password:
Remove anonymous users? [Y/n] Y
[...]
Disallow root login remotely? [Y/n] N
[...]
Remove test database and access to it [Y/n] Y
[...]
Reload privilege tables now? [Y/n] Y
All done!
To make sure the MySQL server starts at boot:
$ sudo /sbin/chkconfig mysqld on
$ sudo /sbin/chkconfig --list mysqld
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
Step 3. Create the Database and User
$ mysql -u root -p
Enter password:
mysql> CREATE DATABASE metastore;
mysql> USE metastore;
mysql> SOURCE /usr/lib/hive/scripts/metastore/upgrade/mysql/hive-schema-0.12.0.mysql.sql;
mysql> CREATE USER 'hive'@'metastorehost' IDENTIFIED BY 'mypassword';
...
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'hive'@'metastorehost';
mysql> GRANT ALL ON metastore.* TO 'hive'@'metastorehost' IDENTIFIED BY 'hive';
mysql> GRANT ALL ON metastore.* TO 'hive'@'%' IDENTIFIED BY 'hive';
mysql> FLUSH PRIVILEGES;
mysql> ALTER DATABASE metastore CHARACTER SET latin1;
mysql> quit;
Step 4. Format the Database
$ cd /usr/lib/hive/bin
$ ./schematool --dbType mysql --initSchema
5. Hive配置
5.1 HDFS存儲位置配置
Hive配置文件里要用到HDFS的一些路徑,需要先手動創建。
hdfs dfs -mkdir -p /usr/hive/warehouse
hdfs dfs -mkdir -p /usr/hive/tmp
hdfs dfs -mkdir -p /usr/hive/log
hdfs dfs -chmod g+w /usr/hive/warehouse
hdfs dfs -chmod g+w /usr/hive/tmp
hdfs dfs -chmod g+w /usr/hive/log
上述語句涉及hive-site.xml hive.metastore.warehouse.dir等,表示數據在hdfs中的存儲位置
5.2 hive-env.sh (所有節點)
export HADOOP_HOME=/usr/lib/hadoop
export HIVE_CONF_DIR=/usr/lib/hive/conf
5.3 hive-log4j.properties(所有節點)
首先創建log存放的文件夾
mkdir /usr/lib/hive/logs
然后配置hive-log4j.properties
hive.log.dir=/usr/lib/hive/logs
5.4 服務端hive-site.xml
服務端指的是Metastore服務所在的機器,即安裝metastore的機器,這里是51和52。
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://Goblin01:3306/metastore?createDatabaseIfNotExist=true</value>
<description>the URL of the MySQL database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/usr/hive/warehouse</value>
</property>
<property>
<name>hive.exec.scratchdir</name>
<value>/usr/hive/tmp</value>
</property>
<property>
<name>hive.querylog.location</name>
<value>/usr/hive/log</value>
</property>
5.5 客戶端hive-site.xml
這里指的是53和54。
<property>
<name>hive.metastore.uris</name>
<value>thrift://Goblin01:9083,Goblin02:9083</value>
<description>IP address (or fully-qualified domain name) and port of the metastore host</description>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/usr/hive/warehouse</value>
</property>
<property>
<name>hive.exec.scratchdir</name>
<value>/usr/hive/tmp</value>
</property>
<property>
<name>hive.querylog.location</name>
<value>/usr/hive/log</value>
</property>
6. 啟動Hive
- 啟動MySQL
$ service mysqld start
- 啟動metastore服務
$ service hive-metastore start
- 啟動Hive CLI
因為在4台機器上都安裝了hive,並且作了相關的配置,所有四台機器均可以啟動Hive CLI(Hive交互式shell)
$ hive
7. 參考資料
歡迎進入博客 :linbingdong.com 獲取最新文章哦~
歡迎關注公眾號: FullStackPlan 獲取更多干貨哦~