用三台虚拟机搭建Hadoop分布式集群——准备工作

本文详细介绍了如何在 CentOS 7 虚拟机上为 Hadoop 集群做准备工作,包括设置静态 IP、Mac 地址,关闭防火墙和 SeLinux,配置 JDK,安装 MySQL,以及增强 Shell 编程能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

准备工作

1. 虚拟机修改Mac和IP(CentOS7)
1.1 集群规划
IP主机名环境配置安装
192.168.217.100node01关防火墙和seLinux,host映射,时钟同步JDK,NameNode,ResourceManager,Zookeeper
192.168.217.110node02关防火墙和seLinux,host映射,时钟同步JDK,DataNode,NodeManager,Zookeeper
192.168.217.120node03关防火墙和seLinux,host映射,时钟同步JDK,DataNode,NodeManager,Zookeeper
1.2 设置静态ip和Mac地址

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

参数设置如下

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static #静态IP
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=efb90b5a-671d-4ee0-8ec3-bed9fb75cd4d
DEVICE=ens33
HWADDR=00:0C:29:BC:61:3F #Mac地址
ONBOOT=yes
IPADDR=192.168.217.100 #IP地址
PREFIX=24 #子网掩码
GATEWAY=192.168.217.2 #网关
DNS1=8.8.8.8 #DNS服务器

其中Mac地址在Vmvare设置->网络(NAT)->高级中点击生成,每个节点独一无二。

每个虚拟机修改主机名:

[root@localhost ~]# vim /etc/hostname

每个虚拟机设置IP和域名映射

[root@localhost ~]# vim /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.217.100 node01 node01.hadoop.com
192.168.217.110 node02 node02.hadoop.com
192.168.217.120 node03 node03.hadoop.com

修改之后重启或systemctl restart network

2. 关闭防火墙和SeLinux

关闭防火墙

[root@localhost ~]# systemctl stop firewalld #关闭防火墙

[root@localhost ~]# systemctl disable firewalld #设置开机禁止启动

关闭SELinux(安全子模式,控制进程的行为)

[root@localhost ~]# vim /etc/selinux/config

改为disabled

SELINUX=disabled

  • enforcing 强制模式(制止违反规则的行为并记录到日志)
  • permissive 宽容模式(不制止,记录到日志)
  • disable 关闭
3.虚拟机免密码登录
  • 第一步,生成公钥和私钥

三台机器上执行

ssh-keygen -t rsa

三次回车生成公钥和私钥到/root/.ssh/目录

  • 第二步,拷贝公钥到同一台机器上

三台机器上都执行

ssh-copy-id node01

可以在/root/.ssh/authorized_keys中看到拷贝的公钥

复制包含三台机器公钥的authorized_keys到另两台机器,在第一台机器上执行

scp /root/.ssh/authorized_keys node02:/root/.ssh/

scp /root/.ssh/authorized_keys node03:/root/.ssh/

4.三台机器时钟同步

为什么需要时钟同步

  • 因为很多分布式系统是有状态的,比如存一个数据,A节点记录的时间和B节点应该一样

方式1

所有主机和同一台主机的时间保持同步

方式2

通过网络,所有主机和时钟同步服务器保持同步

采用第二种,安装ntp

[root@localhost ~]# yum install -y ntp

创建定时任务

[root@localhost ~]# crontab -e

输入

*/1 * * * * /usr/sbin/ntpdate ntp4.aliyun.com

即每隔1分钟执行后面的命令同步一次

5.安装JDK

卸载之前的java的rpm包

[root@localhost ~]# rpm -qa | grep java #查询

[root@localhost ~]# rpm -e 包名1 包名2 … --nodeps #删除

创建安装目录

[root@localhost ~]# mkdir -p /export/softwares #软件包存放目录
[root@localhost ~]# mkdir -p /export/servers #安装目录

上传(拖拽或者使用rz命令)并解压

[root@node01 ~]# cd /export/softwares/
[root@node01 softwares]# tar zvxf jdk-8u261-linux-x64.tar.gz -C …/servers/

