Hadoop集群搭建

一、模板虚拟机环境准备

1.配置网络

vi /etc/sysconfig/network-scripts/ifcfg-ens33
  1. 修改:BOOTPROTO=static
  2. 修改:ONBOOT=yes
  3. 添加:IPADDR=(自己的ip地址)
  4. 添加:GATEWAY=(自己的网关-注意:集群中所有网关要求一致,且和windows系统中网络设置中的网关相同)
  5. 添加:DNS1=114.114.114.114
  6. 添加:DNS2=8.8.8.8

重启network服务

systemctl restart network

测试网络是否可用

ping www.baidu.com

(ping 后加随意可联网的ip地址或域名即可)-- 网络可用,则可用在线安装插件(ctrl+C 退出网络测试回应界面)

使用Xshell软件连接虚拟机

2.创建用户

  1. 创建新用户
    useradd 用户名
  2. 设置新用户密码
    (回车后输入密码,需要输入2遍)
    passwd 用户名
  3. 设置用户使用root权限
    vi /etc/sudoers
    
    #在root		ALL=(ALL)	ALL 下添加
    用户名	ALL=(ALL)	NOPASSWD:ALL

3.安装插件

(1)使用Xshell软件连接虚拟机

xshell新建连接

1.注意画线部分:

        名称:主机名称

        主机:填写ip地址(若在系统中已配置好ip地址和主机名称,也可用主机名称)

        端口号:查看网络连接中自己的端口

2.点击左侧用户身份验证:        

        用户名:输入自己要登录的用户(上一步创建好的)

        密码:输入对应密码(上一步设置好的)

(2)安装插件

可在xshell中开启多个窗口同时操作其他指令

注意:需要有root权限(su root 或 sudo + 命令)

yum install -y epel-release net-tools vim
yum install -y psmisc nc rsync lrzsz ntp libzstd openssl-static tree iotop git

4.关闭防火墙

sudo systemctl stop firewalld
sudo systemctl disable firewalld

可以查看防火墙状态用以确认

systemctl status firewalld
systemctl is-enabled firewalld

5.创建目录

用来给用户操作的目录

(1)创建路径:/opt 下

sudo mkdir /opt/module
sudo mkdir /opt/software

(2)修改目录所属主和所属组

sudo chown 自定义的用户:自定义的组名 module software

6.修改主机名

sudo vi /etc/hostname

删除里面内容,加上自己起的主机名

注意:不要有任何空格和换行

7.修改hosts文件

(1)Linux系统中

sudo vi /etc/hosts

在文件中添加:

ip地址 别名

(2)windows系统中

修改路径为 C:\Windows\System32\drivers\etc 下的hosts文件

在文件中添加同上 ip地址和别名

8.安装jdk和hadoop

(1)传输

用Xftp软件连接到模板虚拟机,传输jdk的tar包和hadoop的tar包(.tar.gz)到 /opt/software目录下

(2)解压

分别解压安装包到 /opt/module目录下(2个都要解压)

cd /opt/software
tar -zxvf 文件名 -C 目标路径(/opt/module)

(3)配置环境变量

  1. 进入目录

    cd /etc/profile.d
  2. 创建环境变量配置文件
    sudo vim my_env.sh
  3. 在配置文件中添加内容
    #声明JAVA_HOME
    export JAVA_HOME=安装java的目录( /opt/module/jdk1.8.0_212 )
    
    #声明HADOOP_HOME
    export HADOOP_HOME=安装hadoop的目录 (/opt/module/hadoop-3.3.4)
    
    #将JAVA_HOME 和 HADOOP_HOME添加到path中
    export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  4. 使环境变量生效
    source /etc/profile.d/my_env.sh
  5. 测试
java -version
hadoop version

 二、集群搭建

 1.本地运行模式

  1. 在HADOOP_HOME目录下创建一个wcinput文件夹
    mkdir $HADOOP_HOME/wcinput
  2. 在wcinput文件夹下创建测试文件: test.txt
    vim test.txt
  3. 编辑文件
  4. 回到hadoop根目录执行程序
    hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar wordcount wcinput wcoutput
  5. 查看结果
    cat wcoutput/part-r-00000

2.搭建分布式模式-克隆

克隆另外2台虚拟机,用以搭建集群

注意:克隆前需要关机

(1)修改ip地址

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

(2)修改主机名

vim /etc/hostname

(3)在windows系统中修改hosts文件 

路径:

注意:修改ip后再用xshell连接

 3.编辑shell文件

为了使shall文件全局生效,选择写到已配好环境变量的路径中

  1. 进入目录:
    cd /home/用户名
  2. 创建bin目录
    mkdir bin
  3. 进入bin目录
    cd bin

(1)xsync--集体群发文件

  1. 创建shell文件
    vim xsync
  2. 编写
    #!/bin/bash
    
    #1. 判断参数个数
    if [ $# -lt 1 ]
    then
        echo Not Enough Arguement!
        exit;
    fi
    
    #2. 遍历集群所有机器
    for host in  主机名 主机名 主机名 
    #这里的主机名依次是自己配置的三个主机的名称
    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

    3.修改xsync脚本的执行权限

    chmod +x xsync

    4.将脚本复制到/bin中,以便全局调用

    sudo cp xsync /bin

(2)myhadoop--Hadoop集群启停脚本

  1. 创建shell脚本
    vim myhadoop
  2. 编写内容
    注意:将文件中主机名设置为自己具体配置的名字
    #!/bin/bash
    
    if [ $# -lt 1 ]
    then
        echo "No Args Input..."
        exit ;
    fi
    
    case $1 in
    "start")
            echo " ============= 启动 hadoop集群 ================"
    
            echo " --------------- 启动 hdfs ---------------"
            ssh NameNode所在节点的主机名 "/opt/module/hadoop-3.3.4/sbin/start-dfs.sh"
            echo " --------------- 启动 yarn ---------------"
            ssh ResourceManager所在节点的主机名 "/opt/module/hadoop-3.3.4/sbin/start-yarn.sh"
            echo " --------------- 启动 historyserver ---------------"
            ssh NameNode所在节点的主机名 "/opt/module/hadoop-3.3.4/bin/mapred --daemon start historyserver"
    ;;
    "stop")
            echo " ============== 关闭 hadoop集群 ================"
    
            echo " --------------- 关闭 historyserver ---------------"
            ssh NameNode所在节点的主机名 "/opt/module/hadoop-3.3.4/bin/mapred --daemon stop historyserver"
            echo " --------------- 关闭 yarn ---------------"
            ssh ResourceManager所在节点的主机名 "/opt/module/hadoop-3.3.4/sbin/stop-yarn.sh"
            echo " --------------- 关闭 hdfs ---------------"
            ssh NameNode所在节点的主机名 "/opt/module/hadoop-3.3.4/sbin/stop-dfs.sh"
    ;;
    *)
        echo "Input Args Error..."
    	;;
    esac
  3. 赋予执行权限
    chmod +x myhadoop
    注意:次脚本可不分发

 (3)jpsall--查看多台服务器进程脚本

  1. 创建shell脚本
    vim jpsll
  2. 编辑内容
    #!/bin/bash
    
    for host in hadoop102 hadoop103 hadoop104
    do
            echo =============== $host ===============
            ssh $host jps 
    done
  3. 赋予权限
    chmod +x jpsall

4.分发脚本

将写好的脚本分发到其他节点

xsync /home/用户/bin

5.ssh无密登录

(1)ssh语法:

登入另一台电脑

ssh 用户名@主机名/ip地址

 登出/退回

exit

(2)生成公钥和私钥

  1. 进入目标目录

    cd /home/用户名/.ssh
  2. 生成密钥

    ssh-keygen -t rsa
  3. 将公钥拷贝到要免密登录的目标机器

    ssh-copy-id 目标机名称

 备注:第一次分发时,需要都输入密码

(3)将用户su为root,再配置一次ssh密钥

cd /root/.ssh

