Hadoop分布式部署

Hadoop分布式部署

准备工作

准备以下主机

  • hadoop102
  • hadoop103
  • hadoop104

配置102Hadoop环境

参考单机部署

需要解决的问题

  1. 创建文件夹并赋权
  2. 上传解压文件
  3. 配置环境变量文件

我们环境变量这次就只使用一个,jdkhadoop的写在一起

sudo vim /etc/profile.d/hadoop_env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_181
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
export PATH=$PATH:$JAVA_HOME/bin

注意要刷新

scp文件分发

现在是102的环境准备好了,103104还没有东西,我们不打算一个一个服务器上传配置解压,这里我们使用scp工具进行主机与主机之间的文件传输

scp的语法

scp -r $user@$host:/dir/file $user@$host:/dir/file

案例:在102主机上将jdk文件传输到103

scp -r /opt/module/jdk1.8.0_181/ hadoop@hadoop103:/opt/module/

hadoop_env.sh

scp -r root@hadoop102: /etc/profile.d/hadoop_env.sh/ root@hadoop103:/etc/profile.d/

**注意!**我们传输的是/opt/module目录,使用的是hadoop用户,该用户是没有/opt的写入权限的,所以我们要先在103上面创建好/opt/module文件夹,并且将权限赋予给hadoop用户

案例:在103主机上将102hadoop文件拉倒103上面

scp -r hadoop@hadoop102:/opt/module/hadoop-3.1.3/ /opt/module/

案例:在104主机上将102/etc/profile.d/hadoop_env.sh文件拉倒103上面

scp -r root@hadoop102:/etc/profile.d/hadoop_env.sh root@hadoop103/etc/profile.d/

需要注意,连接对方需要对方密码

此时在103主机是执行环境变量的刷新,运行hadoop version那么103的环境就和102一模一样了

rsync文件同步

scp无法做到文件的增量同步,只能覆盖,而我们的文件可能只修改了一点点,是不需要传输全部的.那么rsync就可以做到这一点

centos安装rsync

yum install rsync

利用rsync102机器上的hadoop文件夹传输到104

rsync -av /opt/module/hadoop-3.1.3/ hadoop@hadoop104:/opt/module/hadoop-3.1.3/

注意,你需要事先准备好/opt/module目录,因为/opt的权限是属于root

[hadoop@hadoop104 module]$ sudo mkdir /opt/module/
[hadoop@hadoop104 module]$ sudo chown hadoop /opt/module

集群文件分发脚本

不管是scp还是rsync要想发文件,都得一台一台机器发送,而集群内的机器数量是相当大的,所以我们要编写一个我们自已的命令文件:做到一条命令给集群内的所有机器发送文件

  1. 为了保证我们的命令文件全局可以运行,这我们在一个是环境变量中的目录中创建该命令文件

  2. /home/hadoop/bin创建xsync

    vim /home/hadoop/bin/xsync
    
  3. 在该文件中写入

#!/bin/bash

