文章目錄

  • 1. 實戰概述
  • 2. 實戰步驟
  • 2.1 修改Hive配置文件
  • 2.2 分發Hive配置文件到Spark配置目錄
  • 2.3 分發HikariCP數據庫連接池JAR包
  • 2.4 修改Hadoop核心配置文件
  • 2.5 啓動Hadoop服務
  • 2.6 啓動Hive相關服務
  • 2.7 進行詞頻統計
  • 2.7.1 採用Hive on YARN來實現
  • 2.7.2 採用Hive on Spark來實現
  • 2.7.3 兩種實現方式的簡單對比
  • 3. 實戰總結

1. 實戰概述

  • 本實戰通過配置 Hive 與 Spark 集成,分別基於 YARN(MapReduce)和 Spark 引擎執行詞頻統計任務,驗證了 Hive on Spark 在查詢性能上的顯著優勢,同時展示了 Hadoop、Hive 和 Spark 的協同部署與關鍵配置步驟。

2. 實戰步驟

2.1 修改Hive配置文件

  1. 切換到Hive配置目錄
  • 執行命令:cd $HIVE_HOME/conf
  • Spark on Hive 和 Hive on Spark 區別_配置文件


  1. 修改Hive配置文件
  • 執行命令:vim hive-site.xml,添加兩個屬性設置
<property>
    <name>hive.metastore.schema.verification</name>
    <value>false</value>
</property>
<property>
    <name>datanucleus.connectionPoolingType</name>
    <value>dbcp</value>
</property>
  • 配置説明
  1. hive.metastore.schema.verification=false 表示禁用元數據 schema 版本校驗,便於升級或兼容不同版本;
  2. datanucleus.connectionPoolingType=dbcp 指定使用 DBCP 作為數據庫連接池類型,提升元數據操作性能。

2.2 分發Hive配置文件到Spark配置目錄

  1. 主節點上拷貝Hive配置文件到Spark配置目錄
  • 執行命令:cp hive-site.xml $SPARK_HOME/conf
  • Spark on Hive 和 Hive on Spark 區別_#Hive on YARN_02


  1. 主節點上分發Hive配置文件到slave1的Spark配置目錄
  • 執行命令:scp hive-site.xml root@slave1:$SPARK_HOME/conf
  • Spark on Hive 和 Hive on Spark 區別_配置文件_03


  1. 主節點上分發Hive配置文件到slave2的Spark配置目錄
  • 執行命令:scp hive-site.xml root@slave2:$SPARK_HOME/conf
  • Spark on Hive 和 Hive on Spark 區別_Hadoop_04


2.3 分發HikariCP數據庫連接池JAR包

  1. 切換到Hive的庫目錄
  • 執行命令:cd $HIVE_HOME/lib
  • Spark on Hive 和 Hive on Spark 區別_配置文件_05


  1. 主節點上將HikariCP數據庫連接池JAR包複製到Spark的jars目錄
  • 執行命令:cp HikariCP-2.6.1.jar $SPARK_HOME/jars
  • Spark on Hive 和 Hive on Spark 區別_Hadoop_06


  1. 主節點上將HikariCP數據庫連接池JAR 包分發到slave1的Spark的jars目錄
  • 執行命令:scp HikariCP-2.6.1.jar root@slave1:$SPARK_HOME/jars
  • Spark on Hive 和 Hive on Spark 區別_#Hive on Spark_07


  1. 主節點上將HikariCP數據庫連接池JAR包分發到slave2的Spark的jars目錄
  • 執行命令:scp HikariCP-2.6.1.jar root@slave2:$SPARK_HOME/jars
  • Spark on Hive 和 Hive on Spark 區別_Hadoop_08


2.4 修改Hadoop核心配置文件

  1. 進入Hadoop配置目錄
  • 執行命令:cd $HADOOP_HOME/etc/hadoop
  • Spark on Hive 和 Hive on Spark 區別_#Hive on Spark_09


  1. 修改Hadoop核心配置文件
  • 執行命令:vim core-site.xml,添加兩個屬性
<property>
    <name>hadoop.proxyuser.root.hosts</name>
    <value>*</value>
</property>
<property>
    <name>hadoop.proxyuser.root.groups</name>
    <value>*</value>
