Hadoop:基于 阿里云服务器 搭建 Hadoop 集群

1. 环境准备

1.1. 配置主机映射

  • 设置服务器的映射关系,在三台服务器依次操作。

    vi /etc/hosts
    
    172.xxx.xxx.xxx   hadoop102 
    172.xxx.xxx.xxx   hadoop104
    172.xxx.xxx.xxx   hadoop103
    

1.2. 配置免密登录

  • 生成 ssh 秘钥并复制。

    cd ~/.ssh/
      
    ssh-keygen -t rsa
      
    ssh-copy-id hadoop102
    ssh-copy-id hadoop103
    ssh-copy-id hadoop104
    

1.3. 创建文件分发脚本

  • 分别在三台机器上安装 rsync

    yum install rsync
    
  • 在 bin 目录下创建 xsync;

      cd /bin
        
      vim xsync
    
  • 编辑脚本;

      #!/bin/bash
      #1 获取输入参数个数,如果没有参数,直接退出
      pcount=$#
      if((pcount==0)); then
      echo no args;
      exit;
      fi
      
      #2 获取文件名称
      p1=$1
      fname=`basename $p1`
      echo fname=$fname
      
      #3 获取上级目录到绝对路径
      pdir=`cd -P $(dirname $p1); pwd`
      echo pdir=$pdir
      
      #4 获取当前用户名称
      user=`whoami`
      
      #5 循环
      for((host=103; host<105; host++)); do
              echo ------------------- hadoop$host --------------
              rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
      done
    
  • 修改权限

      chmod 777 xsync
    

1.4. 安装 JDK

  • 上传文件
    • 上传 jdk-8u162-linux-x64.tar.gz 到 hadoop102 服务器 /opt/software 目录下;
  • 解压安装

    tar -zxvf jdk-8u162-linux-x64.tar.gz -C /opt/module/
      
    mv /opt/module/jdk1.8.0_162/ /usr/local/bin/jdk1.8
    
  • 分发 jdk
    xsync /usr/local/bin/jdk1.8/
    
  • 添加环境变量
    sudo vi /etc/profile
      
    # 在文件末尾添加 PATH 路径
    export JAVA_HOME=/usr/local/bin/jdk1.8
    export PATH=$PATH:$JAVA_HOME/bin
    
  • 分发 /etc/profile
    xsync /etc/profile
    
  • 在三台服务器上,依次启用环境变量
    source /etc/profile
    
  • 检查 jdk
    java  -version
    

2. 安装 Hadoop

2.1. 安装

  • 上传文件
    • 上传文件 hadoop-3.1.3.tar.gz 到 hadoop102 服务器 /opt/software 目录
  • 解压安装
    tar -vxf hadoop-3.1.3.tar.gz -C /opt/module/
      
    mv /opt/module/hadoop-3.1.3/ /usr/local/hadoop-3.1.3
    
  • 分发 hadoop 文件
    xsync /usr/local/hadoop-3.1.3/
    

2.2. 添加环境变量

  • 添加环境变量
    export HADOOP_HOME=/usr/local/hadoop-3.1.3
    export PATH=$PATH:$HADOOP_HOME/bin
    export PATH=$PATH:$HADOOP_HOME/sbin
    export HADOOP_INSTALL=$HADOOP_HOME
    export HADOOP_MAPRED_HOME=$HADOOP_HOME
    export HADOOP_COMMON_HOME=$HADOOP_HOME
    export HADOOP_HDFS_HOME=$HADOOP_HOME
    export YARN_HOME=$HADOOP_HOME
    export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
    
  • 分发 /etc/profile
    xsync /etc/profile
    
  • 在三台服务器上,依次启用环境变量
    source /etc/profile
    
  • 检查安装情况
    hadoop version
    
  • 查看 Hadoop 目录结构
    cd $HADOOP_HOME
    ll
      
    drwxr-xr-x 2 root root   4096 May  8 22:04 bin
    drwxr-xr-x 3 root root   4096 May  8 22:04 etc
    drwxr-xr-x 2 root root   4096 May  8 22:04 include
    drwxr-xr-x 3 root root   4096 May  8 22:04 lib
    drwxr-xr-x 4 root root   4096 May  8 22:04 libexec
    -rw-r--r-- 1 root root 147145 May  8 22:04 LICENSE.txt
    -rw-r--r-- 1 root root  21867 May  8 22:04 NOTICE.txt
    -rw-r--r-- 1 root root   1366 May  8 22:04 README.txt
    drwxr-xr-x 3 root root   4096 May  8 22:04 sbin
    drwxr-xr-x 4 root root   4096 May  8 22:04 share
    

3. 配置 Hadoop 集群

3.1. 集群规划配置

