Hadoop集群搭建操作指南

快速搭建Hadoop集群指南

准备工作

  1. VMware Workstation 15 中安装虚拟机 ,版本为centos6.8(我搭建的集群为三台,安装一台克隆两台,)简单的使用三个节点作为集群环境: 一个作为 Master 节点,局域网 IP 为 192.168.1.100;另外两个作为 Slave 节点,局域网 IP 为 192.168.1.101和192.168.1.102。
  2. JDK1.8
  3. hadoop2.7.2

在这里插入图片描述

准备一台初始化好的主机

在搭建集群之前,需要先准备一台设置了静态网络以及进行了其他配置的主机,方便后面克隆。在这里,我在配置好的主机上加上快照,再通过克隆可以搭建好整个集群。

设置静态IP

1. 查看网络IP和网关

查看虚拟网络编辑器,如下:

在这里插入图片描述

修改ip地址为192.168.1.0,如图所示:

在这里插入图片描述

查看网关,如图所示(192.168.1.2):

在这里插入图片描述

查看windows环境的中VMnet8网络配置,如图所示:

在这里插入图片描述

2. 配置网络ip地址

修改IP地址,如图所示:

命令:

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

在这里插入图片描述

DEVICE=eth0                #接口名(设备,网卡)
HWADDR=00:0C:2x:6x:0x:xx   #MAC地址 
TYPE=Ethernet               #网络类型(通常是Ethemet)
UUID=926a57ba-92c6-4231-bacb-f27e5e6a9f44  #随机id
#系统启动的时候网络接口是否有效(yes/no)
ONBOOT=yes                
# IP的配置方法[none|static|bootp|dhcp](引导时不使用协议|静态分配IP|BOOTP协议|DHCP协议)
BOOTPROTO=static      
#IP地址
IPADDR=192.168.1.100   
#网关  
GATEWAY=192.168.1.2      
#域名解析器
DNS1=192.168.1.2

IP修改后:

在这里插入图片描述

:wq 保存退出

修改了IP地址为静态的192.168.100后,需要通过重启网络服务或重启机器使之生效

执行

service network restart

如图所示:

在这里插入图片描述

如果报错,reboot,重启虚拟机

3. 配置主机名
查看当前服务器主机名称
[root@hadoop100 桌面]$ hostname
修改主机名称
1. 修改linux的主机映射文件(hosts文件)

如果感觉此主机名不合适,我们可以进行修改。通过编辑/etc/sysconfig/network文件

[root@hadoop100 桌面]$ vi /etc/sysconfig/network

文件中内容

NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME= hadoop100 # 这是我修改后的

打开此文件后,可以看到主机名。修改此主机名为我们想要修改的主机名hadoop100

: wq保存退出

打开/etc/hosts配置集群中各个机器的主机名和其对应IP地址的映射(配置了之后就可以直接通过主机名来互相通信了)

[root@hadoop100 桌面]$ vim /etc/hosts

添加如下内容

192.168.1.100 hadoop100
192.168.1.101 hadoop101
192.168.1.102 hadoop102
192.168.1.103 hadoop103
192.168.1.104 hadoop104
192.168.1.105 hadoop105
192.168.1.106 hadoop106
192.168.1.107 hadoop107
192.168.1.108 hadoop108

重启设备,重启后,查看主机名,已经修改成功

2. 修改window10的主机映射文件(hosts文件)

进入C:\Windows\System32\drivers\etc路径

在这里插入图片描述

打开hosts文件并添加如下内容(这个映射和前面在linux虚拟机上配置的一定要一致)

192.168.1.100 hadoop100
192.168.1.101 hadoop101
192.168.1.102 hadoop102
192.168.1.103 hadoop103
192.168.1.104 hadoop104
192.168.1.105 hadoop105
192.168.1.106 hadoop106
192.168.1.107 hadoop107
192.168.1.108 hadoop108

保存退出

4. 关闭防火墙

查看防火墙状态

[root@hadoop100桌面]$ service iptables status

临时关闭防火墙

[root@hadoop100桌面]$ service iptables stop

配置开机启动时关闭防火墙

[root@hadoop100桌面]$ chkconfig iptables off

通过如下命令可以查看防火墙在各个运行级别的启动情况,如果都是关闭,就成功了

[root@hadoop100桌面]$ chkconfig iptables off

在这里插入图片描述

检查是否成功

  • 可以通过ifconfig来查看IP是否配置成功
    在这里插入图片描述

  • 通过虚拟机ping www.baidu 看看虚拟机能不能通公网
    在这里插入图片描述

  • 通过虚拟机ping 主机 看看虚拟机能不能Ping通主机
    在这里插入图片描述

  • 通过主机ping 虚拟机名 看能不能ping 通
    在这里插入图片描述

克隆虚拟机搭载集群

1. 克隆虚拟机

1.关闭要被克隆的虚拟机

2.找到克隆选项,如图所示

在这里插入图片描述

3.欢迎页面,如图所示

在这里插入图片描述

4.克隆虚拟机,如图所示

在这里插入图片描述

5.设置创建完整克隆,如图所示
在这里插入图片描述

6.设置克隆的虚拟机名称和存储位置,如图所示

在这里插入图片描述

7.等待正在克隆
在这里插入图片描述

8.点击关闭,完成克隆
在这里插入图片描述

9.修改克隆后虚拟机的ip

[root@hadoop101 /]$ vim /etc/udev/rules.d/70-persistent-net.rules

进入如下页面,删除eth0该行;将eth1修改为eth0,同时复制物理ip地址,如图所示

在这里插入图片描述

10.修改IP地址

[root@hadoop101 /]$ vim /etc/sysconfig/network-scripts/ifcfg-eth0

(1)把复制的物理ip地址更新

HWADDR=00:0C:2x:6x:0x:xx #MAC地址

(2)修改成你想要的ip

IPADDR=192.168.1.101 #IP地址

11.修改主机名称

vi /etc/sysconfig/network

在这里插入图片描述

12.重新启动服务器(reboot)

同样的步骤,我们再克隆一个节点hadoop102,通过Xshell来远程连接3台机器

在这里插入图片描述

检查各个节点之间能够互相ping通,虚拟机的集群就搭建好了。

2. 安装jdk8,hadoop2.7.2 并完成相关配置

在安装配置相关软件之前,我们要先创建用户来方便我们管理这些集群(避免使用root用户误操作导致巨大的错误发生)

2.1 创建sudoer用户
创建atguigu用户

因为我是跟着尚硅谷的hadoop教程来搭的集群,所以就直接使用atguigu作为要创建的用户名

useradd atguigu

通过id 用户名可以查看创建的用户
在这里插入图片描述
通过passwd 用户名指定登陆密码

passwd atguigu
配置atguigu用户具有root权限,在这里需要修改配置文件 /etc/sudoers
vi /etc/sudoers

修改 /etc/sudoers 文件,找到下面一行(91行),在root下面添加一行,如下所示:

## Allow root to run any commands anywhere
root      ALL=(ALL)     ALL
atguigu   ALL=(ALL)     NOPASSWD:ALL # 配置成采用sudo命令时,不需要输入密码

修改完毕,现在可以用atguigu帐号登录,然后用命令 sudo ,即可获得root权限进行操作.

2.2 安装具体的软件

在安装前,我们先在/opt目录下创建module、software文件夹,方便管理软件和包。

[atguigu@hadoop101 opt]$ sudo mkdir module
[atguigu@hadoop101 opt]$ sudo mkdir software

修改module、software文件夹的所有者为atguigu

[atguigu@hadoop101 opt]$ sudo chown atguigu:atguigu module/ software/
[atguigu@hadoop101 opt]$ ll
总用量 8
drwxr-xr-x. 2 atguigu atguigu 4096 1月  17 14:37 module
drwxr-xr-x. 2 atguigu atguigu 4096 1月  17 14:38 software

2.2.1 安装JDK
  1. 卸载现有JDK
    (1)查询是否安装Java软件:

    [atguigu@hadoop101 opt]$ rpm -qa | grep java
    

    (2)如果安装的版本低于1.7,卸载该JDK:

    [atguigu@hadoop101 opt]$ sudo rpm -e 软件包
    

    (3)查看JDK安装路径:

    [atguigu@hadoop101 ~]$ which java
    
  2. 用SecureCRT工具将JDK导入到opt目录下面的software文件夹下面。

  3. 在Linux系统下的opt目录中查看软件包是否导入成功

    [atguigu@hadoop101 opt]$ cd software/
    [atguigu@hadoop101 software]$ ls
    hadoop-2.7.2.tar.gz  jdk-8u144-linux-x64.tar.gz
    
  4. 解压JDK到/opt/module目录下

