1、分析

1)准备3台服务器(先配置一台,然后克隆两台)

2)安装JDK(之前配置过)

3)安装hadoop(hadoop下载点击此处

4)配置环境变量(vim /etc/profile)

5)配置集群

6)单点启动

7)配置ssh

8)群起并测试集群

2、编写集群分发脚本

因为我只在其中一个服务器上安装了hadoop,需要将安装好的hadoop分发到另外两个服务器,所以这里通过集群分发脚本将hadoop分发到另外两外机器。

2.1、scp(secure copy安全拷贝

定义:scp可以实现服务器与服务器之间的数据拷贝

基本语法:

scp    -r        $pdir/$fname             $user@$host:$pdir/$fname

命令   递归     要拷贝的文件路径/名称   目的地用户@主机:目的地路径/名称

# 在160服务器操作,将文件从160 拷贝到 161

scp -r c/ root@192.168.121.161:/opt/software/

# 在161服务器操作,将文件从160拷贝到161

scp -r root@192.168.121.161:/opt/software/hadoop-3.1.3 /opt/software/

# 在161服务器操作,将160的文件拷贝到162

scp -r root@192.168.121.160:/opt/software/hadoop-3.1.3 root@192.168.121.162:/opt/software/

2.2、rsync远程同步工具

定义:

rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。

rsync和scp区别:rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。

差异:scp全量拷贝,rsync增量拷贝

基本语法:

rsync    -av       $pdir/$fname             $user@$host:$pdir/$fname

命令   选项参数   要拷贝的文件路径/名称   目的地用户@主机:目的地路径/名称

# 只同步差异化文件,将160同步到161

rsync -av root@192.168.121.160:/opt/software/hadoop-3.1.3/ /opt/software/hadoop-3.1.3/

简化脚本(好用的同步分发脚本)

预期目标:1、xsync + 文件名称 ,即可实现多个服务器完成同步操作。2、任何路径下都可以实现。

下载工具xsync:yum -y install xsync

编写脚本:

#!/bin/bash

#1. 判断参数个数

if [ $# -lt 1 ]

then

    echo Not Enough Arguement!

    exit;

fi

#2. 遍历集群所有机器

for host in 服务器160 服务器161 服务器162

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

将脚本放到/bin目录下:mv xsync /bin

测试:在根目录下创建一个目录110,然后执行脚本,去其它服务器看是否已完成同步

# 建目录

mkdir 110

# 同步

xsync 110

同步环境变量

# 同步

xsync /etc/profile

# 生效

source /etc/profile

# java

java -version

# hadoop

hadoop version

3、ssh免密登录配置

3.1.无密钥配置

进入根目录下

# 显示当前目录下的所有文件和目录信息,包括隐藏文件

ls -al

找到.ssh目录,进入其中,如果没有显示.ssh目录,执行下列指令

# 通过 SSH 协议连接到本机,常用于测试 SSH 服务是否正常运行,或配置 免密码登录等场景。

ssh localhost

再次执行 ls -al,就可以看到.ssh目录了,进去之后,只有一个文件known_hosts文件。

# 生成本机的公钥和私钥

ssh-keygen -t rsa

执行完上述指令后,会多出来两个文件,id_rsa和id_rsa.pub,id_rsa存放了160的私钥,id_rsa.pub存放了160的私钥。

# 将公钥id拷贝到要访问的服务器上,包括自己

ssh-copy-id 服务器160

ssh-copy-id 服务器161

ssh-copy-id 服务器162

另外两个服务器可以做相同的操作,这样就可以互相免密访问。包括上述分发文件等操作。

备注:如果无法解析主机名,那么执行下列操作

vim etc/hostname

文件中加上要访问的服务器id地址加上主机名称即可。

192.168.121.160 服务器160
192.168.121.161 服务器161
192.168.121.161 服务器162

4、集群配置

集群配置涉及四个文件,都在hadoop-3.1.3/etc/hadoop目录下,core-site.xml核心配置文件,hdfs-site.xml  HDFS配置文件,yarn-site.xml  YARN配置文件,mapred-site.xml  MapReduce配置文件。

hadoop160 hadoop161 hadoop162
HDFS

NameNode

DataNode
DataNode

SecondaryNameNode

DataNode
YARN NodeManager

ResourceManager

NodeManager
NodeManager

# core-site.xml核心配置文件

<configuration>
<!-- 指定NameNode的地址 -->

  <property>

    <name>fs.defaultFS</name>

    <value>hdfs://hadoop160:8020</value>

  </property>

  <!-- 指定hadoop数据的存储目录 -->

  <property>

    <name>hadoop.tmp.dir</name>

    <value>/opt/software/hadoop-3.1.3/data</value>

  </property>
</configuration>

# hdfs-site.xml  HDFS配置文件

<configuration>
<!-- nn web端访问地址-->

 <property>

    <name>dfs.namenode.http-address</name>

    <value>hadoop160:9870</value>

  </property>

 <!-- 2nn web端访问地址-->

  <property>

    <name>dfs.namenode.secondary.http-address</name>

    <value>hadoop162:9868</value>

  </property>
</configuration>

# yarn-site.xml  YARN配置文件

<configuration>

<!-- 指定MR走shuffle -->

  <property>

    <name>yarn.nodemanager.aux-services</name>

    <value>mapreduce_shuffle</value>

  </property>

  <!-- 指定ResourceManager的地址-->

  <property>

    <name>yarn.resourcemanager.hostname</name>

    <value>hadoop161</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>

</configuration>

# mapred-site.xml  MapReduce配置文件

<!-- 指定MapReduce程序运行在Yarn上 -->

    <property>

        <name>mapreduce.framework.name</name>

        <value>yarn</value>

    </property>

配置完成后,用之前的集群分发方法,将配置文件分发到另外两个服务器。

xsync hadoop/

5、启动集群

5.1. 编辑workers 工作文件

# 将服务器用户名称写进去

hadoop160
hadoop161
hadoop162

5.2.将文件分发给另外的服务器

xsync workers

5.3.启动hadoop前,在主服务器上格式化NameNode节点(仅第一次启动前执行)

# 回到 hadoop3.1.3根目录下,执行

hdfs namenode -format

5.4.启动HDFS sbin目录下 start-dfs.sh

# 启动

sbin/start-dfs.sh

# JPS查看进程名称,与上面集群配置的表格中的内容一致,说明启动成功了

例如:160,进程中一定会有 NameNode , DataNode

           161,进程中一定会有 DataNode

5.5.启动YARN

# 启动

sbin/start-dfs.sh

# 启动后,也会有相应进程

例如: 160,进程中一定会有 NodeManager

            161,进程中一定会有 ResourceManager , NodeManager

5.6.遇到的问题

1.如果启动失败,提示:JAVA_HOME is not set and could not be found

首先确定JDK是否安装配置:通过 java -version查看JDK版本信息

在JDK配置无错的情况下,可能是没有配置hadoop-env.sh文件。这个文件里写的是hadoop的环境变量,主要修改hadoop的JAVA_HOME路径。

切到 $HADOOP_HOME/etc/hadoop目录
执行:vim hadoop-env.sh
修改java_home路径和hadoop_conf_dir路径为具体的安装路径

export JAVA_HOME=/usr/jdk1.8.0_65 export HADOOP_CONF_DIR=/usr/hadoop-3.1.3/etc/hadoop

重新加载使修改生效:source hadoop-env.sh

2.如果提示:Attempting to operate on hdfs namenode as root

Hadoop出于安全考虑,默认不允许以​​root​​用户身份运行NameNode服务。这是为了防止潜在的安全风险,例如恶意用户利用​​root​​权限对Hadoop集群进行破坏或数据泄露

可以修改hadoop的配置文件:$HADOOP_HOME/etc/hadoop/hadoop-env.sh

# 在最后面加上这个,然后分发到其它服务器中。

export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

3.启动成功后,若无法通过服务器名+端口号访问hdfs网页,则可以使用ip地址+端口号访问。

如果一定要用服务器名称访问,那么可能有以下几种情况:

1)判断防火墙是否关闭,若未关闭,关闭后,再重新访问

systemctl status firewalld

systemctl stop firewalld

2)可能windows无法解析你的ip,C:\Windows\System32\drivers\etc 这个地址下修改hosts文件,在最后面加上 :

192.168.121.160 hadoop160
192.168.121.161 hadoop161
192.168.121.162 hadoop162

Logo

更多推荐