文章目錄
- 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配置文件
- 切換到Hive配置目錄
- 執行命令:
cd $HIVE_HOME/conf -
- 修改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>
- 配置説明
hive.metastore.schema.verification=false表示禁用元數據 schema 版本校驗,便於升級或兼容不同版本;datanucleus.connectionPoolingType=dbcp指定使用 DBCP 作為數據庫連接池類型,提升元數據操作性能。
2.2 分發Hive配置文件到Spark配置目錄
- 主節點上拷貝Hive配置文件到Spark配置目錄
- 執行命令:
cp hive-site.xml $SPARK_HOME/conf -
- 主節點上分發Hive配置文件到slave1的Spark配置目錄
- 執行命令:
scp hive-site.xml root@slave1:$SPARK_HOME/conf -
- 主節點上分發Hive配置文件到slave2的Spark配置目錄
- 執行命令:
scp hive-site.xml root@slave2:$SPARK_HOME/conf -
2.3 分發HikariCP數據庫連接池JAR包
- 切換到Hive的庫目錄
- 執行命令:
cd $HIVE_HOME/lib -
- 主節點上將HikariCP數據庫連接池JAR包複製到Spark的jars目錄
- 執行命令:
cp HikariCP-2.6.1.jar $SPARK_HOME/jars -
- 主節點上將HikariCP數據庫連接池JAR 包分發到slave1的Spark的jars目錄
- 執行命令:
scp HikariCP-2.6.1.jar root@slave1:$SPARK_HOME/jars -
- 主節點上將HikariCP數據庫連接池JAR包分發到slave2的Spark的jars目錄
- 執行命令:
scp HikariCP-2.6.1.jar root@slave2:$SPARK_HOME/jars -
2.4 修改Hadoop核心配置文件
- 進入Hadoop配置目錄
- 執行命令:
cd $HADOOP_HOME/etc/hadoop -
- 修改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,但存在安全風險,生產環境應限制具體主機和組。
- 將Hadoop核心配置文件分發到slave1節點
- 執行命令:
scp core-site.xml root@slave1:$HADOOP_HOME/etc/hadoop -
- 將Hadoop核心配置文件分發到slave2節點
- 執行命令:
scp core-site.xml root@slave2:$HADOOP_HOME/etc/hadoop -
2.5 啓動Hadoop服務
- 執行命令:
start-dfs.sh -
- 執行命令:
start-yarn.sh -
2.6 啓動Hive相關服務
- 執行命令:
nohup hive --service metastore >> log.out 2>&1 & -
- 執行命令:
nohup hive --service hiveserver2 >> log.out 2>&1 & -
2.7 進行詞頻統計
2.7.1 採用Hive on YARN來實現
- 執行命令:
hive,進入Hive客户端 - 執行命令:
create external table t_word(words string) location '/hivewc/input';基於HDFS文件創建外部表 - 執行命令:
select word, count(*) from (select explode(split(words, ' ')) as word from t_word) as v_word group by word; - 結果説明:該查詢在 Hive 中執行詞頻統計,通過
explode和split對文本字段進行分詞並聚合。結果返回 9 行數據,顯示各單詞及其出現次數(如“hadoop”出現 3 次)。執行耗時 33.986 秒,使用 MapReduce 引擎完成計算,驗證了 Hive 基於 Hadoop 的批處理能力。 - 執行命令:
exit;,退出Hive客户端
2.7.2 採用Hive on Spark來實現
- 執行命令:
spark-sql -
- 執行命令:
show databases; -
- 結果説明:該命令在 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; -
- 結果説明:該查詢對文本字段
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 範圍)的重要性。
本文章為轉載內容,我們尊重原作者對文章享有的著作權。如有內容錯誤或侵權問題,歡迎原作者聯繫我們進行內容更正或刪除文章。