Spark集群環境搭建——Hadoop集群環境搭建


Spark其實是Hadoop生態圈的一部分,需要用到Hadoop的HDFS、YARN等組件。

為了方便我們的使用,Spark官方已經為我們將Hadoop與scala組件集成到spark里的安裝包,解壓開箱即可使用,給我們提供了很大的方便。

如果我們只是本地學習的spark,又不想搭建復雜的hadoop集群,就可以使用該安裝包。

spark-3.2.0-bin-hadoop3.2-scala2.13.tgz



但是,如果是生產環境,想要搭建集群,或者后面想要自定義一些hadoop配置,就可以單獨搭建Hadoop集群,后面再與spark進行整合。(推薦)

下面講一下Hadoop集群環境的搭建。

三台服務器,需要提前做好初始化,配置好主機名、免密登錄與JDK配置等等。

參考前面一篇文章:Spark集群環境搭建——服務器環境初始化

https://www.cnblogs.com/doublexi/p/15623436.html

搭建Hadoop集群

1、下載:

Hadoop官網地址:http://hadoop.apache.org/

下載地址:https://archive.apache.org/dist/hadoop/common/hadoop-3.2.2/

cd /data/apps/shell/software
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.2.2/hadoop-3.2.2.tar.gz

2、解壓安裝Hadoop

解壓:

tar xf hadoop-3.2.2.tar.gz
mv hadoop-3.2.2 /data/apps/

編輯環境變量:

vim /etc/profile
##HADOOP_HOME
export HADOOP_HOME=/data/apps/hadoop-3.2.2/
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

source生效:

source /etc/profile

測試:

# hadoop version
Hadoop 3.2.2
Source code repository Unknown -r 7a3bc90b05f257c8ace2f76d74264906f0f7a932
Compiled by hexiaoqiao on 2021-01-03T09:26Z
Compiled with protoc 2.5.0
From source with checksum 5a8f564f46624254b27f6a33126ff4
This command was run using /data/apps/hadoop-3.2.2/share/hadoop/common/hadoop-common-3.2.2.jar

3、集群配置:

3.1、HDFS集群配置:

配置:hadoop-env.sh

將JDK路徑明確配置給HDFS

cd /data/apps/hadoop-3.2.2/etc/hadoop/
vim hadoop-env.sh
...
export JAVA_HOME=/usr/java/jdk1.8.0_162

export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

指定NameNode節點以及數據存儲目錄(修改core-site.xml)

vim core-site.xml

<configuration>
<!-- 指定HDFS中NameNode的地址 -->
<property>
        <name>fs.defaultFS</name>
        <value>hdfs://dev-spark-master-206:8020</value>
</property>
<!-- 指定Hadoop運行時產生文件的存儲目錄 -->
<property>
        <name>hadoop.tmp.dir</name>
        <value>/data/apps/hadoop-3.2.2/data/tmp</value>
</property>
</configuration>

core-site.xml的默認配置:https://hadoop.apache.org/docs/r2.9.2/hadoop-project-dist/hadoop-common/coredefault.xml

指定secondarynamenode節點(修改hdfs-site.xml)

vim hdfs-site.xml

<configuration>
<!-- 指定Hadoop輔助名稱節點主機配置 -->
<property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>dev-spark-slave-172:50090</value>
</property>
<!--副本數量 -->
<property>
        <name>dfs.replication</name>
        <value>3</value>
</property>
</configuration>

官方默認配置:https://hadoop.apache.org/docs/r2.9.2/hadoop-project-dist/hadoop-hdfs/hdfsdefault.xml

指定datanode從節點(修改workers文件,每個節點配置信息占一行)

注意:這里hadoop2.x是用slaves文件,3.x是用workers文件

vim workers
dev-spark-master-206
dev-spark-slave-171
dev-spark-slave-172

注意:該文件中添加的內容結尾不允許有空格,文件中不允許有空行。

3.2、MapReduce集群配置

指定MapReduce使用的jdk路徑(修改mapred-env.sh)

vim mapred-env.sh

export JAVA_HOME=/usr/java/jdk1.8.0_162

