首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Hive 1.2.1、Spark 與 Sqoop 整合安裝完整指南

     編輯:PHP 相關知識

前言

本指南詳細記錄了在 Hadoop 2.7.1 叢集環境下,部署 Apache Hive 1.2.1 並整合 Spark 及 Sqoop 的完整流程。安裝架構採用 Hive Server2 模式,元資料儲存於 MySQL 5.7.10,並透過 ZooKeeper 實現高可用。參考官方 GettingStarted 文件與《Hive 0.12.0 安裝指南》編寫,適合生產環境部署參考。

環境約定與規劃

  • Hadoop 安裝路徑:/data/hadoop/current
  • Hive 安裝路徑:/data/hadoop/hive(軟連結指向 /data/hadoop/hive-1.2.1-bin)
  • MySQL 安裝路徑:/data/mysql(二進制包安裝於 /usr/local/mysql,資料目錄軟連結至 /data/mysql/data)
  • ZooKeeper 節點:10.12.154.77、10.12.154.78、10.12.154.79
  • Hive 服務節點:172.25.40.171
  • MySQL 節點:172.25.39.166

關鍵服務端口

端口服務說明
10000HiveServer2 Thrifthive.server2.thrift.port,啟動 hiveserver2 時監聽
9083Metastore RPChive.metastore.uris,啟動 hive --service metastore 時監聽
3306MySQL預設連接埠

MySQL 安裝與元資料庫建立

4.1 MySQL 5.7.10 二進制安裝

下載 Linux-Generic (glibc 2.5) x86_64 壓縮包,解壓至 /usr/local 並建立軟連結。建議以 root 身份安裝,避免權限問題。關鍵步驟如下:

# 建立 mysql 使用者與群組
groupadd mysql
useradd -r -g mysql -s /bin/false mysql

# 解壓與軟連結
cd /usr/local
tar xzf mysql-5.7.10-linux-glibc2.5-x86_64.tar.gz
ln -s mysql-5.7.10-linux-glibc2.5-x86_64 mysql

# 資料目錄規劃(採用軟連結方式)
mkdir -p /data/mysql/data
ln -s /data/mysql/data /usr/local/mysql/data
chmod 770 /data/mysql/data
chown -R mysql:mysql /data/mysql/data
chown -R mysql:mysql /usr/local/mysql

# 初始化資料庫(記住生成的臨時 root 密碼)
bin/mysqld --initialize --user=mysql --explicit_defaults_for_timestamp
bin/mysql_ssl_rsa_setup

# 權限修正與啟動
chown -R root /usr/local/mysql
chown -R mysql /data/mysql/data
bin/mysqld_safe --user=mysql &

# 驗證與設定開機自啟
netstat -lpnt | grep 3306
cp support-files/mysql.server /etc/init.d/mysql.server

注意:MySQL 5.7.6+ 預設要求 SSL 連線,若不使用 SSL 需在連線字串加入 useSSL=false。

4.2 建立 Hive 元資料庫與授權

CREATE DATABASE IF NOT EXISTS hive;
CREATE USER 'hive' IDENTIFIED BY 'hive2016';
GRANT ALL ON hive.* TO 'hive'@'localhost' IDENTIFIED BY 'hive2016';
GRANT ALL ON hive.* TO 'hive'@'172.25.39.166' IDENTIFIED BY 'hive2016';
GRANT ALL ON hive.* TO 'hive'@'172.25.40.171' IDENTIFIED BY 'hive2016';

若配置 MySQL 主主同步且不同步 mysql 系統庫,需在各節點分別執行上述建庫授權操作。

Hive 1.2.1 安裝與配置

5.1 下載與解壓

cd /data
tar xzf apache-hive-1.2.1-bin.tar.gz
mv apache-hive-1.2.1-bin hive-1.2.1
ln -s hive-1.2.1 hive

5.2 安裝 MySQL JDBC 驅動

下載 mysql-connector-java-5.1.38.tar.gz,解壓後將 mysql-connector-java-5.1.38-bin.jar 複製至 $HIVE_HOME/lib 目錄。

5.3 環境變數設定

編輯 /etc/profile 或 ~/.profile:

export HIVE_HOME=/data/hadoop/hive
export PATH=$HIVE_HOME/bin:$PATH

5.4 核心配置檔修改

進入 $HIVE_HOME/conf,複製模板檔:

cp hive-env.sh.template hive-env.sh
cp hive-default.xml.template hive-site.xml
cp hive-log4j.properties.template hive-log4j.properties
cp hive-exec-log4j.properties.template hive-exec-log4j.properties

5.4.1 hive-env.sh

HADOOP_HOME=/data/hadoop/current

5.4.2 hive-site.xml 關鍵屬性

屬性名稱設定值說明
javax.jdo.option.ConnectionURLjdbc:mysql://172.25.39.166:3306/hive?useSSL=falseMySQL 連線字串,關閉 SSL
javax.jdo.option.ConnectionDriverNamecom.mysql.jdbc.DriverJDBC 驅動類別
javax.jdo.option.ConnectionUserNamehive資料庫使用者
javax.jdo.option.ConnectionPasswordhive2016資料庫密碼
hive.metastore.schema.verificationtrue啟用結構驗證
hive.zookeeper.quorum10.12.154.77,10.12.154.78,10.12.154.79ZK 叢集地址,建議用主機名
hive.metastore.uristhrift://172.25.40.171:9083Metastore RPC 服務位址
hive.metastore.warehouse.dir/data/hadoop/hive/warehouse資料倉庫根目錄,需預先建立
hive.server2.thrift.bind.host172.25.40.171綁定 IP,允許遠程訪問;可設 0.0.0.0
hive.exec.scratchdir/data/hadoop/hive/tmp暫存目錄,需建立
hive.exec.local.scratchdir/data/hadoop/hive/tmp/scratch本地暫存目錄
hive.downloaded.resources.dir/data/hadoop/hive/tmp/resources下載資源目錄
hive.querylog.location/data/hadoop/hive/tmp/querylog查詢日誌目錄
hive.server2.logging.operation.log.location/data/hadoop/hive/tmp/operation操作日誌目錄

5.4.3 日誌配置

# hive-log4j.properties
hive.log.dir=/data/hadoop/hive/logs

# hive-exec-log4j.properties
hive.log.dir=/data/hadoop/hive/logs/exec

對應建立 /data/hadoop/hive/logs 及 /data/hadoop/hive/logs/exec 目錄。

服務啟動與驗證

  1. 初始化 Metastore:schematool -dbType mysql -initSchema(僅需在一台機器執行一次)
  2. 啟動 Metastore:hive --service metastore &
  3. 啟動 HiveServer2:hiveserver2 &
  4. 進入 CLI:hive 或使用 Beeline:
    beeline -u jdbc:hive2://172.25.40.171:10000 -n hive -p hive2016

遠程執行 HSQL

將 hive/bin、hive/lib、hive/conf、hive/examples 打包分發至其他節點,透過 Beeline 遠程執行。注意:直接使用 hive 命令遠程執行可能卡住,建議統一使用 Beeline。

基本 HQL 操作範例

CREATE TABLE pokes(foo INT, bar STRING);
CREATE TABLE invites(foo INT, bar STRING) PARTITIONED BY (ds STRING);
SHOW TABLES;
DESCRIBE invites;
LOAD DATA LOCAL INPATH '../examples/files/kv2.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2014');
SELECT * FROM invites LIMIT 2;

高可用單點方案

部署兩套 Hive 服務,元資料庫採用 MySQL 主主同步,Hive 採一主一熱備模式。建議同一時刻僅一個 Hive 提供服務,雙活雖可行但需謹慎評估。

Spark 整合 Hive

  1. 在 spark-env.sh 加入:export HIVE_HOME=/data/hadoop/hive
  2. 複製 hive-site.xml、hive-log4j.properties 至 Spark conf 目錄
  3. 啟動 Spark SQL:
    ./spark-sql --master yarn --driver-class-path /data/hadoop/hive/lib/mysql-connector-java-5.1.38-bin.jar

執行 show tables 即可看到 Hive 建立的表。

Sqoop 1.4.6 整合 Hive

11.1 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/hive
export ZOOCFGDIR=/data/zookeeper/conf

11.2 sqoop-site.xml

複製模板即可,通常無需修改。

11.3 驗證測試

# 列出資料庫
./sqoop list-databases --connect jdbc:mysql://127.0.0.1:3306/ --username zhangsan --password zhangsan2016

# 依 MySQL 表建立 Hive 表(支援分區)
./sqoop create-hive-table --connect jdbc:mysql://127.0.0.1:3306/test --username zhangsan --password zhangsan2016 --table t_test --hive-table t_test_2016 --hive-partition-key dt --hive-partition-value 20160101

# 匯入資料至 Hive(建議加 --direct 使用 mysqldump 加速)
./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 with implicit DEFAULT value is deprecatedMySQL 5.6+ timestamp 預設值行為變更初始化加參數 --explicit_defaults_for_timestamp
Can't find error-message-file '/usr/local/mysql/share/errmsg.sys'安裝目錄非預設 /usr/local/mysql,或 data 目錄非空指定 --basedir 與 --datadir,確保 data 目錄為空
Failed to connect to MetaStoreServerMetastore 服務未啟動或網路不通啟動 metastore;開啟 DEBUG 日誌排查:hive.root.logger=DEBUG,WARN,DRFA
Version information not found in metastore未執行 schematool 初始化執行 schematool -dbType mysql -initSchema
java.net.URISyntaxException: Relative path in absolute URIhive-site.xml 中使用了 ${system:java.io.tmpdir}將 4 處 system:java.io.tmpdir 替換為絕對路徑
Establishing SSL connection without server's identity verificationMySQL 5.5.45+/5.6.26+/5.7.6+ 預設要求 SSLJDBC URL 加 useSSL=false
SPARK_CLASSPATH was detectedSpark 1.0+ 棄用 SPARK_CLASSPATH 環境變數改用 --driver-class-path 或 spark.executor.extraClassPath

相關參考文檔

  • 《Hadoop 2.7.1 分散式安裝手冊》
  • 《ZooKeeper 3.4.6 分散式安裝指南》
  • 《HBase 0.98.0 分散式安裝指南》
  • 技術部落格:https://aquester.cublog.cn
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved