Hadoop生产环境集群搭建

使用3台虚拟机模拟搭建生产环境

一、模板虚拟机创建

1.修改 IP 和主机名

#使用 root 用户
vim /etc/sysconfig/network-scripts/ifcfg-ens33

#在文件中修改 IP
TYPE="Ethernet"  #网络类型(通常是Ethemet)
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static" #IP的配置方法[none|static|bootp|dhcp](引导时不使用协议|静态分配IP|BOOTP协议|DHCP协议)
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"   
UUID="e83804c1-3257-4584-81bb-660665ac22f6"   #随机id
DEVICE="ens33"   #接口名(设备,网卡)
ONBOOT="yes"   #系统启动的时候网络接口是否有效(yes/no)
#IP地址
IPADDR=192.168.10.100  
#网关
GATEWAY=192.168.10.2
#域名解析器
DNS1=192.168.10.2
#重启网卡
systemctl restart network
#修改主机名
vim /etc/hostname

#在文件中修改
hadoop100
#配置IP和主机名的映射
vim /etc/hosts

#添加如下内容
192.168.10.100 hadoop100

2.配置虚拟机

  • 检查网络是否通畅:ping www.baidu.com

  • 安装 epel-release(红帽系的软件仓库):yum install -y epel-release

  • 如果Linux安装的是最小系统版,还需要安装如下工具;如果安装的是Linux桌面标准版,不需要执行如下操作

    #安装 net-tool:工具包集合,包含ifconfig等命令
    [root@xxxxx ~]#yum install -y net-tools 
    
    #安装 vim 编辑器
    [root@xxxxx ~]#yum install -y vim
    
  • 关闭防火墙,关闭防火墙开机自启

    systemctl stop firewalld
    systemctl disable firewalld.service
    
  • 创建普通用户并修改密码

    #创建用户:user add [user_name]
    user add apple
    #修改密码:passwd [user_name]
    passwd apple
    
  • 配置普通用户具有 root 权限,方便使用 sudo

    vim /etc/sudoers
    
    #在文件中修改
    #Allow root to run any commands anywhere
    root    ALL=(ALL)     ALL
    
    #Allows people in group wheel to run all commands
    %wheel  ALL=(ALL)       ALL
    apple   ALL=(ALL)   NOPASSWD:ALL #一定要放在 %wheel 后
    
  • 在 /opt 目录下创建两个目录并修改所属组和用户

    #使用root用户
    mkdir /opt/module
    mkdir /opt/software
    chown apple:apple /opt/module 
    chown apple:apple /opt/software
    
  • 卸载虚拟机自带的JDK:

    rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
    
    #rpm -qa:查询所安装的所有rpm软件包
    #grep -i:忽略大小写
    #xargs -n1:表示每次只传递一个参数
    #rpm -e –nodeps:强制卸载软件
    
  • 重启虚拟机:reboot

3.安装 JDK 和 Hadoop

3.1 安装 JDK

使用普通用户 apple 操作

  • 解压安装包到指定目录:
    tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/ #-C 解压到指定目录
    
  • 配置环境变量:
    sudo vim /etc/profile.d/my_env.sh
    
    #JAVA_HOME
    export JAVA_HOME=/opt/module/jdk1.8.0_212
    export PATH=$PATH:$JAVA_HOME/bin
    
  • 运行生效:source /etc/profile
3.2 安装 Hadoop
  • 解压安装包到指定目录:

    tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/ #-C 解压到指定目录
    
  • 配置环境变量:

    sudo vim /etc/profile.d/my_env.sh
    
    #HADOOP_HOME
    export HADOOP_HOME=/opt/module/hadoop-3.1.3
    export PATH=$PATH:$HADOOP_HOME/bin
    export PATH=$PATH:$HADOOP_HOME/sbin
    
  • 运行生效:source /etc/profile

  • 检测是否安装成功:hadoop version

二、分布式集群搭建

1.三台虚拟服务器节点配置

  • 在 VMware 中基于模板虚拟机 hadoop100 克隆出三台节点虚拟机
    在这里插入图片描述
  • 参照 一、模板虚拟机创建 中的修改三台虚拟机的 IP 和主机名
    vim /etc/hosts
    192.168.10.102 hadoop102
    192.168.10.103 hadoop103
    192.168.10.104 hadoop104
    
  • 在三台节点服务器之间配置 SSH 免密登录
    #在 hadoop102 节点配置
    #进入用户家目录
    cd ~
    #进入.ssh目录
    cd .ssh
    #执行公钥和私钥生成命令
    ssh-keygen -t rsa
    #将公钥拷贝发送到当前节点、hadoop103 和 hadoop104
    ssh-copy-id hadoop102
    ssh-copy-id hadoop103
    ssh-copy-id hadoop104
    
    #在 hadoop103 和 hadoop104 节点上按照上述过程分别操作
    
  • 编写在三台节点服务器之间分发文件的脚本命令
    #在 hadoop102 节点进入当前用户家目录
    cd /home/apple
    #创建 bin 目录并进入
    mkdir bin
    cd bin
    #创建分发命令脚本
    vim xsync
    
    #xsync脚本内容
    #!/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
    
    #添加执行权限
    chmod +x xsync
    #将脚本复制到/bin中,以便全局调用
    sudo cp xsync /bin/
    #使用自定义脚本命令同步环境变量配置到其他节点
    sudo ./bin/xsync /etc/profile.d/my_env.sh
    #使环境变量生效
    source /etc/profile
    

2.Hadoop集群搭建

2.1 集群规划

NameNode 和 SecondaryNameNode 不要配置在同一服务器
ResourceManager 不要和 NameNode、SecondaryNameNode 配置在同一服务器

模块hadoop102hadoop103hadoop104
HDFSNameNode
DataNode
DataNodeSecondaryNameNode
DataNode
YarnNodeManagerResourceManager
NodeManager
NodeManager
2.2 搭建操作
  • 在 hadoop102 节点上按集群规划进行配置
    #进入 hadoop 安装目录下的 core-site.xml 文件
    cd /opt/module/hadoop-3.1.3/etc/hadoop
    vim core-site.xml
    
    #添加内容
    <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>atguigu</value>
      </property>
    </configuration>
    
    #进入 hadoop 安装目录下的 hdfs-site.xml 文件
    cd /opt/module/hadoop-3.1.3/etc/hadoop
    vim hdfs-site.xml
    
    #添加内容
    <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>
    
     #进入 hadoop 安装目录下的 yarn-site.xml 文件
    cd /opt/module/hadoop-3.1.3/etc/hadoop
    vim yarn-site.xml
    
    #添加内容
    <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>
      <!--环境变量的继承,解决版本 bug -->
      <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>
    
     #进入 hadoop 安装目录下的 mapred-site.xml 文件
    cd /opt/module/hadoop-3.1.3/etc/hadoop
    vim mapred-site.xml
    
    #添加内容
    <configuration>
      <!--指定MapReduce程序运行在Yarn上 -->
      <property>
          <name>mapreduce.framework.name</name>
          <value>yarn</value>
      </property>
    </configuration>
    
  • 使用自定义分发脚本命令将上述 hadoop 集群的配置分发到 hadoop103 和 hadoop104
    cd /opt/module/hadoop-3.1.3
    xsync /etc/hadoop/
    

3.Hadoop集群启动测试

3.1 配置文件添加集群
#在 hadoop102 节点上
cd /opt/module/hadoop-3.1.3/etc/hadoop

vim workers

#添加集群
hadoop102
hadoop103
hadoop104

#分发配置文件
xsync /opt/module/hadoop-3.1.3/etc/hadoop/workers
3.2 启动集群
  • 首次启动,需要格式化 NameNode
    #在 NameNode 所在的节点 hadoop102 上
    hdfs namenode -format
    
  • 启动 NameNode 服务
    #hadoop102
    cd /opt/module/hadoop-3.1.3/sbin
    ./start-dfs.sh
    
  • 启动 ResourceManager 服务
    #hadoop103
    cd /opt/module/hadoop-3.1.3/sbin
    ./start-yarn.sh
    
  • 查看服务是否启动:jps
  • 在浏览器查看 Web 服务:http://hadoop102:9870(HDFS)、http://hadoop103:8088 (YARN)
3.3 历史服务器配置
  • 开启历史服务器功能
    cd /opt/module/hadoop-3.1.3/etc/hadoop
    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 /opt/module/hadoop-3.1.3/etc/hadoop/mapred-site.xml
    
  • 开启日志聚集功能
    cd /opt/module/hadoop-3.1.3/etc/hadoop
    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>
    
    #分发配置
    xsync /opt/module/hadoop-3.1.3/etc/hadoop/yarn-site.xml
    
  • 启动历史服务器
    cd /opt/module/hadoop-3.1.3/bin
    
    mapred --daemon start historyserver
    
  • 在浏览器查看历史服务器 web 端:http://hadoop102:19888/jobhistory
3.4 自定义相关命令脚本
  • 自定义 hadoop 集群启停脚本
    #进入用户家目录下的 bin 目录
    cd /home/apple/bin
    #创建集群启停脚本
    vim myhadoop.sh
    
    #添加内容
    #!/bin/bash
    if [ $# -lt1 ]
    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 +x myhadoop.sh
    #分发脚本
    xsync /home/apple/bin
    
  • 自定义进程查看脚本
    cd /home/apple/bin
    #创建进程查看脚本
    vim jpsall
    
    #添加内容
    #!/bin/bash
    for host in hadoop102 hadoop103 hadoop104
    do
          echo =============== $host ===============
          ssh $host jps
    done
    
    #添加执行权限
    chmod 777 jpsall
    #分发脚本
    xsync /home/apple/bin
    

4. 集群的常用端口号和配置文件

4.1 常用端口号说明
端口名称Hadoop2.xHadoop3.x
NameNode内部通信端口8020/90008020/9000/9820
NameNode HTTP UI500709870
Yarn查看执行任务端口80888088
RM内部通信端口8032
历史服务器 Web 端口1988819888
历史服务器内部通信端口10020
4.2 常用配置文件
Hadoop2.xHadoop3.x
core-site.xmlcore-site.xml
hdfs-site.xmlhdfs-site.xml
yarn-site.xmlyarn-site.xml
mapred-site.xmlmapred-site.xml
slavesworkers
  • 25
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值