尚硅谷hadoop3.x集群配置笔记及常见错误解决方式

1.搭建集群准备工作

总体流程

  1. 准备3台客户机(关闭防火墙、静态IP、主机名称)

  2. 安装JDK

  3. 配置环境变量

  4. 安装Hadoop

  5. 配置环境变量

  6. 配置集群

  7. 单点启动

  8. 配置ssh

  9. 群起并测试集群

一、模板虚拟机的搭建

  • 配置要求:IP地址192.168.10.100**、主机名称hadoop100、内存4G、**硬盘50G(内存硬盘大小根据电脑配置自行更改)
  • 关于是否安装桌面:未安装桌面的版本需要要执行以下命令,用于配置工具包集合,包含ifconfig等命令以及软件包(rpm等命令)
yum install -y net-tools
yum install -y epel-release
yum install -y vim
  • 关闭防火墙,关闭防火墙开机自启
systemctl stop firewalld
systemctl disable firewalld.service
  • 建议使用root用户,如使用其他用户,需配置以下文件,在%wheel行下添加内容
vim /etc/sudoer

## Allow root to run any commands anywhere
root    ALL=(ALL)     ALL

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL
username   ALL=(ALL)     NOPASSWD:ALL
  • 在/opt目录下创建文件夹module software,并修改所属主和所属组
chown atguigu:atguigu /opt/module 
chown atguigu:atguigu /opt/software
  • 安装桌面版用户需删除自带的jdk

  • 重启虚拟机

二、克隆虚拟机

  • 分别克隆三台虚拟机hadoop102 hadoop103 hadoop104
  • 修改克隆机IP,并将BOOTPROTO改为static
vim /etc/sysconfig/network-scripts/ifcfg-ens33
  • 修改克隆机主机名,配置hostname为hadoop102…
vim /etc/hostname
  • 配置Linux克隆机主机名称映射hosts文件
vim /etc/hosts

192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102
192.168.10.103 hadoop103
192.168.10.104 hadoop104
  • 重启克隆机
  • 修改windows的主机映射文件(hosts文件)
    1. 进入C:\Windows\System32\drivers\etc路径
    2. 打开hosts文件并添加如下内容,然后保存
192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102
192.168.10.103 hadoop103
192.168.10.104 hadoop104

三、在hadoop102虚拟机安装jdk

  • 注意:桌面版虚拟机一定要先删掉虚拟机自带jdk

  • 安装xshell并用以下工具将jdk包和hadoop导入software文件夹中
    在这里插入图片描述

  • 检查包是否导入成功

  • 将jdk解压到module文件夹中(自行更改jar包版本名字)

tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
  • 配置jdk环境

    1.新建/etc/profile.d/my_env.sh文件

    2.在文件中配置变量

    #JAVA_HOME
    export JAVA_HOME=/opt/module/jdk1.8.0_212
    export PATH=$PATH:$JAVA_HOME/bin
    

    3.刷新一下profile文件,使环境变量生效

    source /etc/profile
    
  • 验证jdk是否安装成功

  • 重启虚拟机

四、在hadoop102安装Hadoop

  • 用xshell把hadoop包移动到software文件夹中(hadoop包官网下载即可,建议选择3.x版本)
  • 进入software文件夹中,解压hadoop包并查看是否解压成功
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/	
  • 配置hadoop环境
    1. 获取复制Hadoop安装路径
    2. 打开/etc/profile.d/my_env.sh文件
    3. 在my_env.sh文件末尾添加如下内容(hadoop相比jdk需要多配置一个sbin路径,sbin中存储了与hadoop启动与暂停相关的脚本,hadoop的文件名也需要自行更换对应版本名字):
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
  • 更新一下profile文件,让环境生效
source /etc/profile
  • 测试是否安装成功
  • 重启虚拟机

2.完全分布式运行模式

一、编写xsync脚本,便于三台虚拟机之间进行群发功能

  1. scp(secure copy)安全拷贝(前提:另外两台虚拟机都已经创建好module和software目录)

    基本语法:

    scp    -r        $pdir/$fname             $user@$host:$pdir/$fname
    命令   递归     要拷贝的文件路径/名称   		目的地用户@主机:目的地路径/名称
    
  2. rsync远程同步工具

    rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。

    基本语法:(-av意味着归档拷贝以及显示复制过程)

    rsync    -av       $pdir/$fname             $user@$host:$pdir/$fname
    命令   选项参数   要拷贝的文件路径/名称   		目的地用户@主机:目的地路径/名称
    
  3. 了解以上原理,正式开始编写xsync脚本

    • 需求:循环复制文件到所有节点的相同目录下
    • 脚本实现,在/home/root/bin目录下创建xsync文件(root可为自己的用户名)
    #!/bin/bash
    
    #1. 判断参数个数
    if [ $# -lt 1 ]
    then
        echo Not Enough Arguement!
        exit;
    fi
    
    #2. 遍历集群所有机器
    for host in hadoop102 hadoop103 hadoop104
    do
        echo ====================  $host  ====================
        #3. 遍历所有目录,挨个发送
    
        for file in $@
        do
            #4. 判断文件是否存在
            if [ -e $file ]
                then
                    #5. 获取父目录
                    pdir=$(cd -P $(dirname $file); pwd)
    
                    #6. 获取当前文件的名称
                    fname=$(basename $file)
                    ssh $host "mkdir -p $pdir"
                    rsync -av $pdir/$fname $host:$pdir
                else
                    echo $file does not exists!
            fi
        done
    done
    
    • 修改脚本 xsync 具有执行权限
    chmod +x xsync
    
    • 测试脚本
    xsync /home/atguigu/bin
    
    • 将脚本复制到/bin中,以便全局调用
    sudo cp xsync /bin/
    
  • 脚本配置完毕后,同步环境变量
sudo ./bin/xsync /etc/profile.d/my_env.sh
  • 让环境变量生效
[root@hadoop103 bin]$ source /etc/profile
[root@hadoop104 opt]$ source /etc/profile

二、SSH无密登录配置

  • 先使用一遍ssh命令
ssh hadoop103
exit
  • 生成公钥和私钥
[root@hadoop102 .ssh]$ pwd
/root/.ssh
[root@hadoop102 .ssh]$ ssh-keygen -t rsa
  • 将公钥拷贝到要免密登录的目标机器上(另外两台虚拟机也要进行同样的操作)
[root@hadoop102 .ssh]$ ssh-copy-id hadoop102
[root@hadoop102 .ssh]$ ssh-copy-id hadoop103
[root@hadoop102 .ssh]$ ssh-copy-id hadoop104

三、集群配置

  1. 集群部署规划
hadoop102hadoop103hadoop104
HDFSNameNode DataNodeDataNodeSecondaryNameNode DataNode
YARNNodeManagerResourceManager NodeManagerNodeManager

​ 2.配置文件说明

Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。

(1)默认配置文件:

要获取的默认文件文件存放在Hadoop的jar包中的位置
[core-default.xml]hadoop-common-3.1.3.jar/core-default.xml
[hdfs-default.xml]hadoop-hdfs-3.1.3.jar/hdfs-default.xml
[yarn-default.xml]hadoop-yarn-common-3.1.3.jar/yarn-default.xml
[mapred-default.xml]hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml

(2)自定义配置文件:

core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个配置文件存放在**$HADOOP_HOME/etc/hadoop**这个路径上,用户可以根据项目需求重新进行修改配置。

  1. 配置集群
  • 核心配置文件

配置core-site.xml

[root@hadoop102 ~]$ cd $HADOOP_HOME/etc/hadoop
[root@hadoop102 hadoop]$ vim core-site.xml

文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <!-- 指定NameNode的地址 -->
  <property><name>fs.defaultFS</name><value>hdfs://hadoop102:8020</value>
  </property>
  <!-- 指定hadoop数据的存储目录,切记更改为自己的目录路径 -->
  <property><name>hadoop.tmp.dir</name><value>/opt/module/hadoop-3.1.3/data</value>
  </property>
  <!-- 配置HDFS网页登录使用的静态用户为atguigu -->
  <property><name>hadoop.http.staticuser.user</name><value>root</value>
  </property>
</configuration>

(2)HDFS配置文件

配置hdfs-site.xml

[root@hadoop102 hadoop]$ vim hdfs-site.xml

文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <!-- nn web端访问地址-->
  <property><name>dfs.namenode.http-address</name><value>hadoop102:9870</value>
  </property>
  <!-- 2nn web端访问地址-->
  <property><name>dfs.namenode.secondary.http-address</name><value>hadoop104:9868</value>
  </property>
</configuration>

(3)YARN配置文件

配置yarn-site.xml

[root@hadoop102 hadoop]$ vim yarn-site.xml

文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <!-- 指定MR走shuffle -->
  <property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value>
  </property>
  <!-- 指定ResourceManager的地址-->
  <property><name>yarn.resourcemanager.hostname</name><value>hadoop103</value>
  </property>
  <!-- 环境变量的继承 -->
  <property><name>yarn.nodemanager.env-whitelist</name> 		<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
  </property>
</configuration>

(4)MapReduce配置文件

配置mapred-site.xml

[root@hadoop102 hadoop]$ vim mapred-site.xml

文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <!-- 指定MapReduce程序运行在Yarn上 -->
  <property><name>mapreduce.framework.name</name><value>yarn</value>
  </property>
</configuration>
  • 在集群上分发配置好的Hadoop配置文件
[root@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc/hadoop/
  • 去103和104上查看文件分发情况
[atguigu@hadoop103 ~]$ cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
[atguigu@hadoop104 ~]$ cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml

四、特别说明

如果为root用户需更改**$HADOOP_HOME/etc/hadoop/hadoop-env.sh** 文件,添加以下配置

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

五、群起集群

  • 配置workers
vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
#添加以下内容,该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
hadoop102
hadoop103
hadoop104
  • 同步所有节点配置文件
xsync /opt/module/hadoop-3.1.3/etc
  • 启动集群

如果集群是第一次启动,需要在hadoop102节点格式化NameNode

hdfs namenode -format
  • 启动HDFS
sbin/start-dfs.sh
  • **在配置了ResourceManager的节点(hadoop103)**启动YARN
sbin/start-yarn.sh
  • Web端查看HDFS的NameNode

浏览器中输入:http://hadoop102:9870

  • Web端查看YARN的ResourceManager

浏览器中输入:http://hadoop103:8088

六、集群基本测试

  • 创建目录
hadoop fs -mkdir /wcinput
  • 上传文件
hadoop fs -put wcinput/word.txt /wcinput
  • 已上传成功的页面:
    在这里插入图片描述
  • 上传的文件信息:
    在这里插入图片描述

七、关于集群崩溃问题

  • 先暂停集群
stop-dfs.sh
  • 删除每台虚拟机上的hadoop-3.1.3目录下的data和logs目录
  • 格式化集群
hdfs namenode -format
  • 启动集群
start-dfs.sh

八、配置历史服务器

  • 配置mapred-site.xml
vim mapred-site.xml

在该文件里面增加如下配置:

<!-- 历史服务器端地址 -->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop102:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop102:19888</value>
</property>
  • 分发文件
xsync mapred-site.xml
  • 重启yarn服务
  • 在hadoop102启动历史服务器
mapred --daemon start historyserver
  • 启动成功:
    在这里插入图片描述
  • 查看JobHistory

http://hadoop102:19888/jobhistory

九、配置日志的聚集

功能:聚集三台虚拟机上的运行日志上传到hdfs系统上,并为用户提供接口查看日志信息

优点:可以方便用户查看程序运行详情,方便开发调试。

  • 配置yarn-site.xml
vim yarn-site.xml
<!-- 开启日志聚集功能 -->
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>  
    <name>yarn.log.server.url</name>  
    <value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为7天 -->
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
</property>
  • 分发到其他几台机器

  • 重新启动NodeManager 、ResourceManager和HistoryServer(重启yarn和historyserver即可)

  • 查看日志的方式
    在这里插入图片描述

十、集群启动停止方式

  • 各个模块分开启动/停止(配置ssh是前提)

​ 1. 整体启动/停止HDFS

start-dfs.sh/stop-dfs.sh

​ 2. 整体启动/停止YARN

start-yarn.sh/stop-yarn.sh
  • 各个服务组件逐一启动/停止

​ 1. 分别启动/停止HDFS组件

hdfs --daemon start/stop namenode/datanode/secondarynamenode

​ 2. 启动/停止YARN(在Hadoop103上运行)

yarn --daemon start/stop resourcemanager/nodemanager

十一、编写Hadoop集群常用脚本(可选)

  • 切换到编写xsync脚本的目录下
  • 输入如下内容
#!/bin/bash
if [ $# -lt 1 ]
then
    echo "No Args Input..."
    exit ;
fi
case $1 in
"start")
        echo " =================== 启动 hadoop集群 ==================="

        echo " --------------- 启动 hdfs ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
        echo " --------------- 启动 yarn ---------------"
        ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
        echo " --------------- 启动 historyserver ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
        echo " =================== 关闭 hadoop集群 ==================="

        echo " --------------- 关闭 historyserver ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
        echo " --------------- 关闭 yarn ---------------"
        ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
        echo " --------------- 关闭 hdfs ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
    echo "Input Args Error..."
;;
esac
  • 保存后退出,然后赋予脚本执行权限
chmod 777 myhadoop.sh
  • 测试功能
myhadoop.sh start
myhadoop.sh stop
  • 查看三台服务器Java进程脚本:jpsall
vim jpsall
chmod 777 jpsall
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
​    echo =============== $host ===============
​    ssh $host jps 
done

十二、常用端口号说明(重点)

端口名称Hadoop2.xHadoop3.x
NameNode内部通信端口8020/90008020/9000/9820
NameNode HTTP UI(面向用户)500709870
MapReduce查看执行任务端口80888088
历史服务器通信端口1988819888

版权声明:本文为m0_51404279原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。