修改配置文件,添加环境变量

[root@node01 servers]# vim /etc/profile

添加

export JAVA_HOME=/export/servers/jdk1.8.0_261
export PATH=$JAVA_HOME/bin:$PATH

使配置的环境变量生效

[root@node01 ~]# source /etc/profile
[root@node01 ~]# java -version
java version “1.8.0_261”
Java™ SE Runtime Environment (build 1.8.0_261-b12)
Java HotSpot™ 64-Bit Server VM (build 25.261-b12, mixed mode)

远程拷贝jdk到另两台主机

[root@node01 servers]# scp -r jdk1.8.0_261/ node03:/export/servers

同样的方式配置环境变量即可

关闭邮箱提醒(执行命令会提示You have new mail in /var/spool/mail/root),在/etc/profile中添加

unset MAILCHECK

6.安装MySQL

**第一步:**在线安装mysql相关软件包

[root@node03 ~]# yum install -y mysql mysql-server mysql-devel

**第二步:**启动mysql的服务

[root@node03 ~]# systemctl start mysqld

**第三步:**通过mysql自带脚本进行设置

[root@node03 ~]# /usr/bin/mysql_secure_installation

**第四步:**进入mysql的客户端进行授权

mysql> grant all privileges on . to ‘root’@’%’ identified by ‘123456’ with grant option;
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

No package mysql-server available解决办法

[root@node03 ~]# wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm

[root@node03 ~]# rpm -ivh mysql-community-release-el7-5.noarch.rpm

再进行安装即可

7.Shell编程增强

Shell编程一般指编写Shell脚本

  1. 基本语法

    使用vi编辑器新建一个文件hello.sh

    #!/bin/bash
    echo "Hello World!"
    

    执行方式

    方式1:

    [root@node01 shells]# sh hello.sh 
    

    方式2:

    [root@node01 shells]# chmod +x hello.sh
    [root@node01 shells]# ./hello.sh 
    
  2. 变量

    局部变量

    #!/bin/bash
    str="hello"
    echo ${str}world
    

    环境变量

    echo $PATH

    echo $HOME

    在/etc/profile中添加export 变量名=变量值即可,多个值用":"分开。

  3. 特殊字符

    $#传递到脚本的参数个数
    $*以一个单字符串显示所有向脚本传递的参数
    $$脚本运行的当前进程的ID号
    $!后台运行的最后一个进程的ID号
    $@与$*相同,但是使用时加引号,并在引号中返回每个参数
    $?显示最后命令的退出状态,0表示没有错误,其他任何值表示有错误
    #!/bin/bash
    echo "第一个参数为:$1"
    echo "参数个数为:$#"
    echo "传递的参数以一个字符串显示:$*"
    
    [root@node01 shells]# sh demo.sh aaa bbb ccc
    第一个参数为:aaa
    参数个数为:3
    传递的参数以一个字符串显示:aaa bbb ccc
    
  4. 运算符

    #!/bin/bash
    a=1
    b=2
    echo `expr $a + $b`
    echo $((a+b))
    echo $[a+b]
    echo `expr $a \* $b` #转义
    echo $[a*b]
    
  5. if语句

    #!/bin/bash
    read -p "please input your name:" NAME #从控制台读入并存放到name中
    if [ $NAME = root ]  #注意中括号内的空格
    then
    echo "hello ${NAME}, welcome!"
    elif [ $NAME = itcast ]
    then
    echo "hello ${NAME}, welcome!"
    else
    echo "Get out please!"
    fi
    
  6. for语句

    方式1:

    #!/bin/bash
    for n in 1 2 3
    do
    echo $n
    done
    

    方式2:

    for ((i=0;i<5;i++))
    do
    echo "welcome $i"
    done
    
  7. 函数

    #!/bin/bash
    sum(){
    echo "please enter the first number:"
    read a
    echo "please enter the second number:"
    read b
    echo "The two numbers are $a and $b."
    return $(($a+$b))
    }
    sum
    echo "The sum is $?."
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值