if [ $# -lt 1 ]
then
   echo Not Arguement!
   exit;
fi
for host in hadoop102 hadoop103 hadoop104
do
   echo =================$host==================
   for file in $@
   do
       if [ -e $file ]
       then
           pdir=$(cd -P $(dirname $file); pwd)
           fname=$(basename $file)
           ssh $host "mkdir -p $pdir"
           rsync -av $pdir/$fname $host:$pdir
       else
           echo $file not exists!
   
       fi
   done
done
  1. 为该文件赋予可运行权限
chmod +x /home/hadoop/bin/xsync

你可能会使用windows的编辑工具去编辑这个代码,那么需要注意,windows的换行是\r\n,而在Linux中是\n,所以你可能会导致此文件运行报错

如果那出现了 #!/bin/bash^M错误,使用vim打开此文件

shift+:

:set ff=unix

设置文件编码为unix

配置无密登录

为了保证集群内的机器访问不需要密码,我们配置一下秘钥认证

注意,以下步骤需要在102-4三台机器是分别操作

  1. 创建秘钥对

    ssh-keygen -t rsa
    

    直接三次回车

  2. 给其他机器签发

    ssh-copy-id hadoop102
    
    ssh-copy-id hadoop103
    
    ssh-copy-id hadoop104
    

    注意,在hadoop102这台机器比较特殊,需要分发环境变量文件,所以需要root用户,所以你需要su root切换到root用户再执行一遍上面的操作,其他两台机器不用

同步集群所有文件

  1. 同步xsync

    [hadoop@hadoop102 .shh]$ xsync /home/hadoop/bin/xsync
    
  2. 同步jdk文件

    [hadoop@hadoop102 .shh]$ xsync /opt/module/jdk1.8.0_181/
    
  3. 同步hadoop文件

    [hadoop@hadoop102 .shh]$ xsync /opt/module/hadoop-3.1.3/
    
  4. 同步hadoop_env.sh环境变量文件

    [hadoop@hadoop102 .shh]$ sudo /home/hadoop/bin/xsync /etc/profile.d/hadoop_env.sh
    
  5. 接下来你应该在三台机器上分别检查环境

    source /etc/profile
    
    hadoop version
    

集群配置

集群部署规划

在部署Hadoop分布式集群时,必须注意以下问题

  1. NameNode很耗内存

  2. ResourceManager也很耗内存

  3. Secondary NameNote不能喝NameNode装在一台机器

    2NNNameNode的备份,在NameNode挂了之后帮助NameNode恢复数据(毕竟NameNode的运行时数据是在内存中,不小心挂了就没了)

设计规划

组件hadoop102hadoop103hadoop104
HDFSNameNode
DataNode
DataNodeSecondary NameNode
DataNode
YARNNodeManagerResourceManager
NodeManager
NodeManager

Hadoop的配置文件说明

Hadoop的配置文件分为两种:

  • 默认配置文件
  • 自定义配置文件

默认配置文件

  • core-default.xml
  • hdfs-default.xml
  • yarn-default.xml
  • mapred-default.xml

以上的4个配置文件在Hadoop的文件中,这4个文件里面书写所有的Hadoop配置项,也就是说,你释压之后的Hadoop不用改任何东西就可以运行的

自定义配置文件

自定义配置文件的配置是我们需要对默认配置提出修改的地方.就是说,默认配置写好了,而如果自定义配置里面出现了重复的配置型,以自定义的为准

自定义的配置会覆盖默认配置(不是整个文件覆盖,是按具体的配置项)

  1. core-site.xml
  2. hdfs.xml
  3. yarn-site.xml
  4. mapred-site.xml

我们所谓的配置Hadoop指的是修改这4个配置文件

配置集群

请在102上配置该文件

1. 核心文件配置:core-site.xml

  <!-- 指定NameNode的地址 -->
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop102:9820</value>
  </property>

  <!-- 指定Hadoop数据存储的目录 -->
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/module/hadoop-3.1.3/data</value>
  </property>

  <!-- 配置HDFS网页登录使用的静态用户 -->
  <property>
    <name>hadoop.http.staticuser.user</name>
    <value>hadoop</value>
  </property>

2. HDFS存储配置:hdfs.xml

  <!-- namenode 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>

3. 任务调度配置:yarn-site.xml

  <property>
    <!-- 指定 MR 数据流方式:shuffle -->
    <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,
      HADOOP_YARN_HOME,
      HADOOP_MAPRED_HOME,
      CLASSPATH_PREPEND_DISTCACHE
    
    </value>
  </property>

4. 任务处理配置:mapred-site.xml

  <property>
    <!-- 指定MapReduce程序的调度器:yarn -->
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>

配置进行同步

因为配置文件是在102上修改,而其他机器没有,所以我们要进行4个配置文件的同步

xsync /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
xsync /opt/module/hadoop-3.1.3/etc/hadoop/hdfs-site.xml
xsync /opt/module/hadoop-3.1.3/etc/hadoop/yarn-site.xml
xsync /opt/module/hadoop-3.1.3/etc/hadoop/mapred-site.xml

集群启动

在启动集群之前,我们要指定集群的工作节点群

vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
hadoop102
hadoop103
hadoop104

主要此文件不能有任何空行

同步此文件

xsync /opt/module/hadoop-3.1.3/etc/hadoop/workers
  1. 初始化NameNode

    初始化NameNode只需要在配置后的第一次启动时需要,后面就不需要了,除非你修改了配置

    NameNode的机器是(hadoop102)上执行

    hdfs namenode -format
    
  2. 启动HDFS

    NameNode所在的机器上执行

    /opt/module/hadoop-3.1.3/sbin/start-dfs.sh
    
  3. 启动Yarn

    ResourceManager所在机器上(hadoop103)执行

    /opt/module/hadoop-3.1.3/sbin/start-yarn.sh
    

检查

在每台机器上执行jps命令检查集群的情况

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-62WojyWA-1653369207198)(C:\Users\Administrator\Desktop\屏幕截图 2021-11-23 172420.png)]