指定MapReduce計算框架運行Yarn資源調度框架(修改mapred-site.xml)

vim mapred-site.xml

<configuration>
<!-- 指定MR運行在Yarn上 -->
<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
</property>
<!-- 指定MR環境變量 -->
<property>
  <name>yarn.app.mapreduce.am.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
  <name>mapreduce.map.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
  <name>mapreduce.reduce.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
</configuration>

mapred-site.xml默認配置:https://hadoop.apache.org/docs/r2.9.2/hadoop-mapreduce-client/hadoop-mapreduceclient-core/mapred-default.xml

3.3、Yarn集群配置

編輯yarn-env.sh,指定JDK路徑

vim yarn-env.sh

export JAVA_HOME=/usr/java/jdk1.8.0_162

指定ResourceMnager的master節點信息(修改yarn-site.xml)

vim yarn-site.xml

<configuration>

<!-- Site specific YARN configuration properties -->
<!-- 指定YARN的ResourceManager的地址 -->
<property>
        <name>yarn.resourcemanager.hostname</name>
        <value>dev-spark-slave-172</value>
</property>
<!-- Reducer獲取數據的方式 -->
<property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
</property>
</configuration>

yarn-site.xml的默認配置:https://hadoop.apache.org/docs/r2.9.2/hadoop-yarn/hadoop-yarn-common/yarndefault.xml

指定NodeManager節點(slaves文件已修改)

注意:

Hadoop安裝目錄所屬用戶和所屬用戶組信息,默認是501 dialout,而我們操作Hadoop集群的用戶使用的是虛擬機的root用戶,

所以為了避免出現信息混亂,修改Hadoop安裝目錄所屬用戶和用戶組!!

chown -R root:root /data/apps/hadoop-3.2.2

3.4、將Hadoop安裝包發送到其他節點

[root@dev-spark-master-206 ~]# cd /data/apps/
# 將hadoop安裝包發送到其他兩台服務器相同的目錄
[root@dev-spark-master-206 apps]# rsync-script hadoop-3.2.2/

在其他兩台服務器上,也需要重新編輯一下環境變量,並source加載

# 檢查三台服務器上是否有這個hadoop包,以及環境變量配置
# vim /etc/profile
##HADOOP_HOME
export HADOOP_HOME=/data/apps/hadoop-3.2.2/
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

三台機器上都要source一下

source /etc/profile

三台機器上運行hadoop命令測試:

# hadoop version
Hadoop 3.2.2
Source code repository Unknown -r 7a3bc90b05f257c8ace2f76d74264906f0f7a932
Compiled by hexiaoqiao on 2021-01-03T09:26Z
Compiled with protoc 2.5.0
From source with checksum 5a8f564f46624254b27f6a33126ff4
This command was run using /data/apps/hadoop-3.2.2/share/hadoop/common/hadoop-common-3.2.2.jar

3.5、集群初始化:

注意:如果集群是第一次啟動,需要在Namenode所在節點格式化NameNode,非第一次不用執行格式化Namenode操作!!

新版都用hdfs namenode命令,舊版用hadoop namenode

# 注意,只能執行一次,后面再執行會破壞之前的集群環境
hdfs namenode -format

初始化成功后,輸出日志里會顯示”successfully formatted”

3.6、啟動集群:

方式一:手動一個個服務啟動:

啟動HDFS:

在master上啟動NameNode

[root@dev-spark-master-206 hadoop-3.2.2]# hadoop-daemon.sh start namenode
 
        

在master和slave節點,啟動DataNode

在dev-spark-master-206上啟動datanode

[root@dev-spark-master-206 hadoop-3.2.2]# hadoop-daemon.sh start datanode
# jps查看是否有namenode和datanode的進程
[root@dev-spark-master-206 hadoop-3.2.2]# jps

在dev-spark-slave-171上,啟動datanode

[root@dev-spark-slave-171 ~]# hadoop-daemon.sh start datanode
# 查看是否有datanode的進程
[root@dev-spark-slave-171 ~]# jps

在dev-spark-slave-172上,啟動datanode