</property>
  • 配置説明:該配置允許 root 用户代理訪問 Hadoop 服務。hadoop.proxyuser.root.hosts=* 表示允許所有主機以 root 身份提交代理請求;hadoop.proxyuser.root.groups=* 表示 root 可代表任意用户組執行操作。常用於 Spark、Hive 等服務通過 root 代理訪問 HDFS/YARN,但存在安全風險,生產環境應限制具體主機和組。
  1. 將Hadoop核心配置文件分發到slave1節點
  • 執行命令:scp core-site.xml root@slave1:$HADOOP_HOME/etc/hadoop
  • Spark on Hive 和 Hive on Spark 區別_#Hive on Spark_10


  1. 將Hadoop核心配置文件分發到slave2節點
  • 執行命令:scp core-site.xml root@slave2:$HADOOP_HOME/etc/hadoop
  • Spark on Hive 和 Hive on Spark 區別_#Hive on YARN_11


2.5 啓動Hadoop服務

  • 執行命令:start-dfs.sh
  • Spark on Hive 和 Hive on Spark 區別_Hive_12


  • 執行命令:start-yarn.sh
  • Spark on Hive 和 Hive on Spark 區別_#Hive on Spark_13


2.6 啓動Hive相關服務

  • 執行命令:nohup hive --service metastore >> log.out 2>&1 &
  • Spark on Hive 和 Hive on Spark 區別_#Hive on Spark_14


  • 執行命令:nohup hive --service hiveserver2 >> log.out 2>&1 &
  • Spark on Hive 和 Hive on Spark 區別_Hadoop_15


2.7 進行詞頻統計

2.7.1 採用Hive on YARN來實現

  • 執行命令:hive,進入Hive客户端
  • Spark on Hive 和 Hive on Spark 區別_#Hive on YARN_16

  • 執行命令:create external table t_word(words string) location '/hivewc/input'; 基於HDFS文件創建外部表
  • Spark on Hive 和 Hive on Spark 區別_#Hive on YARN_17

  • 執行命令:select word, count(*) from (select explode(split(words, ' ')) as word from t_word) as v_word group by word;
  • Spark on Hive 和 Hive on Spark 區別_#Hive on YARN_18

  • 結果説明:該查詢在 Hive 中執行詞頻統計,通過 explodesplit 對文本字段進行分詞並聚合。結果返回 9 行數據,顯示各單詞及其出現次數(如“hadoop”出現 3 次)。執行耗時 33.986 秒,使用 MapReduce 引擎完成計算,驗證了 Hive 基於 Hadoop 的批處理能力。
  • 執行命令:exit;,退出Hive客户端
  • Spark on Hive 和 Hive on Spark 區別_Hadoop_19

2.7.2 採用Hive on Spark來實現

  • 執行命令:spark-sql
  • Spark on Hive 和 Hive on Spark 區別_Hadoop_20


  • 執行命令:show databases;
  • Spark on Hive 和 Hive on Spark 區別_#Hive on YARN_21


  • 結果説明:該命令在 Spark SQL 中執行 show databases;,返回結果為 default,表明當前連接的 Hive 元數據中存在默認數據庫。查詢耗時 2.42 秒,成功獲取 1 行數據,説明 Spark SQL 已正確集成 Hive 元數據服務,可正常訪問 Hive 數據庫結構。
  • 執行命令:select word, count(*) from (select explode(split(words, ' ')) as word from t_word) as v_word group by word;
  • Spark on Hive 和 Hive on Spark 區別_Hadoop_22


  • 結果説明:該查詢對文本字段 words 進行分詞並統計詞頻,結果返回 9 行數據,顯示各單詞及其出現次數(如 “hadoop” 出現 3 次)。執行耗時 3.439 秒,説明 Spark SQL 成功處理了數據解析與聚合操作,驗證了 Hive on Spark 的計算能力。

2.7.3 兩種實現方式的簡單對比

  • Hive on YARN(MapReduce)耗時 33.986 秒,而 Hive on Spark 僅需 3.439 秒,性能顯著提升。兩者均基於同一 Hive 元數據和外部表,但計算引擎不同:MapReduce 啓動開銷大、適合穩定批處理;Spark 內存計算快、適合迭代與交互式查詢,驗證了 Spark 作為 Hive 執行引擎的高效性。

3. 實戰總結

  • 本次實戰成功完成了 Hive on YARN 與 Hive on Spark 兩種執行模式的部署與對比驗證。通過配置 hive-site.xml、分發依賴 JAR 包、設置 Hadoop 代理用户權限,並啓動 HDFS、YARN、Hive Metastore 及 HiveServer2 服務,構建了完整的數據處理環境。基於同一外部表執行詞頻統計任務,Hive on MapReduce 耗時約 34 秒,而 Hive on Spark 僅需約 3.4 秒,性能提升近 10 倍,充分體現了 Spark 內存計算在迭代和聚合場景下的高效性。實驗不僅驗證了 Hive 與 Spark 的無縫集成能力,也為後續選擇合適執行引擎提供了實踐依據,同時強調了生產環境中需優化安全配置(如限制 proxyuser 範圍)的重要性。