注意:如果没有.ssh目录,需要运行一次ssh

每台服务器都需要配置2轮

6.修改配置文件

目录:HADOOP_HOME/etc/hadoop 目录下

cd $HADOOP_HOME/etc/hadoop

(1)core-site.xml

vim core-site.xml

添加: 

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

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

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

(2)vim hdfs-site.xml

vim hdfs-site.xml

添加:

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

(3)vim yarn-site.xml

vim yarn-site.xml

添加:

    <!-- 指定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>


    <!-- 开启日志聚集功能 -->
    <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>

(4)vim mapred-site.xml

vim mapred-site.xml

添加:

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

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

        <!-- 历史服务器端地址 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>hadoop102:10020</value>
    </property>

        <!-- 历史服务器web端地址 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop102:19888</value>
    </property>

(5)配置workers

vim workers

删除原来的lacalhost主机名

添加自己配置的服务器的主机

注意:不要有任何空格、换行

(6)分发配置文件

xsync $HADOOP_HOME/etc/hadoop

在其他集群打开查看,确认一遍是否分发完成

此时,结群基本搭建完成

7.集群时间同步配置

必须是root用户才可配置

su root

(1)查看所有节点ntpd服务状态和开机自启状态

sudo systemctl status ntpd
sudo systemctl start ntpd
sudo systemctl is-enabled ntpd

(2)将一台节点设置为时间服务器

1.关闭ntpd服务

sudo systemctl stop ntpd

2.修改配置文件

sudo vim /etc/ntp.conf

        ① #restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap
下添加:

restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap

        ② #注释掉Linux在互联网同步的其他时间

#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 127.127.1.0
fudge 127.127.1.0 stratum 10

3 修改配置文件

sudo vim /etc/sysconfig/ntpd

    增加内容

SYNC_HWCLOCK=yes

4. 启动ntpd服务

sudo systemctl start ntpd

5.设置ntpd开机启动

sudo systemctl enable ntpd

6.若时间服务器时间不对

sudo systemctl stop ntpd
sudo ntpate 时间服务器地址
sudo systemctl start ntpd

(3)配置其他节点根据当前节点时间同步

1.先连接到其他节点,在其他节点操作

2.关闭所有节点上ntpd服务和自启动

sudo systemctl stop ntpd
sudo systemctl disable ntpd

3.启动定时任务的服务

#编写定时任务:可自己根据需求设置更新时间的频率
#这里为每天2点更新一次
0 2 * * * sudo ntpdate 节点名(这里一定是设置好的被同步的节点)

4.启动

sudo systemctl start crond

8.启动集群

第一次启动

第一次启动集群,一定要在放置NameNode的节点格式化NameNdoe

命令:

hdfs namenode -format

注意:
格式化NameNode会产生新的集群id,导致NameNode和DataNode的集群id不一致。
若集群在运行过程中报错,需要重新格式化NameNode,一定要先停止namenode和datanode进程,并且删除所有机器的data和logs目录,然后进行格式化

各个模块分别启动、停止

1.整体启动、停止HDFS

在配置了NameNode的节点

​
start-dfs.sh

​stop-dfs.sh
2.整体启动、停止yarn

在配置了ResourceManager的节点

start-yarn.sh
stop-yarn.sh

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

1.分别启动、停止HDFS组件
 

 (1)NameNode:   

hdfs --daemon start namenode
hdfs --daemon stop namenode

(2)DataNode

hdfs --daemon start datanode
hdfs --daemon stop datanode

(3)SecondaryNameNode

hdfs --daenon start secondarynamenode
hdfs --daemon stop secondarynamenode
2.分别启动、停止YARN组件 

(1)ResourceManager

yarn --daemon start resourcemanager
yarn --daemon srop resourcemanager

(2) NodeManager

yarn --daemon start nodemanager
yarn --daemon stop nademanager

 (3)分别启动、停止HistoryManager

mapred --daemon start historyserver
mapred --daemon stop historyserver

集群集体启停

配置好的myhadoop脚本,配置好环境变量,即可一次启动

  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值