Hadoop环境搭建

  • 仅是个人学习记录,内容来源尚硅谷大学

1、Hadoop是什么

  • Hadoop是一个由Apache基金会所开发的分布式系统基础框架。主要解决,海量数据的存储和海量数据的分析计算问题。广义上来说,Hadoop通常是指一个更广泛的概念——Hadoop生态圈

2、Hadoop优势

  • 高可靠性:Hadoop底层维和多个数据副本,所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失。

  • 高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点。

  • 高效性:在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度。

  • 高容错性:能够自动将失败的任务重新分配。

3、Hadoop组成

Hadoop1.x

  • MapReduce:负责计算资源调度
  • HDFS:负责数据存储
  • Common:辅助工具

Hadoop2.x

  • MapReduce:负责计算
  • Yarn:负责资源调度
  • HDFS:负责数据存储
  • Common:辅助工具

Hadoop1.x中的MapReduce同时处理业务逻辑运算和资源的调度,耦合性较大。

在Hadoop2.x中新增了Yarn。Yarn只负责资源的调度。

Hadoop3.x在组成上没有变化。

4、Hadoop运行环境的搭建

  1. 安装模板虚拟机hadoop100,使用CentOS7(采用最小化安装)

  2. 进入系统后先安装net-tools和vim和epel-release

    yum -y install net-tools

    yum -y install vim

    yum -y install epel-release

  3. 关闭防火墙,关闭防火墙开机自启

    systemctl stop firewalld
    systemctl disable firewalld.service
    
  4. 创建用户tomato,并修改密码

    useradd tomato
    passed 955955
    
  5. 配置tomato用户具有root权限,方便后期sudo执行root权限的命令

    vim /etc/sudoers

    修改文件,在%wheel这行下面添加一行,如下

    ## Allow root to run any commands anywhere
    root    ALL=(ALL)     ALL
    
    ## Allows people in group wheel to run all commands
    %wheel  ALL=(ALL)       ALL
    atguigu   ALL=(ALL)     NOPASSWD:ALL
    
  6. 在/opt目录下创建module、software文件夹

  7. 将文件夹所有者和所属组改为tomato用户

    chown tomato:tomato /opt/module
    chown tomato:tomato /opt/software
    
  8. 重启虚拟机

5、克隆虚拟机

  1. 克隆三台虚拟机:hadoop102,hadoop103,hadoop104

    • 修改克隆机IP

      vim /etc/sysconfig/network-scripts/ifcfg-ens33
      改成
      DEVICE=ens33
      TYPE=Ethernet
      ONBOOT=yes
      BOOTPROTO=static
      NAME="ens33"
      IPADDR=192.168.50.102
      PREFIX=24
      GATEWAY=192.168.50.2
      DNS1=192.168.50.2
      
    • 更改Linux虚拟机的虚拟网络编辑器,更改VMnet8类型为NAT模式,子网IP网段和DNS和网关与虚拟机IP一致,同时修改Windows系统中VMnet8的IP地址,与上述一致,保证三部分的地址是相同的。

  2. 修改主机名(hostname),主机映射(hosts),重启虚拟机。同时修改windows的主机映射文件,C:\Windows\System32\drivers\etc 内容如下

    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
    192.168.10.105 hadoop105
    192.168.10.106 hadoop106
    192.168.10.107 hadoop107
    192.168.10.108 hadoop108
    
  3. 将JDK和Hadoop软件包导入/opt/software/下,解压

    tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/

    1. 配置JDK环境变量
    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
    
    测试是否安装成功
    java -version
    
    1. 解压Hadoop

      tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/

    2. 配置环境变量

      sudo /etc/prifile.d/my_env.sh
      
      末尾添加(shift+g)
      #HADOOP_HOME
      export HADOOP_HOME=/opt/module/hadoop-3.1.3
      export PATH=$PATH:$HADOOP_HOME/bin
      export PATH=$PATH:$HADOOP_HOME/sbin
      
      测试hadoop
      hadoop version
      
  4. Hadoop的目录结构

    (1)bin目录:存放对Hadoop相关服务(hdfs,yarn,mapred)进行操作的脚本

    (2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件

    (3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)

    (4)sbin目录:存放启动或停止Hadoop相关服务的脚本

    (5)share目录:存放Hadoop的依赖jar包、文档、和官方案例

6、完全分布式运行模式搭建

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

​ 2)安装JDK