[atguigu@hadoop101 software]$ tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/module/
  1. 配置JDK环境变量
    (1)先获取JDK路径
[atguigu@hadoop101 jdk1.8.0_144]$ pwd
/opt/module/jdk1.8.0_144

(2)打开/etc/profile文件

[atguigu@hadoop101 software]$ sudo vi /etc/profile

​ 在profile文件末尾添加JDK路径

#JAVA_HOME

export JAVA_HOME=/opt/module/jdk1.8.0_144

export PATH=$PATH:$JAVA_HOME/bin

(3)保存后退出:wq

(4)让修改后的文件生效

[atguigu@hadoop101 jdk1.8.0_144]$ source /etc/profile
  1. 测试JDK是否安装成功
[atguigu@hadoop101 jdk1.8.0_144]# java -version
java version "1.8.0_144"
注意:重启(如果java -version可以用就不用重启)
[atguigu@hadoop101 jdk1.8.0_144]$ sync
[atguigu@hadoop101 jdk1.8.0_144]$ sudo reboot
2.2.2 安装hadoop
  1. 用SecureCRT工具将hadoop-2.7.2.tar.gz导入到opt目录下面的software文件夹下面

  2. 进入到Hadoop安装包路径下

    [atguigu@hadoop101 ~]$ cd /opt/software/
    
  3. 解压安装文件到/opt/module下面

    [atguigu@hadoop101 software]$ tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/
    
  4. 查看是否解压成功

    [atguigu@hadoop101 software]$ ls /opt/module/
    hadoop-2.7.2
    
  5. 将Hadoop添加到环境变量

    (1)先获取Hadoop安装路径

    [atguigu@hadoop101 hadoop-2.7.2]$ pwd
    /opt/module/hadoop-2.7.2
    

    (2)打开/etc/profile文件

    [atguigu@hadoop101 software]$ sudo vi /etc/profile
    

    ​ 在profile文件末尾添加HADOOP路径

    ##HADOOP_HOME
    export HADOOP_HOME=/opt/module/hadoop-2.7.2
    export PATH=$PATH:$HADOOP_HOME/bin
    export PATH=$PATH:$HADOOP_HOME/sbin
    

    (3)保存后退出:wq

    (4)让修改后的文件生效

    [atguigu@ hadoop101 hadoop-2.7.2]$ source /etc/profile
    
  6. 测试是否安装成功

    [atguigu@hadoop101 hadoop-2.7.2]$ hadoop version
    Hadoop 2.7.2
    
  7. 如果Hadoop命令不能用,就重启

    [atguigu@ hadoop101 hadoop-2.7.2]$ sync
    [atguigu@ hadoop101 hadoop-2.7.2]$ sudo reboot
    
2.3 分布式配置hadoop
2.3.1 同步集群内的机器

在完成配置之前,我们需要在准备的3台虚拟机上同步hadoop以及jdk的安装和环境变量的设置,这里提供了两种方式

方式1:手动进入hadoop101和hadoop102,然后进行如hadoop100的操作(如上)-解压tar-gz包,编辑环境变量

方式2:利用shell脚本,一键同步所有机器。
进入hadoop100机,在/home/atguigu目录下创建bin目录,并在bin目录下创建xsync文件

[atguigu@hadoop100 ~]$ mkdir bin
[atguigu@hadoop100 ~]$ cd bin/
[atguigu@hadoop100 bin]$ touch xsync
[atguigu@hadoop100 bin]$ vi xsync

文件内容如下:shell脚本如下:

#!/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 循环,注意修改100 和 103的区间,根据自己的集群机器名来修改
for((host=100; host<103; host++)); do
        echo ------------------- hadoop$host --------------
        rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done

修改脚本 xsync 具有执行权限

[atguigu@hadoop100 bin]$ chmod 777 xsync

调用脚本形式:xsync 文件名称

[atguigu@hadoop100 bin]$ xsync /home/atguigu /bin # 测试脚本能不能成功运行

如果脚本能成功运行,在各个机器的bin目录下应该都能找到xsync文件

在测试脚本可以成功运行后,我们进入hadoop和jdk的安装目录/opt/module

[atguigu@hadoop100 ~]$ cd /opt/module/

在这里插入图片描述

然后运行脚本,把module目录同步到其他节点机器

[atguigu@hadoop100 module]$ xsync hadoop-2.7.2
[atguigu@hadoop100 module]$ xsync jdk1.8.0_144

同步完成就可以开始各个节点的配置了。

2.3.2 集群的配置
1.集群部署规划
hadoop100hadoop101hadoop102
HDFSNameNode DataNodeDataNodeSecondaryNameNode DataNode
YARNNodeManagerResourceManager NodeManagerNodeManager
2.配置集群

先进入存放配置文件的目录下

[atguigu@hadoop100 module]$ cd hadoop-2.7.2/etc/hadoop/

在这里插入图片描述

(1)核心配置文件

  • 配置core-site.xml
[atguigu@hadoop100 hadoop]$ vi core-site.xml

​ 在该文件中编写如下配置

<!-- 指定HDFS中NameNode的地址 -->
<property>
		<name>fs.defaultFS</name>
      <value>hdfs://hadoop100:9000</value>
</property>

<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
		<name>hadoop.tmp.dir</name>
		<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>

(2)HDFS配置文件

  • 配置hadoop-env.sh

    [atguigu@hadoop100 hadoop]$ vi hadoop-env.sh
    export JAVA_HOME=/opt/module/jdk1.8.0_144
    

    在这里插入图片描述

  • 配置hdfs-site.xml

    [atguigu@hadoop100 hadoop]$ vi hdfs-site.xml
    

    在该文件中编写如下配置

    <property>
    		<name>dfs.replication</name>
    		<value>3</value>
    </property>
    
    <!-- 指定Hadoop辅助名称节点主机配置 -->
    <property>
          <name>dfs.namenode.secondary.http-address</name>
          <value>hadoop102:50090</value>
    </property>
    

    在这里插入图片描述

(3)YARN配置文件

  • 配置yarn-env.sh

    [atguigu@hadoop102 hadoop]$ vi yarn-env.sh
    export JAVA_HOME=/opt/module/jdk1.8.0_144
    
  • 配置yarn-site.xml

    [atguigu@hadoop102 hadoop]$ vi 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>hadoop101</value>
    </property>
    

    在这里插入图片描述

(4)MapReduce配置文件

  • 配置mapred-env.sh

    [atguigu@hadoop102 hadoop]$ vi mapred-env.sh
    export JAVA_HOME=/opt/module/jdk1.8.0_144
    
  • 配置mapred-site.xml

    [atguigu@hadoop102 hadoop]$ cp mapred-site.xml.template mapred-site.xml
    [atguigu@hadoop102 hadoop]$ vi mapred-site.xml
    

    在该文件中增加如下配置

    <!-- 指定MR运行在Yarn上 -->
    <property>
    		<name>mapreduce.framework.name</name>
    		<value>yarn</value>
    </property>
    
3. 在集群上分发配置好的Hadoop配置文件

利用刚刚写的shell脚本完成分发

[atguigu@hadoop100 hadoop]$ xsync /opt/module/hadoop-2.7.2/

查看文件分发情况

[atguigu@hadoop102 hadoop]$ cat /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml

在这里插入图片描述

2.4 集群单点启动

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

[atguigu@hadoop100 hadoop-2.7.2]$ hadoop namenode -format

注意,在后面的每次启动都不要再初始化NameNode了,否则会出现DataNode启动失败,解决的方案是将hadoop安装目录下的/opt/module/hadoop-2.7.2/data/tmp/dfs中的data 文件删除,然后重新启动数据节点

(2)在hadoop100上启动NameNode

[atguigu@hadoop100 hadoop-2.7.2]$ hadoop-daemon.sh start namenode
[atguigu@hadoop100 hadoop-2.7.2]$ jps

3461 NameNode

(3)在hadoop100、hadoop101以及hadoop102上分别启动DataNode

[atguigu@hadoop100 hadoop-2.7.2]$ hadoop-daemon.sh start datanode
[atguigu@hadoop100 hadoop-2.7.2]$ jps
3461 NameNode
3608 Jps
3561 DataNode
[atguigu@hadoop101 hadoop-2.7.2]$ hadoop-daemon.sh start datanode
[atguigu@hadoop101 hadoop-2.7.2]$ jps
3190 DataNode
3279 Jps
[atguigu@hadoop102 hadoop-2.7.2]$ hadoop-daemon.sh start datanode
[atguigu@hadoop102 hadoop-2.7.2]$ jps
3237 Jps
3163 DataNode

(4)在hadoop102上启动secondnamenode

[atguigu@hadoop102 hadoop-2.7.2]$ hadoop-daemon.sh start secondnamenode