错误的处理

如果你启动失败了,那么就是你配置文件错了

请按照以下步骤处理

  1. 关闭集群

    1. 关闭YARN

      /opt/module/hadoop-3.1.3/sbin/stop-yarn.sh
      
    2. 关闭DFS

      /opt/module/hadoop-3.1.3/sbin/stop-dfs.sh
      
  2. 删除每个节点上的datalogs目录

    rm -rf /opt/module/hadoop-3.1.3/data /opt/module/hadoop-3.1.3/logsxsync
    
  3. 去修改错误文件

  4. 同步修改的文件

  5. 初始化NameNode

  6. 再次启动

集群的外部访问

我们要关闭防火墙才可以让外部进行访问

  1. 关闭防火墙

    sudo systemctl stop firewalld.service
    
  2. 开机不自启

    sudo systemctl disable firewalld.service
    
  3. 查看状态

    sudo firewall-cmd --state
    

注意,你需要把所有机器的防火墙全部关了

外部访问

  1. NameNode的访问

    地址:`http://hadoop102:9870

  2. 2NN的访问

    地址:`http://hadoop102:9868

集群的启动和关闭

快速脚本

hadoop102/home/hadoop/bin中创建文件my-hadoop

写下以下代码

#!/bin/bash

if [ $# -lt 1 ]
then
    echo "请输入命令参数![start|stop|init]"
    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"
;;
"stop")
    echo "===================关闭hadoop集群==================="
    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"
;;
"init")

    read -p "你正在进行集群的初始化操作!此操作将删除集群内的所有数据!是否确定?[yes/no]:" check
    if [ "$check" = "yes" ]
    then
        echo "=================关闭Hadoop集群==================="
        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 "====================删除Hadoop集群数据======================"
        ssh hadoop102 "rm -rf /opt/module/hadoop-3.1.3/data /opt/module/hadoop-3.1.3/logs "
        ssh hadoop103 "rm -rf /opt/module/hadoop-3.1.3/data /opt/module/hadoop-3.1.3/logs "
        ssh hadoop104 "rm -rf /opt/module/hadoop-3.1.3/data /opt/module/hadoop-3.1.3/logs "
        echo "========================集群数据删除完毕================================"

        ssh hadoop102 "hdfs namenode -format"
    fi
;;
*)
    echo "参数错误,可允许的参数:[start|stop|init]"   
;;
esac 

注意你要给此文件赋予运行权利,并且同步给其他机器

所以之后你要是出了问题,只需要直接去修改文件,然后执行init,在start

集群的基本测试

  1. 创建目录

    hadoop fs -mkdir /input
    
  2. 上传文件

    hadoop fs -put jdk-8ul8l_linux-x64.tar.gz /input/
    

    上传到指定的目录,注意,这样上传需要保证这个目录已经存在

  3. 查看集群中的文件

    #查看根目录
    hadoop fs -ls /
    
    #查看指定文件夹
    hadoop fs -ls /input
    
  4. 下载文件

    hadoop fs -get /input/jdk-8u181-linux-x64.tar.gz /home/hadoop/
    

    以上命令会将文件下载到/home/hadoop目录,文件名就是原名

    当然你可以在下载的时候指定一个新的文件名

    hadoop fs -get /input/jdk-8u181-linux-x64.tar.gz /home/hadoop/jdk.gz
    
  5. 删除集群中的文件

    #删除文件
    hadoop fs rm /文件名
    hadoop fs rm /目录/文件名
    
    #删除文件夹
    hadoop fs rm -r /input
    

``

  1. 上传文件

    hadoop fs -put jdk-8ul8l_linux-x64.tar.gz /input/
    

    上传到指定的目录,注意,这样上传需要保证这个目录已经存在

  2. 查看集群中的文件

    #查看根目录
    hadoop fs -ls /
    
    #查看指定文件夹
    hadoop fs -ls /input
    
  3. 下载文件

    hadoop fs -get /input/jdk-8u181-linux-x64.tar.gz /home/hadoop/
    

    以上命令会将文件下载到/home/hadoop目录,文件名就是原名

    当然你可以在下载的时候指定一个新的文件名

    hadoop fs -get /input/jdk-8u181-linux-x64.tar.gz /home/hadoop/jdk.gz
    
  4. 删除集群中的文件

    #删除文件
    hadoop fs rm /文件名
    hadoop fs rm /目录/文件名
    
    #删除文件夹
    hadoop fs rm -r /input
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值