架構規劃與前置條件
- Hadoop 2.7.1 已部署於
/data/hadoop/current
- MySQL 5.7.10 作為 Metastore,部署於
172.25.39.166,資料目錄 /data/mysql/data
- ZooKeeper 叢集三節點:
10.12.154.77/78/79
- Hive 安裝目錄
/data/hadoop/hive(指向 hive-1.2.1-bin)
MySQL 安裝關鍵步驟
# 建立用戶與目錄
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
mkdir -p /data/mysql/data
ln -s /data/mysql/data /usr/local/mysql/data
chown -R mysql:mysql /data/mysql/data
# 初始化(記住臨時 root 密碼)
bin/mysqld --initialize --user=mysql --explicit_defaults_for_timestamp
bin/mysql_ssl_rsa_setup
# 啟動並設定開機自啟
bin/mysqld_safe --user=mysql &
cp support-files/mysql.server /etc/init.d/mysql.server
建立 Hive Metastore
CREATE DATABASE IF NOT EXISTS hive;
CREATE USER 'hive'@'%' IDENTIFIED BY 'hive2016';
GRANT ALL ON hive.* TO 'hive'@'%' IDENTIFIED BY 'hive2016';
FLUSH PRIVILEGES;
Hive 核心配置(hive-site.xml 關鍵項)
| 參數 | 範例值 | 說明 |
| javax.jdo.option.ConnectionURL | jdbc:mysql://172.25.39.166:3306/hive?useSSL=false | Metastore JDBC 連線,**必加 useSSL=false** |
| javax.jdo.option.ConnectionDriverName | com.mysql.jdbc.Driver | MySQL JDBC 驅動 |
| javax.jdo.option.ConnectionUserName | hive | |
| javax.jdo.option.ConnectionPassword | hive2016 | |
| hive.metastore.uris | thrift://172.25.40.171:9083 | Metastore RPC 服務 |
| hive.metastore.warehouse.dir | /data/hadoop/hive/warehouse | 資料倉庫根目錄 |
| hive.server2.thrift.bind.host | 0.0.0.0 | 允許遠端連線 |
| hive.zookeeper.quorum | zk1,zk2,zk3 | 建議用主機名而非 IP |
啟動驗證流程
schematool -dbType mysql -initSchema 初始化 Metastore
hive --service metastore & 啟動 Metastore
hiveserver2 & 啟動 HiveServer2
- 用
beeline 連線驗證:
!connect jdbc:hive2://172.25.40.171:10000 hive hive2016 org.apache.hive.jdbc.HiveDriver
Spark 整合 Hive(三步走)
# 1. spark-env.sh
export HIVE_HOME=/data/hadoop/hive
# 2. 複製配置
cp $HIVE_HOME/conf/hive-site.xml $SPARK_HOME/conf/
cp $HIVE_HOME/conf/hive-log4j.properties $SPARK_HOME/conf/
# 3. 啟動 spark-sql(需帶 MySQL 驅動)
./spark-sql --master yarn --driver-class-path /data/hadoop/hive/lib/mysql-connector-java-5.1.38-bin.jar
Sqoop 1.4.6 整合 Hive
# sqoop-env.sh 關鍵環境變數
export HADOOP_COMMON_HOME=/data/hadoop
export HADOOP_MAPRED_HOME=/data/hadoop/share/hadoop/common
export HBASE_HOME=/data/hbase
export HIVE_HOME=/data/hadoop/hive
export ZOOCFGDIR=/data/zookeeper/conf
# 驗證:從 MySQL 匯入 Hive
./sqoop import \
--connect jdbc:mysql://127.0.0.1:3306/test \
--username zhangsan --password 'zhangsan2016' \
--table t_test --hive-import -m 6 \
--hive-table t_test_2016 --direct
常見坑位速查表
| 錯誤現象 | 根因 | 解決 |
| TIMESTAMP implicit DEFAULT deprecated | MySQL 5.6+ 預設行為變更 | 加 --explicit_defaults_for_timestamp |
| Can't find errmsg.sys | basedir/datadir 不符預期 | 指定 --basedir --datadir |
| Failed to connect MetaStore | Metastore 未啟動 | 先啟 hive --service metastore |
| Version information not found | 未初始化 Schema | 執行 schematool -initSchema |
| SSL connection warning | MySQL 5.7+ 預設要求 SSL | JDBC URL 加 useSSL=false |
| SPARK_CLASSPATH deprecated | Spark 1.0+ 不建議用此環境變數 | 改用 --driver-class-path |
高可用單點方案
部署兩組 Hive + MySQL 主主同步,同一時間僅一組提供服務,透過 VIP 或 DNS 切換實現故障轉移。