【转载】Spark集群环境搭建——Hadoop集群环境搭建


转自doublexi:

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集群

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

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

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

2、解压安装Hadoop

3.1、HDFS集群配置:

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

010203vim mapred-env.sh export JAVA_HOME=/usr/java/jdk1.8.0_162

指定MapReduce计算框架运行Yarn资源调度框架(修改mapred-site.xml)

01020304050607080910111213141516171819202122vim mapred-site.xml         mapreduce.framework.name</name>        yarn</value></property>  yarn.app.mapreduce.am.env</name>  HADOOP_MAPRED_HOME=${HADOOP_HOME}</value></property>  mapreduce.map.env</name>  HADOOP_MAPRED_HOME=${HADOOP_HOME}</value></property>  mapreduce.reduce.env</name>  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集群配置

010203[root@dev-spark-master-206 ~]# cd /data/apps/# 将hadoop安装包发送到其他两台服务器相同的目录[root@dev-spark-master-206 apps]# rsync-script hadoop-3.2.2/

在其他两台服务器上,也需要重新编辑一下环境变量,并source加载

0102030405# 检查三台服务器上是否有这个hadoop包,以及环境变量配置# vim /etc/profile##HADOOP_HOMEexport HADOOP_HOME=/data/apps/hadoop-3.2.2/export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

三台机器上都要source一下

01source /etc/profile

三台机器上运行hadoop命令测试:

01020304050607# hadoop versionHadoop 3.2.2Source code repository Unknown -r 7a3bc90b05f257c8ace2f76d74264906f0f7a932Compiled by hexiaoqiao on 2021-01-03T09:26ZCompiled with protoc 2.5.0From source with checksum 5a8f564f46624254b27f6a33126ff4This command was run using /data/apps/hadoop-3.2.2/share/hadoop/common/hadoop-common-3.2.2.jar

3.5、集群初始化:

方式一:手动一个个服务启动:

启动HDFS:

在master上启动NameNode

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

在master和slave节点,启动DataNode

在dev-spark-master-206上启动datanode

010203[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

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

在dev-spark-slave-172上,启动datanode

010203[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

01020304[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

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

在dev-spark-master-206上,启动nodemanager

010203[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

0102# 不单个启动,集群启动start-dfs.sh

在dev-spark-slave-172上启动yarn

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

注意:NameNode和ResourceManger不是在同一台机器,不能在NameNode上启动 YARN,应该在ResouceManager所在的机器上启动YARN。


注意:如果启动报错

01020304050607080910# start-dfs.sh Starting namenodes on [dev-spark-master-206]ERROR: Attempting to operate on hdfs namenode as rootERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.Starting datanodesERROR: Attempting to operate on hdfs datanode as rootERROR: 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 rootERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.

对于start-dfs.sh和stop-dfs.sh文件,添加下列参数:

0102030405060708091011121314# vim sbin/start-dfs.sh# 顶部加上下面的配置#!/usr/bin/env bashHDFS_DATANODE_USER=rootHADOOP_SECURE_DN_USER=hdfsHDFS_NAMENODE_USER=rootHDFS_SECONDARYNAMENODE_USER=root # vim sbin/stop-dfs.sh#!/usr/bin/env bashHDFS_DATANODE_USER=rootHADOOP_SECURE_DN_USER=hdfsHDFS_NAMENODE_USER=rootHDFS_SECONDARYNAMENODE_USER=root

对于start-yarn.sh和stop-yarn.sh文件,添加下列参数:

0102030405060708091011# vim sbin/start-yarn.sh#!/usr/bin/env bashYARN_RESOURCEMANAGER_USER=rootHADOOP_SECURE_DN_USER=yarnYARN_NODEMANAGER_USER=root # vim sbin/stop-yarn.sh#!/usr/bin/env bashYARN_RESOURCEMANAGER_USER=rootHADOOP_SECURE_DN_USER=yarnYARN_NODEMANAGER_USER=root

发送到其他节点:

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

再启动:(再启动之前,需要使用jps查看之前残存的进程,用kill杀掉)

010203040506070809# 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/6Starting datanodesLast login: Wed Sep  8 15:37:52 CST 2021 on pts/5Starting secondary namenodes [dev-spark-slave-172]Last login: Wed Sep  8 15:37:54 CST 2021 on pts/5dev-spark-slave-172: WARNING: /data/apps/hadoop-3.2.2/logs does not exist. Creating.

启动yarn:

注意:NameNode和ResourceManger不是在同一台机器,不能在NameNode上启动 YARN,应该

在ResouceManager所在的机器上启动YARN。

0102# 在dev-spark-slave-172上面启动yarnstart-yarn.sh

3.7、Hadoop集群启动停止命令汇总
1. 各个服务组件逐一启动/停止
(1)分别启动/停止HDFS组件

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

(2)启动/停止YARN

01yarn-daemon.sh start / stop resourcemanager / nodemanager

2. 各个模块分开启动/停止(配置ssh是前提)常用
(1)整体启动/停止HDFS

01start-dfs.sh / stop-dfs.sh

(2)整体启动/停止YARN

01start-yarn.sh / stop-yarn.sh

3.8、web ui界面查看

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

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

http://192.168.90.172:8088/

3.9、测试hdfs:

在Yarn中运行的任务产生的日志数据不能查看,为了查看程序的历史运行情况,需要配置一下历史日志

服务器。具体配置步骤如下:

4.1. 配置mapred-site.xml

日志聚集:应用(Job)运行完成以后,将应用运行日志信息从各个task汇总上传到HDFS系统上。

日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。

注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和 HistoryManager。

开启日志聚集功能具体步骤如下:

配置yarn-site.xml

01020304050607080910111213141516vim yarn-site.xml         yarn.log-aggregation-enable</name>        true</value></property>        yarn.log-aggregation.retain-seconds</name>        604800</value></property>        yarn.log.server.url</name>        http://dev-spark-master-206:19888/jobhistory/logs</value></property>

4.3、分发配置到其他节点:

010203040506# 重启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页面查看:

创建wc.txt文件

010203040506# vim wc.txthadoop mapreduce yarnhdfs hadoop mapreducemapreduce yarn hellohellohello

上传到hdfs:/text/input目录

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

执行WordCount程序

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

运行成功,查看结果:

010203040506070809101112[root@dev-spark-master-206 hadoop]# hdfs dfs -ls /wcoutputFound 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-00000hadoop  2hdfs    1hello   3mapreduce   3yarn    2

web页面查看历史服务器:http://192.168.90.206:19888/jobhistory

点击logs可以查看详情:

日志详情如下: