Hadoop完全分布式—环境搭建

Hadoop的环境搭建分为伪分布式和完全分布式,这里演示完全分布式搭建过程,并且以三台机器作为节点服务器。

1、准备工作

1.首先要准备好vmware虚拟机与centos7光盘映像,完成虚拟机的一个基础机的安装(可以选择最小系统进行安装)。

这里根据自己的电脑实际配置将内存尽可能的设置大一点,避免后面运行出错。其他步骤这里不作赘述。

2.将准备好的基础机打开,进行准备工作配置

  • 配置静态IP,避免因每次重新启动后,ip发生变化。
输入命令:vi /etc/sysconfig/network-scripts/ifcfg-ens33

hadoop完全分布式ha搭建 hadoop完全分布式环境搭建_分布式

将上述红色框中的内容进行修改,并添加四行内容:

BOOTPROTO="static"
ONBOOT="yes"
IPADDR=192.168.10.102  (ip地址,根据自己的网卡进行设置)
GATEWAY=192.168.10.2   (网关,网段.2)
NETMASK=255.255.255.0  (子网掩码,可不写,默认24位掩码)
DNS1=8.8.8.8           (公网dns解析地址1)
DNS2=114.114.114.114   (公网dns解析地址2)

修改完成后”:wq“进行保存退出并重启网卡。

systemctl restart network
  • 修改默认主机名称。
vi /etc/hostname

hadoop完全分布式ha搭建 hadoop完全分布式环境搭建_分布式_02

第一台节点将原来的localhost改为master(第二、三台分别为slave1,slave2)

修改完毕后保存退出。

  • 配置Linux下静态ip映射,添加自己的IP地址与对应的主机名称。
vi /etc/hosts

hadoop完全分布式ha搭建 hadoop完全分布式环境搭建_linux_03

添加完毕后保存退出即可。

  • 关闭防火墙。
systemctl stop firewalld   (暂时关闭防火墙)
systemctl disable firewalld  (永久关闭防火墙)

至此基本的准备工作配置已经完成。

2、安装JDK

①进入opt目录下创建两个文件夹software(软件安装包)、module(解压后的文件)

mkdir software module

hadoop完全分布式ha搭建 hadoop完全分布式环境搭建_分布式_04

②进入software目录下,使用xftp或者其他软件将jdk的安装包传进来并进行解压。

hadoop完全分布式ha搭建 hadoop完全分布式环境搭建_linux_05

使用命令进行解压

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

这里指将jdk安装包解压到opt下的module目录, -C 参数代表解压到某文件目录,后面跟目录地址

hadoop完全分布式ha搭建 hadoop完全分布式环境搭建_环境变量_06

③解压完成后我们开始配置环境变量

sudo vi /etc/profile.d/my_env.sh

在etc下的profile.d目录下编辑一个新的文件用来存放以后各种软件的环境变量(在以前的版本中是直接在profile文件下进行添加)。

添加以下内容:

#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
#将JAVA_HOME拼接到PATH中
export PATH=$PATH:$JAVA_HOME/bin

hadoop完全分布式ha搭建 hadoop完全分布式环境搭建_环境变量_07

④添加完毕后保存退出

⑤source环境变量,使其生效

source /etc/profile.d/my_env.sh

⑥检验java是否安装成功,输入java和javac进行检验

java

hadoop完全分布式ha搭建 hadoop完全分布式环境搭建_环境变量_08

javac

hadoop完全分布式ha搭建 hadoop完全分布式环境搭建_linux_09

看到以上提示信息代表java已经安装完毕·。

3、安装Hadoop

①进入software目录下,使用xftp或者其他软件将hadoop的安装包传进来并进行解压。

使用命令进行解压:

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

hadoop完全分布式ha搭建 hadoop完全分布式环境搭建_linux_10

②解压完毕后,配置Hadoop的环境变量

sudo vi /etc/profile.d/my_env.sh

在my_env.sh中添加下面的内容:

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

hadoop完全分布式ha搭建 hadoop完全分布式环境搭建_hadoop完全分布式ha搭建_11

③使用source命令将环境变量生效

source /etc/profile.d/my_env.sh

④输入hadoop version检验当前hadoop是否安装完毕

hadoop完全分布式ha搭建 hadoop完全分布式环境搭建_linux_12

可以看到版本号即代表当前hadoop已经安装完毕。至此安装过程已经完成。

4、克隆虚拟机

在vmware左侧导航栏中右键当前虚拟机,管理,选择克隆,具体操作步骤见下图:

hadoop完全分布式ha搭建 hadoop完全分布式环境搭建_分布式_13

hadoop完全分布式ha搭建 hadoop完全分布式环境搭建_环境变量_14

hadoop完全分布式ha搭建 hadoop完全分布式环境搭建_分布式_15

hadoop完全分布式ha搭建 hadoop完全分布式环境搭建_hadoop_16

hadoop完全分布式ha搭建 hadoop完全分布式环境搭建_hadoop_17

之后单击完成即可。

注意,这里总共需要克隆两台机器,克隆时需要注意修改虚拟机名称分别为slave1、slave2,同时可以选择修改虚拟机保存的位置。

克隆完成后,按照上述过程中的步骤将克隆后的slave1和slave2进行主机名和ip地址的修改,修改完成后重新启动。

5、编写xsync集群分发脚本

①scp(secure copy)安全拷贝:

scp可以实现服务器与服务器之间的数据拷贝。(from server1 to server2),其基本语法为:

scp    -r        $pdir/$fname             $user@$host:$pdir/$fname
命令   递归     要拷贝的文件路径/名称   目的地用户@主机:目的地路径/名称

例如:在hadoop102上,将hadoop102中/opt/module/jdk1.8.0_212目录拷贝到hadoop103上。

scp -r /opt/module/jdk1.8.0_212  xiaodong@hadoop103:/opt/module

②rsync远程同步工具

rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。

其基本语法如下:

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

-a 归档拷贝
-v 显示复制过程

例如:同步hadoop102中的/opt/module/hadoop-3.2.1到hadoop103

rsync -av hadoop-3.2.1/ xiaodong@hadoop103:/opt/module/hadoop-3.2.1/

③xsync集群分发脚本

需求:循环复制文件到所有节点的相同目录下

需求分析:

  • rsync命令原始拷贝:
    rsync -av /opt/module atguigu@hadoop103:/opt/
  • ②期望脚本:
    xsync要同步的文件名称
  • ③期望脚本在任何路径都能使用(脚本放在声明了全局环境变量的路径)
    [xiaodong@hadoop102 ~]$ echo $PATH
    /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/xiaodong/.local/bin:/home/xiaodong/bin:/opt/module/jdk1.8.0_212/bin

脚本实现:

  • 在/home/xiaodong/bin目录下创建xsync文件
[xiaodong@hadoop102 opt]$ cd /home/xiaodong
[xiaodong@hadoop102 ~]$ mkdir bin
[xiaodong@hadoop102 ~]$ cd bin
[xiaodong@hadoop102 bin]$ vim xsync

在该文件中编写如下shell代码:

#!/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
  • 修改脚本 xsync 具有执行权限:
chmod +x xsync
  • 将脚本复制到/bin中,以便全局调用
sudo cp xsync /bin/
  • 同步环境变量配置(root所有者)
sudo xsync /etc/profile.d/my_env.sh
  • 让环境变量生效
[xiaodong@hadoop103 bin]$ source /etc/profile
[xiaodong@hadoop104 opt]$ source /etc/profile

6、ssh无密码登录

在home目录下输入命令:

ssh-keygen -t rsa

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

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

[xiaodong@hadoop102 .ssh]$ ssh-copy-id hadoop102
[xiaodong@hadoop102 .ssh]$ ssh-copy-id hadoop103
[xiaodong@hadoop102 .ssh]$ ssh-copy-id hadoop104

注意:在三台机器节点上都需要进行上述ssh无密登录配置,以便后续群起集群

7、配置hadoop的四个xml文件

进入到配置文件的目录里:

cd /opt/module/hadoop-3.2.1/etc/hadoop/

hadoop完全分布式ha搭建 hadoop完全分布式环境搭建_环境变量_18

  • core-site.xml
    使用vi命令进行编辑,在标签里添加如下内容
<!-- 指定NameNode的地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:8020</value>
    </property>
 
    <!-- 指定hadoop数据的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop/data</value>
    </property>
 
    <!-- 配置HDFS网页登录使用的静态用户为xiaodong -->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>xiaodong</value>
    </property>
  • hdfs-site.xml
    使用vi命令进行编辑,在标签里添加如下内容
<!-- nn web端访问地址-->
	<property>
        <name>dfs.namenode.http-address</name>
        <value>master:9870</value>
    </property>
	<!-- 2nn web端访问地址-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>slave2:9868</value>
    </property>
  • yarn-site.xml
    使用vi命令进行编辑,在标签里添加如下内容
<!-- 指定MR走shuffle -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
 
    <!-- 指定ResourceManager的地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>slave1</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>
  • mapred-site.xml

使用vi命令进行编辑,在标签里添加如下内容

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

全部配置完毕后,在当前目录下执行

xsync ./

将写好的配置文件分发到另外两台节点上。

8、群起集群

配置workers文件

vi /opt/module/hadoop-3.2.1/etc/hadoop/workers

将原来的localhost改为自己的三台主机名

master
slave1
slave2

修改完毕后保存退出,xsync分发当前文件

xsync workers

启动集群:

如果集群是第一次启动,需要在hadoop102节点(主节点)格式化NameNode

hdfs namenode -format

启动HDFS:在主节点上执行

start-all.sh

**在配置了ResourceManager的节点(hadoop103)**启动YARN

start-yarn.sh

启动完成后,观察各节点的jps进程:

hadoop102(master):

13691 NameNode
14651 Jps
13836 DataNode
14428 NodeManager

hadoop102(slave1):

2736 Jps
1865 NodeManager
2204 ResourceManager
1742 DataNode

hadoop103(slave2):

1748 DataNode
2182 Jps
1963 NodeManager
1871 SecondaryNameNode

Web端查看HDFS的NameNode

①浏览器中输入:http://hadoop102:9870

②查看HDFS上存储的数据信息

hadoop完全分布式ha搭建 hadoop完全分布式环境搭建_linux_19

Web端查看YARN的ResourceManager

①浏览器中输入:http://hadoop103:8088

②查看YARN上运行的Job信息

hadoop完全分布式ha搭建 hadoop完全分布式环境搭建_分布式_20

至此Hadoop的完全分布式集群就已经搭建完毕了!

注意:

  • 此文中的集群规划如下:

hadoop102

hadoop103

hadoop104

HDFS

NameNode DataNode

DataNode

SecondaryNameNode DataNode

YARN

NodeManager

ResourceManager NodeManager

NodeManager

  • 全文出现的hadoop102、hadoop103、hadoop104都要分别替换为自己的主机名称。

大数据学习萌新,如遇到问题,欢迎指正!

求三连!