通过浏览器访问http://hadoop100:50070/dfshealth.html#tab-datanode可以看到集群中DataNode的情况,如下:
在这里插入图片描述

启动成功,至此完成了hadoop集群的搭建和单点启用。

2.5 群起集群

如果每次集群的启动都是单点式,即在每台机器上进行相关的启动操作如hadoop-daemon.sh start datanode,会显得很繁琐,所以hadoop官方提供了群起集群的脚本,但是前提是需要配置SSH无密登陆.

2.5.1 SSH无密登陆配置

(1)免密登录原理,如图所示

在这里插入图片描述

(2)生成公钥和私钥:

[atguigu@hadoop100 .ssh]$ ssh-keygen -t rsa

然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)

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

[atguigu@hadoop100 .ssh]$ ssh-copy-id hadoop100
[atguigu@hadoop100 .ssh]$ ssh-copy-id hadoop101
[atguigu@hadoop100 .ssh]$ ssh-copy-id hadoop102

同样的操作需要在hadoop101和hadoop102上再来以便,保证所有机器互相免密登陆

  • 有一个非常简单的方式来配置无密登陆SSH,直接利用之前编写的xsync将hadoop100上生成的公私钥对以及自己的.ssh/authorized_keys 同步到其他节点即可:

    [atguigu@hadoop100 .ssh]$ ssh-copy-id hadoop100
    [atguigu@hadoop100 .ssh]$ cd  # 跳回到家目录,因为.ssh在家目录下
    [atguigu@hadoop100 ~]$ xsync .ssh
    

附上表 .ssh文件夹下(~/.ssh)的文件功能解释:

known_hosts记录ssh访问过计算机的公钥(public key)
id_rsa生成的私钥
id_rsa.pub生成的公钥
authorized_keys存放授权过得无密登录服务器公钥
2.5.2 群起集群
(1) 配置slave

在完成了SSH无密码登陆配置后,还需要配置hadoop安装目录中etc/hadoop/下的slaves,告诉hadoop哪些机器是担当了DataNode的从机器(slave-仆从)
在这里插入图片描述

修改salves中的信息为如下(vim slaves):
在这里插入图片描述

同步所有节点配置文件

[atguigu@hadoop100 hadoop]$ xsync slaves

每次改完配置文件都一定要同步!!!血泪教训

(2) 启动HDFS

然后在配置了NameNode的节点上启动HDFS,我的NameNode是配置在hadoop100上的,所以执行如下shell

[atguigu@hadoop100 hadoop-2.7.2]$ start-dfs.sh

在这里插入图片描述

(3) 启动Yarn

再然后在配置了ResourceManager的节点上 启动YARN,我是ResourceManager配置在hadoop101上。执行如下命令

[atguigu@hadoop101 hadoop]$ start-yarn.sh

在这里插入图片描述

检查启动情况
  • 通过访问http://hadoop100:50070/检查一下hdfs是否成功启用(hadoop100是hdfs的NameNode,所以ip地址是hadoop100)

在这里插入图片描述

  • 通过访问http://hadoop101:8088/检查Yarn(ResouceManager是部署在hadoop101的,所以IP地址是hadoop101)

在这里插入图片描述

  • 再看看能不能跑一个MapReduce(直接用WordCount)

    • 在hadoop安装目录里创建一个目录wcinput,并且在里面编辑一个文件wc.input,内容如下:

      hadoop yarn
      hadoop mapreduce
      atguigu
      atguigu
      

      在这里插入图片描述

    • 将本地磁盘的wcinput上传到hdfs文件操作系统中

      [atguigu@hadoop100 hadoop-2.7.2]$ hadoop fs -put wcinput / # 将wcinput上传到hdfs的根目录
      

      在这里插入图片描述

    • 使用hadoop内置examplejar运行wordcount实例

      [atguigu@hadoop100 hadoop-2.7.2]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /wcinput /output
      

      命令的解释在这里插入图片描述
      执行成功的显示:
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

      在这里插入图片描述

至此,hadoop集群(完全分布式)的搭建就完成了!!!!

后话

在经历了这次整整三天搭建hadoop集群的过程后,笔者最深的感悟是对linux系统操作的熟悉度对于大数据开发者的重要性,很多命令的不熟悉会导致你各种失误的操作,搭集群是个细活,大家一定要记得在完成每一步操作后检查,否则到后面很难找到原因,同样,快速查看log排错也是大数据开发者需要掌握的技能,共勉!

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值