​ 3)配置环境变量

​ 4)安装Hadoop

​ 5)配置环境变量

6)配置集群

7)单点启动

7)配置ssh

9)群起并测试集群

  1. 编辑集群分发脚本xsync

    • 在tomato用户目录下创建bin目录,/home/tomato/bin/,创建脚本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 777 xsync

  2. 配置SSH无密登陆配置

    • 进入目录 cd /home/tomato/.ssh

    • 生成公钥和密钥

      ssh-keygen -t rsa

      三下回车

    • 将公钥拷贝到要免密登录的目标机器上

      ssh-copy-id hadoop102
      ssh-copy-id hadoop103
      ssh-copy-id hadoop104
      
      • 注意:还需要在hadoop103和hadoop104采用tomato账号配置到hadoop102、hadoop103、hadoop104服务器上
      • 还需要在hadoop102上用root账号配置一遍
  3. 用xsync将hadoop102上的配置文件(/etc/profile.d/my_env.sh)、软件目录/opt/module/和xsync分发脚本,分别分发到hadoop103,hadoop104上,并让环境变量生效。

    source /etc/profile

7、集群配置

  1. 集群部署规划

注意:

  • NameNode和SecondaryNameNode不要安装在同一台服务器
  • ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。
hadoop 102 hadoop103 hadoop104
HDFS NameNode
DataNode
DataNode SecondaryNameNode
DataNode
YARN NodeManager ResourceManager
NodeManager
NodeManager
  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
    • 自定义配置文件

    core-site.xml、hdfs-site.xml、yarn-site.xmlmapred-site.xml

  2. 配置文件

    • 配置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>atguigu</value>
          </property>
      </configuration>
      
    • 配置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>
      
    • 配置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>
      
    • 配置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>
      
    • 并将上述所有文件分发到其他服务器

      xsync $HADOOP_HOME$/etc/hadoop/

    • 到此,集群可以正常的运行,但为了查看程序的历史运行情况,还需要配置一下历史服务器。

    • 配置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>
      
    • 开启日志聚集:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。

    • 配置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 $HADOOP_HOME$/etc/hadoop/

  3. 启动集群

    • 初始化NameNode节点

      hdfs namenode -format

    • 在hadoop102上启动HDFS

      sbin/start-dfs.sh

    • 在配置了ResourceManager的节点hadoop103上启动YARN

      sbin/start-yarn.sh

    • 可以使用jps查看节点运行状态

  4. 在Web端可以查看HDFS的NameNode

  5. 查看YARN的ResourceManager

  6. 测试集群

    • 上传文件

      fs -mkdir /input
      
      hadoop fs -put /opt/software/jdk-8u212-linux-x64.tar.gz /input
      
    • 磁盘存储位置

      /opt/module/hadoop-3.1.3/data/dfs/data/current/BP-1436128598-192.168.10.102-1610603650062/current/finalized/subdir0/subdir0
      
  7. 配置集群启停脚本

    cd /home/tomato/bin
    
    vim myhadoop.sh
    
    
    • 脚本如下
    #!/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

  8. 配置查看三台服务器Java进程的脚本:jpsall

    vim jpsall

    #!/bin/bash
    
    for host in hadoop102 hadoop103 hadoop104
    do
            echo =============== $host ===============
            ssh $host jps 
    done
    
    • 更改权限后,分发脚本

    xsync /home/atguigu/bin/

8、常用端口号说明

端口名称 Hadoop2.x Hadoop3.x
NameNode内部通信端口 8020 / 9000 8020 / 9000/9820
NameNode HTTP UI 50070 9870
MapReduce查看执行任务端口 8088 8088
历史服务器通信端口 19888 19888
posted @ 2021-09-10 19:28  Yuutmoo  阅读(80)  评论(0)    收藏  举报