[root@dev-spark-slave-172 ~]# hadoop-daemon.sh start datanode
# 查看是否有datanode進程
[root@dev-spark-slave-172 ~]# jps


Yarn集群單節點啟動:

注意:NameNode和ResourceManger不是在同一台機器,不能在NameNode上啟動 YARN,應該在ResouceManager所在的機器上啟動YARN。

按照我們集群的規划,我們在dev-spark-slave-172上啟動resourcemanager和nodemanager

[root@dev-spark-slave-172 ~]# yarn-daemon.sh start resourcemanager
[root@dev-spark-slave-172 ~]#  yarn-daemon.sh start nodemanager
# 查看是否有 ResourceManager和 NodeManager進程
[root@dev-spark-slave-172 ~]# jps

在dev-spark-slave-171上啟動nodemanager

[root@dev-spark-slave-171 ~]#  yarn-daemon.sh start nodemanager
# 查看是否有 NodeManager的進程
[root@dev-spark-slave-171 ~]# jps

在dev-spark-master-206上,啟動nodemanager

[root@dev-spark-master-206 hadoop-3.2.2]#  yarn-daemon.sh start nodemanager
# jps查看是否有 NodeManager的進程
[root@dev-spark-master-206 hadoop-3.2.2]# jps


方式二:集群群起

在master節點執行start-dfs.sh命令,它會啟動namenode,以及去workers文件中指定的節點中,啟動datanode

在dev-spark-master-206上啟動hdfs

# 不單個啟動,集群啟動
start-dfs.sh 

在dev-spark-slave-172上啟動yarn

[root@dev-spark-slave-172 ~]# start-yarn.sh

注意:NameNode和ResourceManger不是在同一台機器,不能在NameNode上啟動 YARN,應該在ResouceManager所在的機器上啟動YARN。


注意:如果啟動報錯

# start-dfs.sh 
Starting namenodes on [dev-spark-master-206]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [dev-spark-slave-172]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.

對於start-dfs.sh和stop-dfs.sh文件,添加下列參數:

# vim sbin/start-dfs.sh
# 頂部加上下面的配置
#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

# vim sbin/stop-dfs.sh
#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

對於start-yarn.sh和stop-yarn.sh文件,添加下列參數:

# vim sbin/start-yarn.sh
#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

# vim sbin/stop-yarn.sh
#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

發送到其他節點:

rsync-script sbin/start-dfs.sh
rsync-script sbin/stop-dfs.sh
rsync-script sbin/start-yarn.sh
rsync-script sbin/stop-yarn.sh

再啟動:(再啟動之前,需要使用jps查看之前殘存的進程,用kill殺掉)

# start-dfs.sh 
WARNING: HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USER. Using value of HADOOP_SECURE_DN_USER.
Starting namenodes on [dev-spark-master-206]
Last login: Wed Sep  8 15:05:01 CST 2021 from 192.168.90.188 on pts/6
Starting datanodes
Last login: Wed Sep  8 15:37:52 CST 2021 on pts/5
Starting secondary namenodes [dev-spark-slave-172]
Last login: Wed Sep  8 15:37:54 CST 2021 on pts/5
dev-spark-slave-172: WARNING: /data/apps/hadoop-3.2.2/logs does not exist. Creating.

啟動yarn:

注意:NameNode和ResourceManger不是在同一台機器,不能在NameNode上啟動 YARN,應該

在ResouceManager所在的機器上啟動YARN。

# 在dev-spark-slave-172上面啟動yarn
start-yarn.sh

3.7、Hadoop集群啟動停止命令匯總
1. 各個服務組件逐一啟動/停止
(1)分別啟動/停止HDFS組件

hadoop-daemon.sh start / stop namenode / datanode / secondarynamenode

(2)啟動/停止YARN

yarn-daemon.sh start / stop resourcemanager / nodemanager

2. 各個模塊分開啟動/停止(配置ssh是前提)常用
(1)整體啟動/停止HDFS

start-dfs.sh / stop-dfs.sh

(2)整體啟動/停止YARN

start-yarn.sh / stop-yarn.sh

3.8、web ui界面查看

