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


    转自doublexi: https://www.cnblogs.com/doublexi/p/15624246.html

    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/

    01
    02
    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

    解压:

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

    编辑环境变量:

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

    source生效:

    01
    source /etc/profile

    测试:

    01
    02
    03
    04
    05
    06
    07
    # 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

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    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)

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    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)

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    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文件

    01
    vim workers
    01
    02
    03
    dev-spark-master-206
    dev-spark-slave-171
    dev-spark-slave-172

    注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。

    3.2、MapReduce集群配置

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

    01
    02
    03
    vim mapred-env.sh
     
    export JAVA_HOME=/usr/java/jdk1.8.0_162

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

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    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路径

    01
    02
    03
    vim yarn-env.sh
     
    export JAVA_HOME=/usr/java/jdk1.8.0_162

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

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    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安装目录所属用户和用户组!!

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

    3.4、将Hadoop安装包发送到其他节点

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

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

    01
    02
    03
    04
    05
    # 检查三台服务器上是否有这个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一下

    01
    source /etc/profile

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

    01
    02
    03
    04
    05
    06
    07
    # 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

    01
    02
    # 注意,只能执行一次,后面再执行会破坏之前的集群环境
    hdfs namenode -format

    初始化成功后,输出日志里会显示”successfully formatted”

    3.6、启动集群:

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

    启动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

    01
    02
    03
    [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

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

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

    01
    02
    03
    [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

    01
    02
    03
    04
    [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

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

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

    01
    02
    03
    [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

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

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

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

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


    注意:如果启动报错

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    # 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文件,添加下列参数:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    # 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文件,添加下列参数:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    # 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

    发送到其他节点:

    01
    02
    03
    04
    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杀掉)

    01
    02
    03
    04
    05
    06
    07
    08
    09
    # 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。

    01
    02
    # 在dev-spark-slave-172上面启动yarn
    start-yarn.sh

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

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

    (2)启动/停止YARN

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

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

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

    (2)整体启动/停止YARN

    01
    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:

    01
    02
    03
    04
    05
    06
    [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

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    # 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

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    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、分发配置到其他节点:

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

    4.4、启动history server

    01
    02
    03
    04
    05
    06
    # 重启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文件

    01
    02
    03
    04
    05
    06
    # vim wc.txt
    hadoop mapreduce yarn
    hdfs hadoop mapreduce
    mapreduce yarn hello
    hello
    hello

    上传到hdfs:/text/input目录

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

    执行WordCount程序

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

    运行成功,查看结果:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    [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

  • 相关阅读:
    2017NOIP游记 (格式有点炸)
    Qtree3
    [P2769] 猴子上树
    [Usaco2005 Dec]Cleaning Shifts 清理牛棚
    [NOIP2014] 解方程
    [ZJOI2012] 灾难
    [洛谷P3941] 入阵曲
    [SCOI2009] 最长距离
    [JLOI2011] 飞行路线
    虚拟化数电底层
  • 原文地址:https://www.cnblogs.com/xrszff/p/16069605.html
Copyright © 2020-2023  润新知