3.2. 修改集群配置文件

  • 注意:
    • 一定要在 hadoop102 上执行以下操作!
  • 进入配置文件目录

    cd /usr/local/hadoop-3.1.3/etc/hadoop
    
  • 修改 core-site.xml

      vi core-site.xml
    
      # 在 configuration 中添加
      
      <property>
          <!--NameNode 主节点-->
          <name>fs.defaultFS</name>
          <value>hdfs://hadoop102:9000</value>
      </property>
      <property>
          <!--临时文件目录-->
          <name>hadoop.tmp.dir</name>
          <value>file:/usr/local/hadoop-3.1.3/tmp</value>
          <description>Abase for other temporary directories.</description>
      </property>
    
  • 修改 hadoop-env.sh

      vi hadoop-env.sh
        
      # 在 hadoop-env.sh 添加内容
      export JAVA_HOME=/usr/local/bin/jdk1.8
    
  • 修改 hdfs-site.xml

      vi hdfs-site.xml
    
      <!-- 指定Hadoop辅助名称节点主机配置 -->
      <property>
           <!--副本数-->
           <name>dfs.namenode.secondary.http-address</name>
           <value>hadoop104:50090</value>
      </property>
      <property>
          <!--SNN 节点位置-->
          <name>dfs.replication</name>
          <value>3</value>
      </property>
      <property>
          <!--NameNode 文件路径【默认】-->
          <name>dfs.namenode.name.dir</name>
          <value>file:/usr/local/hadoop-3.1.3/tmp/dfs/name</value>
      </property>
      <property>
          <!--DataNode 文件路径【默认】-->
          <name>dfs.datanode.data.dir</name>
          <value>file:/usr/local/hadoop-3.1.3/tmp/dfs/data</value>
      </property>
      <property>
          <!--HDFS 文件权限检查-->
          <name>dfs.permissions.enabled</name>
          <value>false</value>
      </property>
    
  • 修改 mapred-env.sh

      vi mapred-env.sh
      
      export JAVA_HOME=/usr/local/bin/jdk1.8
    
  • 修改 mapred-site.xml

      vim mapred-site.xml
    
      <property>
          <!--运行时执行MapReduce框架工作。可以local[默认]、classic、yarn-->
          <name>mapreduce.framework.name</name>
          <value>yarn</value>
      </property>
      <property>
          <!-- MR 历史服务器(日志服务)-->
          <name>mapreduce.jobhistory.address</name>
          <value>hadoop102:10020</value>
      </property>
      <property>
          <!--MR 日志服务 web 地址-->
          <name>mapreduce.jobhistory.webapp.address</name>
          <value>hadoop102:19888</value>
      </property>
    
  • 修改 yarn-env.sh

    vi yarn-env.sh
      
    export JAVA_HOME=/usr/local/bin/jdk1.8
    
  • 修改 yarn-site.xml

      vim yarn-site.xml
    
      <property>
          <!--RM 服务器地址-->
          <name>yarn.resourcemanager.hostname</name>
          <value>hadoop103</value>
      </property>
       <property>
          <!--YARN 容器允许管理的物理内存大小-->
          <name>yarn.nodemanager.resource.memory-mb</name>
          <value>4096</value>
      </property>
      <property>
          <!--YARN 容器允许分配的最小物理内存-->
          <name>yarn.scheduler.minimum-allocation-mb</name>
          <value>512</value>
      </property>
      <property>
          <!--YARN 容器允许分配的最大物理内存-->
          <name>yarn.scheduler.maximum-allocation-mb</name>
          <value>4096</value>
      </property>
      <property>
          <!--关闭 YARN 对虚拟内存的限制检查-->
          <name>yarn.nodemanager.vmem-check-enabled</name>
          <value>false</value>
      </property>
       <property>
          <!--关闭 YARN 对物理内存的限制检查-->
          <name>yarn.nodemanager.pmem-check-enabled</name>
          <value>false</value>
      </property>
       <property>
          <!--任务每使用1MB物理内存,最多可使用虚拟内存量,默认是2.1-->
          <name>yarn.nodemanager.vmem-pmem-ratio</name>
          <value>5</value>
      </property>
      <property>
          <!--Reduce 获取数据的方式-->
          <name>yarn.nodemanager.aux-services</name>
          <value>mapreduce_shuffle</value>
      </property>
      <property>
          <!--配置聚合日志-->
          <!--日志默认放在本地,配置此项放在 HDFS 上方便直接在 HDFS 上查看-->
          <name>yarn.log-aggregation-enable</name>
          <value>true</value>
      </property>
      <property>
          <!--日志保留时间 second 7天~-->
          <name>yarn.log-aggregation.retain-seconds</name>
          <value>604800</value>
      </property>
      <property>
          <!--日志服务 web 地址-->
          <name>yarn.log.server.url</name>
          <value>http://hadoop102:19888/jobhistory/logs/</value>
      </property>
      <property>
          <!--虚拟内存的限制是否会执行容器-->
          <name>yarn.nodemanager.vmem-check-enabled</name>
          <value>false</value>
      </property>
    
  • 创建 slaves

    vi slaves
      
    hadoop102
    hadoop103
    hadoop104
    

3.3. 分发文件

  • 使用 xsync 分发

    xsync /usr/local/hadoop-3.1.3
    

3.4. 初始化

  • 在 hadoop102 上执行初始化命令

    hdfs namenode -format
    

3.5. 启动 HDFS

  • 在 hadoop102 上启动 hdfs
    start-dfs.sh
    
  • 在 hadoop102 上启动 yarn
    start-yarn.sh
    
  • 检查启动情况
    javapsall
      
    # 下面的提示标识启动成功
    xcall jps
    -------hadoop102------
    13586 DataNode
    13994 Jps
    13933 JobHistoryServer
    13455 NameNode
    -------hadoop102------
    13586 DataNode
    14009 Jps
    13933 JobHistoryServer
    13455 NameNode
    -------hadoop103------
    5040 Jps
    4703 NodeManager
    4575 ResourceManager
    -------hadoop104------
    3408 SecondaryNameNode
    3443 Jps
    

3.6. 群启群停

  • 群启

    start-all.sh
    
  • 群停

    stop-all.sh
    

4. Web UI

4.1. 安全组设置

4.2. 访问地址

  • hdfs
    • http://mater节点IP:9870/
  • yarn
    • http://ResourceManager节点IP:8088/