web頁面查看:http://192.168.90.206:9870/

clipboard

查看yarn:(注意地址是:192.168.90.172)

http://192.168.90.172:8088/

clipboard

3.9、測試hdfs:

[root@dev-spark-master-206 ~]# hdfs dfs -mkdir -p /test/input
[root@dev-spark-master-206 ~]# echo "test hdfs" >> test.txt
[root@dev-spark-master-206 ~]# hdfs dfs -put test.txt /test/input
[root@dev-spark-master-206 ~]# hdfs dfs -ls /test/input
Found 1 items
-rw-r--r--   3 root supergroup         10 2021-09-08 16:53 /test/input/test.txt

web界面上有看到相關文件:

clipboard

4、配置歷史服務器

在Yarn中運行的任務產生的日志數據不能查看,為了查看程序的歷史運行情況,需要配置一下歷史日志

服務器。具體配置步驟如下:

4.1. 配置mapred-site.xml

# cd /data/apps/hadoop-3.2.2/etc/hadoop/
# vi mapred-site.xml

<!-- 歷史服務器端地址 -->
<property>
        <name>mapreduce.jobhistory.address</name>
        <value>dev-spark-master-206:10020</value>
</property>
<!-- 歷史服務器web端地址 -->
<property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>dev-spark-master-206:19888</value>
</property>

4.2、配置日志的聚集

日志聚集:應用(Job)運行完成以后,將應用運行日志信息從各個task匯總上傳到HDFS系統上。

日志聚集功能好處:可以方便的查看到程序運行詳情,方便開發調試。

注意:開啟日志聚集功能,需要重新啟動NodeManager 、ResourceManager和 HistoryManager。

開啟日志聚集功能具體步驟如下:

配置yarn-site.xml

vim yarn-site.xml

<!-- 日志聚集功能使能 -->
<property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
</property>
<!-- 日志保留時間設置7天 -->
<property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
</property>
<property>
        <name>yarn.log.server.url</name>
        <value>http://dev-spark-master-206:19888/jobhistory/logs</value>
</property>

4.3、分發配置到其他節點:

rsync-script mapred-site.xml
rsync-script yarn-site.xml

4.4、啟動history server

# 重啟yarn
[root@dev-spark-slave-172 logs]# stop-yarn.sh 
[root@dev-spark-slave-172 logs]# start-yarn.sh

# 啟動歷史服務器:
[root@dev-spark-master-206 hadoop]# mapred --daemon start historyserver

4.5、web頁面查看:

查看地址:http://192.168.90.206:19888/jobhistory

5、測試wordcount

創建wc.txt文件

# vim wc.txt
hadoop mapreduce yarn
hdfs hadoop mapreduce
mapreduce yarn hello
hello
hello

上傳到hdfs:/text/input目錄

# 如果目錄不存在,需要先創建
hdfs dfs -mkdir -p /test/input
# 上傳
hdfs dfs -put wc.txt /test/input
# 查看是否上傳成功
hdfs dfs -ls /test/input

執行WordCount程序

hadoop jar /data/apps/hadoop-3.2.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.2.jar wordcount /test/input/wc.txt /wcoutput

運行成功,查看結果:

[root@dev-spark-master-206 hadoop]# hdfs dfs -ls /wcoutput
Found 2 items
-rw-r--r--   3 root supergroup          0 2021-09-08 17:20 /wcoutput/_SUCCESS
-rw-r--r--   3 root supergroup         43 2021-09-08 17:20 /wcoutput/part-r-00000
[root@dev-spark-master-206 hadoop]# hdfs dfs -ls /wcoutput/part-r-00000
-rw-r--r--   3 root supergroup         43 2021-09-08 17:20 /wcoutput/part-r-00000
[root@dev-spark-master-206 hadoop]# hdfs dfs -cat /wcoutput/part-r-00000
hadoop	2
hdfs	1
hello	3
mapreduce	3
yarn	2

web頁面查看歷史服務器:http://192.168.90.206:19888/jobhistory

clipboard

點擊logs可以查看詳情:

clipboard

日志詳情如下:

clipboard


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM