美文网首页大数据
Hadoop 环境部署

Hadoop 环境部署

作者: 今日开发技巧分享 | 来源:发表于2019-08-07 17:45 被阅读0次

    Hadoop 集群部署

    一、 虚拟机准备

    1.1 安装 centos7

    1.2 系统环境设置

    1.2.1 网络设置

    设置静态IP

    vi /etc/sysconfig/network-scripts/ifcfg-ens33
    

    修改结果

    TYPE=Ethernet
    #PROXY_METHOD=none
    #BROWSER_ONLY=no
    BOOTPROTO=static
    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=39738e52-0a98-4ed4-8db1-971b2b90584c
    DEVICE=ens33
    ONBOOT=yes
    IPADDR=192.168.63.101
    NETMASK=255.255.255.0
    GATEWAY=192.168.63.2
    DNS1=114.114.114.114
    

    重启网络服务

    systemctl restart network
    

    1.2.2 主机名设置

    设置注解名

    hostnamectl set-hostname hadoop101
    

    1.2.3 关闭防火墙

    查看放防火墙状态

    systemctl status firewalld.service
    

    关闭防火墙(临时,重启后失效)

    systemctl stop firewalld
    

    禁用防火墙

    systemctl disable firewalld
    

    查看防火墙是否开机自启

    chkconfig --list|grep network(RHLE6)
    

    开启防火墙(临时)

    systemctl start firewalld
    

    启动防火墙

    systemctl enable firewalld
    

    1.2.4 修改hosts 文件

    vim /etc/hosts
    

    在里面追加

    192.168.63.101 hadoop01
    192.168.63.102 hadoop02
    192.168.63.103 hadoop03
    192.168.63.104 hadoop04
    

    注意:IP 跟自己设置的静态IP地址一致

    二、JDK 安装

    OS:Centos7

    java:jdk1.8.0_211

    进入Linux 系统,在opt 目录下创建 software\module 两个文件夹

    cd /opt
    mkdir software
    mkdir module
    

    通过ftp工具将从Oracle下载的jdk tar 包上传至software文件夹下。

    上传JDK.jpg

    进入到/opt/software 文件夹中,将jdk解压缩至/opt/module文件夹

    cd /opt/software
    tar -zxvf jdk-8u211-linux-x64.tar.gz -C /opt/module
    

    解压完成后,进入到module,将JDK解压的目录copy一下

    cd /opt/module
    pwd
    

    配置JDK环境变量

    vi /etc/profile
    

    在文件的最后,添加JAVA_HOME


    JDK环境设置.jpg
    ## JAVA_HOME
    export JAVA_HOME=/opt/module/jdk1.8.0_211
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export PATH=$PATH:$JAVA_HOME/bin
    

    刷新配置文件

    source /etc/profile
    

    查看JDK是否安装成功

    java -version
    

    如果出现以下内容,说明JDK安装成功


    JDK校验.jpg

    三、Hadoop集群 安装

    3.1 准备4个虚拟机节点

    通过VMware克隆出4个服务器节点


    vm克隆-1.png vm克隆-2.jpg vm克隆-3.jpg vm克隆-4.jpg vm克隆-5.jpg vm克隆-6.jpg

    3.1.2 环境配置

    请参考第一章 1.2 节。

    3.1 上传hadoop 安装包

    通过FTP工具,将hadoop 安装包上传到其中一台服务器(63.101)的 /opt/software 目录下

    3.2 安装hadoop

    version : hadoop-2.7.7

    3.2.1 解压hadoop 安装包

    将hadoop 安装包解压到 /opt/module 目录下

    cd /opt/software
    tar -zxvf hadoop-2.7.7.tar.gz -C /opt/module
    

    3.2.2 配置hadoop 环境变量

    在 /etc/profile 文件的后面追加Hadoop的环境变量

    vi /etc/profile
    

    追加内容

    export HADOOP_HOME=/opt/module/hadoop-2.7.7
    export PATH=$PATH:$HADOOP_HOME/bin
    export PATH=$PATH:$HADOOP_HOME/sbin
    
    hadoop环境配置.jpg

    刷新配置

    source /etc/profile
    

    校验配置是否生效


    hadoop环境校验.jpg

    3.2.3 资源同步

    使用 rsync 命令将101服务器的software、module 同步到其他节点

    rsync    -rvl       $pdir/$fname              $user@hadoop$host:$pdir/$fname
    命令   选项参数   要拷贝的文件路径/名称    目的用户@主机:目的路径/名称
    

    将 module目录同步到其他节点

    rsync -rvl /opt/module root@hadoop02:/opt/module
    rsync -rvl /opt/module root@hadoop03:/opt/module
    rsync -rvl /opt/module root@hadoop04:/opt/module
    

    将 /etc/profile 文件同步到其他节点(会覆盖)

    rsync -rvl /etc/profile root@hadoop02:/etc/profile
    rsync -rvl /etc/profile root@hadoop03:/etc/profile
    rsync -rvl /etc/profile root@hadoop04:/etc/profile
    

    注意:如果在同步的过程中,出现无法识别hadoop02 server,请参考:1.2.4 章节修改 hosts 文件。

    3.2.3 编写集群配置分发脚本

    因为是多个节点,为了减少配置错误,编写一个rsync 的脚本,目的是为了实现,在一个节点上修改了配置,执行该脚本分发到其他节点。

    在 /usr/local 目录下创建 bin 目录

    cd /usr/local
    mkdir bin
    

    在bin 目录下 创建hdxsync 文件

    touch hdxsync
    

    编写脚本

    vim hdxsync
    

    脚本内容

    #!/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=3; host<5; host++)); do
            echo ------------------- hadoop$host --------------
            rsync -rvl $pdir/$fname $user@hadoop0$host:$pdir
    done
    

    修改脚本具有执行权限

    chmod 777 hdxsync
    

    3.3 集群配置

    部署规划

    hadoop02 hadoop03 hadoop04
    HDFS NameNode/DataNode DataNode SecondaryNameNode/DataNode
    YARN NodeManager NodeManager/ResourceManager NodeManager

    3.3.1 配置集群

    文件所在位置:/opt/module/hadoop-2.7.7/etc/hadoop

    所有的xml 文件配置,都必须在 <configuration></configuration> 标签中

    • 核心配置文件 core-site.xml
    • HDFS 配置文件 hadoop-env.sh、hdfs-site.xml
    • YARN 配置文件 yarn-env.sh、yarn-seite.xml
    • MapReduce 配置文件 mapred-env.sh、mapred-site.xml
    3.3.1.1 核心配置文件 core-site.xml
    cd /opt/module/hadoop-2.7.7/etc/hadoop
    vim core-site.xml
    

    在文件中,编写如下配置

    <!-- 指定HDFS中NameNode的地址 -->
    <property>
            <name>fs.defaultFS</name>
          <value>hdfs://hadoop02:9000</value>
    </property>
    
    <!-- 指定Hadoop运行时产生文件的存储目录 -->
    <property>
            <name>hadoop.tmp.dir</name>
            <value>/opt/module/hadoop-2.7.7/data/tmp</value>
    </property>
    
    3.3.1.2 配置HDFS

    配置 hadoop-env.sh

    vim hadoop-env.sh
    

    修改JAVA_HOME


    修改hadoop-env.jpg

    配置 hdfs-site.xml 文件

    vim hdfs-site.xml
    

    在该配置中,配置如下内容

    <!-- 指定Hadoop副本数量,默认:3 -->
    <property>
            <name>dfs.replication</name>
            <value>3</value>
    </property>
    
    <!-- 指定Hadoop辅助名称节点主机配置 -->
    <property>
          <name>dfs.namenode.secondary.http-address</name>
          <value>hadoop04:50090</value>
    </property>
    <!-- 指定namenode的数据存放位置 -->
    <property>
          <name>dfs.namenode.name.dir</name>
          <value>file:///opt/module/hadoop-2.7.7/data/dfs/name</value>
    </property>
    <!-- 指定datanode的数据存放位置 -->
    <property>
          <name>dfs.datanode.data.dir</name>
          <value>file:///opt/module/hadoop-2.7.7/data/dfs/data</value>
    </property>
    
    3.3.1.3 YARN 配置

    配置 yarn-env.sh

    vim yarn-env.sh
    

    修改JAVA_HOME配置


    修改hadoop-env.jpg

    配置 yarn-site.xml

    vim yarn-site.xml
    

    在配置中,增加以下内容

    <!-- Reducer获取数据的方式 -->
    <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
    </property>
    
    <!-- 指定YARN的ResourceManager的地址 -->
    <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>hadoop03</value>
    </property>
    
    3.1.3.4 MapReduce配置文件

    配置mapred-env.sh

    vim mapred-env.sh
    

    修改JAVA_HOME


    mapred-env修改.jpg

    配置mapred-site.xml

    cp mapred-site.xml.template mapred-site.xml
    vim mapred-site.xml
    

    在配置中,写入以下配置

    <!-- 指定MR运行在Yarn上 -->
    <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
    </property>
    

    将配置分发到其他节点

    hdxrsync /opt/module/hadoop-2.7.7/etc/hadoop/
    

    到这里,所有的配置都配置完成了,就等着启动了···

    3.1.2 集群单节点启动

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

    格式化namenode

    hadoop namenode -format
    

    在 102 上面启动 namenode

    hadoop-daemon.sh start namenode
    

    查看启动进程

    [root@hadoop102 hadoop-2.7.7]# jps
    7299 NameNode
    7339 Jps
    [root@hadoop102 hadoop-2.7.7]#
    

    在 102、103、104 上分别启动DataNode

    3.1.3 给服务器配置SSH免密登录

    需要在 hadoop02 上配置SSH,因为hadoop02节点我们部署了NameNode,需要对其他节点进行分发;

    同时需要在 hadoop03上配置SSH,因为hadoop03部署了ResouceManager ,需要对其他节点的资源进行归纳。

    生成公钥(id_rsa.pub)、私钥(id_rsa)

    cd 
    cd .ssh
    ssh-keygen -t rsa
    

    生成结果

    [root@hadoop102 .ssh]# ll
    total 12
    -rw------- 1 root root 1679 Aug  8 02:32 id_rsa
    -rw-r--r-- 1 root root  396 Aug  8 02:32 id_rsa.pub
    -rw-r--r-- 1 root root  370 Aug  7 05:26 known_hosts
    [root@hadoop102 .ssh]# 
    

    将公钥(rsa.pub)拷贝到其他服务器节点及自己本身

    ssh-copy-id hadoop03
    ssh-copy-id hadoop04
    ssh-copy-id hadoop02
    

    查看结果

    [root@hadoop102 .ssh]# ll
    total 16
    -rw------- 1 root root  396 Aug  8 02:35 authorized_keys
    -rw------- 1 root root 1679 Aug  8 02:32 id_rsa
    -rw-r--r-- 1 root root  396 Aug  8 02:32 id_rsa.pub
    -rw-r--r-- 1 root root  555 Aug  8 02:35 known_hosts
    [root@hadoop102 .ssh]# 
    

    免密登录校验

    [root@hadoop102 .ssh]# ssh hadoop03
    Last failed login: Thu Aug  8 02:34:24 EDT 2019 from hadoop02 on ssh:notty
    There was 1 failed login attempt since the last successful login.
    Last login: Wed Aug  7 22:06:37 2019 from 192.168.63.1
    [root@hadoop03 ~]# 
    

    3.1.4 群启集群

    根据我们的集群部署规划去启动
    注:如果按照上面的步骤,需要先停止集群。

    停止Hadoop服务

    hadoop-daemon.sh stop namenode
    hadoop-daemon.sh stop datanode
    

    配置集群slaves
    文件位置:/opt/module/hadoop-2.7.7/etc/hadoop/slaves

    在102上配置slaves(不能有空格/空行)

    vim /opt/module/hadoop-2.7.7/etc/hadoop/slaves
    

    同步配置到各个服务节点

    hdxsync /opt/module/hadoop-2.7.7/etc/hadoop/slaves
    

    查看配置

    [root@hadoop03 ~]# less /opt/module/hadoop-2.7.7/etc/hadoop/slaves 
    hadoop02
    hadoop03
    hadoop04
    
    3.1.4.1 启动HDFS

    启动HDFS,必须在NameNode的节点上启动

    [root@hadoop102 hadoop-2.7.7]# sbin/start-dfs.sh 
    Starting namenodes on [hadoop02]
    hadoop02: starting namenode, logging to /opt/module/hadoop-2.7.7/logs/hadoop-root-namenode-hadoop102.out
    hadoop04: starting datanode, logging to /opt/module/hadoop-2.7.7/logs/hadoop-root-datanode-hadoop04.out
    hadoop03: starting datanode, logging to /opt/module/hadoop-2.7.7/logs/hadoop-root-datanode-hadoop03.out
    hadoop02: starting datanode, logging to /opt/module/hadoop-2.7.7/logs/hadoop-root-datanode-hadoop102.out
    Starting secondary namenodes [hadoop04]
    hadoop04: starting secondarynamenode, logging to /opt/module/hadoop-2.7.7/logs/hadoop-root-secondarynamenode-hadoop04.out
    [root@hadoop102 hadoop-2.7.7]# 
    
    3.1.4.2 启动Yarn

    必须是在 ResouceManager 的节点上进行启动
    103 上面启动Yarn

    [root@hadoop03 hadoop-2.7.7]# sbin/start-yarn.sh 
    starting yarn daemons
    starting resourcemanager, logging to /opt/module/hadoop-2.7.7/logs/yarn-root-resourcemanager-hadoop03.out
    hadoop02: starting nodemanager, logging to /opt/module/hadoop-2.7.7/logs/yarn-root-nodemanager-hadoop102.out
    hadoop04: starting nodemanager, logging to /opt/module/hadoop-2.7.7/logs/yarn-root-nodemanager-hadoop04.out
    hadoop03: starting nodemanager, logging to /opt/module/hadoop-2.7.7/logs/yarn-root-nodemanager-hadoop03.out
    [root@hadoop03 hadoop-2.7.7]# jps
    8147 ResourceManager
    8243 NodeManager
    8022 DataNode
    8396 Jps
    [root@hadoop03 hadoop-2.7.7]#
    
    3.1.4.3 校验集群启动情况

    Web端查看SecondaryNameNode
    浏览器中输入:<u>http://hadoop04:50090/status.html</u>

    SecondaryNameNode.png

    3.1.5 集群启/停

    3.1.5.1 各个服务组件逐一启动/停止

    分别启动/停止HDFS组件

      hadoop-daemon.sh  start / stop  namenode / datanode / secondarynamenode
    

    启动/停止YARN

      yarn-daemon.sh  start / stop  resourcemanager / nodemanager
    
    3.1.5.2 各个模块分开启动/停止(配置ssh是前提)常用

    整体启动/停止HDFS

    start-dfs.sh   /  stop-dfs.sh
    

    整体启动/停止YARN

        start-yarn.sh  /  stop-yarn.sh
    

    3.2 集群服务器间时间同步

    集群部署,为了减少集群间因时间不同步而导致任务不执行或者延迟执行,需要对各个节点的时间进行同步。

    选一台服务器作为标准的时间服务器,其他节点服务器,定时每10分钟去这台标准时间服务器上面获取时间,然后更新自己的时间,从而达到各个节点的时间都一只。

    3.2.1 安装ntp服务,并修改相关配置

    检查服务器是否安装了ntp服务

    [root@hadoop102 ~]# rpm -qa |grep ntp
    ntpdate-4.2.6p5-28.el7.centos.x86_64
    ntp-4.2.6p5-28.el7.centos.x86_64
    [root@hadoop102 ~]# 
    

    如果没安装,请安装ntp服务

    yum -y install ntp
    

    修改ntp配置文件

    vim /etc/ntp.conf
    

    修改内容如下

    a)修改1(授权192.168.63.0-192.168.63.255网段上的所有机器可以从这台机器上查询和同步时间)
    #restrict 192.168.63.0 mask 255.255.255.0 nomodify notrap为
    restrict 192.168.63.0 mask 255.255.255.0 nomodify notrap
            b)修改2(集群在局域网中,不使用其他互联网上的时间)
    server 0.centos.pool.ntp.org iburst
    server 1.centos.pool.ntp.org iburst
    server 2.centos.pool.ntp.org iburst
    server 3.centos.pool.ntp.org iburst为
    #server 0.centos.pool.ntp.org iburst
    #server 1.centos.pool.ntp.org iburst
    #server 2.centos.pool.ntp.org iburst
    #server 3.centos.pool.ntp.org iburst
    c)添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)
    server 127.127.1.0
    fudge 127.127.1.0 stratum 10
    

    修改/etc/sysconfig/ntpd 文件
    增加内容如下(让硬件时间与系统时间一起同步)

    SYNC_HWCLOCK=yes
    

    重新启动ntpd服务
    查看ntpd服务状态

    service ntpd status
    

    ntpd 已停

    service ntpd start
    

    设置ntpd服务开机启动

    chkconfig ntpd on
    

    3.2.2 其他配置(必须是root用户)

    在其他机器配置10分钟与时间服务器同步一次

    crontab -e
    

    编写定时任务如下

    编写定时任务如下:
    */10 * * * * /usr/sbin/ntpdate hadoop03
    

    修改任意机器时间

    date -s "2018-9-11 11:11:11"
    

    十分钟后查看机器是否与时间服务器同步

    date
    

    注:测试时,可调整为每1分钟同步一次时间,快速验证

    相关文章

      网友评论

        本文标题:Hadoop 环境部署

        本文链接:https://www.haomeiwen.com/subject/isnndctx.html