搭建hadoop集群的详细步骤

一、说明

在前一篇hadoop虚拟机第一次部署完成后,接下来就是搭建hadoop集群,本次搭建三台虚拟机构成一个集群实现完全分布式运行模式,三台虚拟机分别是hadoop112、hadoop213、hadoop214。

二、在hadoop112上安装JDK

1、上传jdk、hadoop安装包

将本地下载好的JDK和Hadoop(为了下面hadoop安装)的jar包通过xftp传到hadoop112虚拟机的 /opt/software 目录下。(jar包下载资源在我博客内,需要的自行下载。)

 2、进入/opt/software 目录查看安装包

3、将jdk安装包解压到 /opt/module 目录下

[jojo@hadoop112 software]$ tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module

 

4、配置jdk环境变量

(1)新建 /etc/profile.d/my_env.sh文件

 [jojo@hadoop112 module]$ sudo vim /etc/profile.d/my_env.sh

//一定要加上sudo否则进去编写完后无法保存退出,原因见无法写入并保存的解决方法

在my_env.sh文件中填写下面内容:

#JAVA_HOME

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

export PATH=$PATH:$JAVA_HOME/bin

(2) source一下/etc/profile文件,让新的环境变量PATH生效

[jojo@hadoop112 ~]$ source /etc/profile

(3)查看jdk版本 java -version

安装成功! 

 注意:如果 java -version 不可用重启一下试试。

三、在hadoop112上安装Hadoop

1、将hadoop安装包解压到 /opt/module 目录下

由于第二步已经将hadoop安装包下载到 /opt/software 目录下,所以只需将hadoop解压到  /opt/module 目录下即可。

[jojo@hadoop112 software]$ tar -zxvf hadoop-3.3.4.tar.gz -C /opt/module

//注意所在目录

 2、配置hadoop环境变量

(1)编辑  /etc/profile.d/my_env.sh文件

在文件中追加以下内容:

#HADOOP_HOME

export HADOOP_HOME=/opt/module/hadoop-3.3.4

export PATH=$PATH:$HADOOP_HOME/bin

export PATH=$PATH:$HADOOP_HOME/sbin

 

 (2) source一下/etc/profile文件,让新的环境变量PATH生效

 [jojo@hadoop112 software]$ source /etc/profile

(3)检查是否配置成功

 [jojo@hadoop112 software]$ hadoop version

四、克隆虚拟机

1、克隆出hadoop213、hadoop214

通过hadoop112克隆出两台虚拟机,改名为hadoop213和hadoop214。

2、修改hadoop213、hadoop214的主机名和ip

克隆出来的两台虚拟机虽然外面名字已经改为hadoop213和hadoop214,但是登录虚拟机后仍是hadoop112,所以需要更改虚拟机的主机名和ip。

以hadoop214为例:

(1)修改hostname

vi /etc/hostname
​​

 (2) 修改ip地址

(3)重启虚拟机,完成配置

3、修改linux和windows系统中的host文件

(1)linux

hadoop112、hadoop213、hadoop214均需修改。添加以下内容:

hadoop112

hadoop213

hadoop214

 [jojo@hadoop112 ~]$ sudo vim /etc/hosts

(2)windows

在windows系统下的 C:\Windows\System32\drivers\etc 目录中找到hosts文件,在里面追加以下内容:

192.168.10.112 hadoop112

192.168.10.213 hadoop213

192.168.10.214 hadoop214

重复的就不用再添加(例如之前添加过hadoop112就可以不用再添加一遍)。 

五、编写集群分发脚本 xsync 

为了方便集群的搭建,编写一个集群分发脚本用于分发所修改的文件。

1)创建xsync文件

(1)查看环境变量

输入 echo $PATH 命令查看环境变量,看到 /home/jojo/bin 目录在环境变量中,可以直接在这个目录下创建xsync文件。

 (2)创建 /home/jojo/bin 目录

可以看出 /home/jojo 目录下并没有 bin 目录,创建bin目录

 [jojo@hadoop112 ~]$ mkdir /home/jojo/bin

(3)创建 xsync 文件

 [jojo@hadoop112 bin]$ vim xsync

在 xsync 文件中添加以下内容:

 

#!/bin/bash

#1. 判断参数个数

if [ $# -lt 1 ]

then

    echo Not Enough Arguement!

    exit;

fi

#2. 遍历集群所有机器

for host in hadoop112 hadoop213 hadoop214

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

保存并退出。

(4)给 xsync 文件添加执行权限

 [jojo@hadoop112 bin]$ chmod u+x xsync 

 

2)注意!

检查hadoop213、hadoop214的 /opt/module 目录下是否有 hadoop-3.3.4 和 jdk1.8.0_212
如果是空的,在hadoop112上分发一下这俩目录:

[jojo@hadoop112 bin]$ xsync /opt/module/hadoop-3.3.4
[jojo@hadoop112 bin]$ xsync /opt/module/jdk1.8.0_212

并且把自己写的环境变量文件 my_env.sh文件分发给hadoop213、hadoop214。

 要是失败,就分别去hadoop213、hadoop214虚拟机的 /etc/profile.d 目录下创建my_env.sh
文件并编写下述内容:

#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin

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

 source一下/etc/profile文件,让新的环境变量PATH生效

[jojo@hadoop213 profile.d]$ source /etc/profile

[jojo@hadoop214 profile.d]$ source /etc/profile

六、配置SSH免密登录

1)进入 /home/jojo/.ssh 目录

通过 ll -a 命令查看 /home/jojo 目录下有个 .ssh 文件:

进入 .ssh 文件进行以下操作

2)生成公钥和私钥

 [jojo@hadoop112 .ssh]$ ssh-keygen -t rsa

输入  ssh-keygen -t rsa 命令后一直敲回车(三个)就好,就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)。

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

[jojo@hadoop112 .ssh]$ ssh-copy-id hadoop112
[jojo@hadoop112 .ssh]$ ssh-copy-id hadoop213
[jojo@hadoop112 .ssh]$ ssh-copy-id hadoop214 

 

 

4)每台虚拟机都要做2)、3)步。 

注意

还需要在hadoop213采用jojo账号配置一下无密登录到hadoop112hadoop213、hadoop214服务器上。

还需要在hadoop214上采用jojo账号配置一下无密登录到hadoop112hadoop213、hadoop214服务器上。

还需要在hadoop112上采用jojo账号,配置一下无密登录到hadoop112hadoop213、hadoop214服务器上。

 

现在三台虚拟机就可以实现相互免密登录,例如:

 [jojo@hadoop214 .ssh]$ ssh hadoop213

 

输入 exit 就可以退出  

七、集群配置

1) 修改Hadoop的配置文件(在hadoop112下)

(1)核心配置文件

        配置core-site.xml。

[jojo@hadoop112 bin]$ cd $HADOOP_HOME/etc/hadoop 

[jojo@hadoop112 hadoop]$ vim core-site.xml 

        文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

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

    <property>

        <name>fs.defaultFS</name>

        <value>hdfs://hadoop112:8020</value>

    </property>

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

    <property>

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

        <value>/opt/module/hadoop-3.3.4/data</value>

    </property>

    <!-- 配置HDFS网页登录使用的静态用户为jojo -->

    <property>

        <name>hadoop.http.staticuser.user</name>

        <value>jojo</value>

    </property>

</configuration>

 

(2)HDFS配置文件 

         配置hdfs-site.xml。

 [jojo@hadoop112 hadoop]$ vim hdfs-site.xml 

        文件内容如下: 

 

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

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

<property>

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

        <value>hadoop112:9870</value>

    </property>

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

    <property>

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

        <value>hadoop214:9868</value>

    </property>

</configuration>

 

(3)YARN配置文件

        配置yarn-site.xml 

 [jojo@hadoop112 hadoop]$ vim yarn-site.xml 

        文件内容如下: 

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

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

    <property>

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

        <value>mapreduce_shuffle</value>

    </property>

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

    <property>

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

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

 

 

 (4)MapReduce配置文件

        配置mapred-site.xml。

 [jojo@hadoop112 hadoop]$ vim mapred-site.xml 

        文件内容如下: 

 

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

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

    <property>

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

        <value>yarn</value>

    </property>

</configuration>

 

2)在集群上分发配置好的Hadoop配置文件 

[jojo@hadoop112 hadoop]$ xsync /opt/module/hadoop-3.3.4/etc/hadoop/ 

 3)去103和104上查看文件分发情况

[jojo@hadoop213 ~]$ cat /opt/module/hadoop-3.3.4/etc/hadoop/core-site.xml
[jojo@hadoop214 ~]$ cat /opt/module/hadoop-3.3.4/etc/hadoop/core-site.xml
 

 

 八、群起集群 

1)配置workers 

 [jojo@hadoop112 hadoop]$ vim /opt/module/hadoop-3.3.4/etc/hadoop/workers 

        文件内容如下:

hadoop112

hadoop213

hadoop214 

 注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。

        同步所有结点的配置文件:

 [jojo@hadoop112 hadoop]$ xsync /opt/module/hadoop-3.3.4/etc

2)启动集群 

(1)第一次启动 

        如果集群是第一次启动,需要在hadoop112节点格式化NameNode(注意:格式化NameNode会产生新的集群id导致NameNode和DataNode的集群id不一致,集群不到已数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要停止namenode和datanode进程,并且要删除所有机器的 //opt/module/hadoop-3.3.4  目录下的datalogs目录,然后再进行格式化。)

 [jojo@hadoop112 hadoop-3.3.4]$ hdfs namenode -format

(2)启动HDFS

 [jojo@hadoop112 hadoop-3.3.4]$ sbin/start-dfs.sh

 

(3)在配置了ResourceManager的节点(hadoop213启动YARN 

 [jojo@hadoop213 hadoop-3.3.4]$ start-yarn.sh

 

(4)Web端查看HDFS的NameNode 

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

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

 

(5) Web端查看YARN的ResourceManager

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

        ②查看YARN上运行的Job信息

 

3)集群基本测试 

(1)上传文件到集群

        进入 Browse Directory 页面

 

         创建目录 input

 

 

        上传文件

 在电脑桌面创建一个 a.txt 文件用于测试,里面内容随意写。

 

 

 

 

(2)执行 wordcount 程序 

 [jojo@hadoop112 hadoop-3.3.4]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar wordcount /input /output

 

在yarn上查看任务:

 

去HDFS上查看生成的文件:

 

查看 output 目录下的 part-r-00000 文件可看到a.txt的文件内容: 

 

(3)关闭集群命令 

在hadoop213上关闭YARN

 [jojo@hadoop213 hadoop-3.3.4]$ stop-yarn.sh 

在hadoop112上关闭HDFS

 [jojo@hadoop112 hadoop-3.3.4]$ stop-dfs.sh

 

九、配置历史服务器

 为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:

1配置mapred-site.xml 

 [jojo@hadoop112 hadoop]$ vim mapred-site.xml 

         在该文件里面增加如下配置。

<!-- 历史服务器端地址 -->

<property>

    <name>mapreduce.jobhistory.address</name>

    <value>hadoop112:10020</value>

</property>

<!-- 历史服务器web端地址 -->

<property>

    <name>mapreduce.jobhistory.webapp.address</name>

    <value>hadoop112:19888</value>

</property> 

 

2)分发配置 

 [jojo@hadoop112 hadoop]$ xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml

3)在hadoop112启动历史服务器 

 [jojo@hadoop112 hadoop]$ mapred --daemon start historyserver

4查看历史服务器是否启动 

 [jojo@hadoop112 hadoop]$ jps

 

5查看JobHistory 

http://hadoop112:19888/jobhistory 

 

 

十、 配置日志的聚集

 日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。

注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryServer 

开启日志聚集功能具体步骤如下: 

1)配置yarn-site.xml 

[jojo@hadoop112 hadoop]$ vim yarn-site.xml 

        在该文件里面增加如下配置。 

<!-- 开启日志聚集功能 -->

<property>

    <name>yarn.log-aggregation-enable</name>

    <value>true</value>

</property>

<!-- 设置日志聚集服务器地址 -->

<property>  

    <name>yarn.log.server.url</name>  

    <value>http://hadoop112:19888/jobhistory/logs</value>

</property>

<!-- 设置日志保留时间为7天 -->

<property>

    <name>yarn.log-aggregation.retain-seconds</name>

    <value>604800</value>

</property>

 

 

2)分发配置 

[jojo@hadoop112 hadoop]$ xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml 

3)关闭NodeManager 、ResourceManager和HistoryServer 

[jojo@hadoop213 ~]$ stop-yarn.sh
[jojo@hadoop112 hadoop]$ mapred --daemon stop historyserver 

4启动NodeManager 、ResourceManageHistoryServer 

 [jojo@hadoop213 ~]$ start-yarn.sh

[jojo@hadoop112 hadoop]$ mapred --daemon start historyserver

5)删除HDFS上已经存在的输出文件 

 [jojo@hadoop112 hadoop]$ hadoop fs -rm -r /output

6)执行WordCount程序 

[jojo@hadoop112 hadoop-3.3.4]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar wordcount /input /output

7)查看日志 

(1)历史服务器地址

http://hadoop102:19888/jobhistoryhttp://hadoop112:19888/jobhistory

(2)历史任务列表 

 

(3)查看任务运行日志 

 

(4)运行日志详情 

 

 

十一、编写Hadoop集群常用脚本

 1)Hadoop集群启停脚本(包含HDFS,Yarn,Historyserver):myhadoop.sh

[jojo@hadoop112 home]$ cd /home/jojo/bin
[jojo@hadoop112 bin]$ vim myhadoop.sh

        输入以下内容:

#!/bin/bash

if [ $# -lt 1 ]
then
    echo "No Args Input..."
    exit ;
fi

case $1 in
"start")
        echo " ============= 启动 hadoop集群 ================"

        echo " --------------- 启动 hdfs ---------------"
        ssh hadoop112 "/opt/module/hadoop-3.3.4/sbin/start-dfs.sh"
        echo " --------------- 启动 yarn ---------------"
        ssh hadoop213 "/opt/module/hadoop-3.3.4/sbin/start-yarn.sh"
        echo " --------------- 启动 historyserver ---------------"
        ssh hadoop112 "/opt/module/hadoop-3.3.4/bin/mapred --daemon start historyserver"
;;
"stop")
        echo " ============== 关闭 hadoop集群 ================"

        echo " --------------- 关闭 historyserver ---------------"
        ssh hadoop112 "/opt/module/hadoop-3.3.4/bin/mapred --daemon stop historyserver"
        echo " --------------- 关闭 yarn ---------------"
        ssh hadoop213 "/opt/module/hadoop-3.3.4/sbin/stop-yarn.sh"
        echo " --------------- 关闭 hdfs ---------------"
        ssh hadoop112 "/opt/module/hadoop-3.3.4/sbin/stop-dfs.sh"
;;
*)
    echo "Input Args Error..."
;;
esac

 

        保存后退出,然后赋予脚本执行权限:

[jojo@hadoop112 bin]$ chmod +x myhadoop.sh 


2)查看三台服务器Java进程脚本:jpsall 

[jojo@hadoop112 bin]$ cd /home/jojo/bin
[jojo@hadoop112 bin]$ vim jpsall 

         输入以下内容:

#!/bin/bash

for host in hadoop112 hadoop213 hadoop214
do
        echo =============== $host ===============
        ssh $host jps 
done

 

        保存后退出,然后赋予脚本执行权限

 [jojo@hadoop112 bin]$ chmod +x jpsall

 3)分发/home/jojo/bin目录,保证自定义脚本在三台机器上都可以使用

[jojo@hadoop112 bin]$ xsync /home/jojo/bin/ 

 

十二、集群时间同步配置 

如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定期和公网时间进行校准;

如果服务器在内网环境,必须要配置集群时间同步,否则时间久了,会产生时间偏差,导致集群执行任务时间不同步。

 1)时间服务器配置(必须root用户)

(1)将hadoop102配置成时间服务器 

         ①停止ntpd服务 : sudo systemctl stop ntpd

 

        ②修改配置文件 /etc/ntp.conf

 sudo vim /etc/ntp.conf

 

 将  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

 

         ③修改配置文件/etc/sysconfig/ntpd 

sudo vim /etc/sysconfig/ntpd 

添加如下内容:
                SYNC_HWCLOCK=yes    

 

        ④ 启动ntpd服务

 sudo systemctl start ntpd
 sudo systemctl enable ntpd

---------------------------------------------------------
        如果需要时间服务器去互联网同时间 ①关闭ntpd服务 ②同步时间sudo ntpdate xxxx.xxx.xxx
                    ③再次开启ntpd服务
        -------------------------------------------------------

(2)让其他节点去hadoop112同步时间

        ①测试先把hadoop213的时间修改 

 sudo date -s "2020-10-10 10:10:10"

然后再输入以下命令同步时间:

sudo ntpdate hadoop112 

注意:如果输入  sudo ntpdate hadoop112 命令后提示 sudo: ntpdate:找不到命令

下载该插件即可,下载命令:

sudo install ntpdate

        ②开启定时任务

        可以设置一个定时任务来在固定时间同步一次hadoop112的时间 

[jojo@hadoop213 ~]$ sudo systemctl start crond
[jojo@hadoop214 ~]$ sudo systemctl start crond

        ③编辑定时任务

 sudo crontab -e

添加如下内容 -- 只是为了演示才每分钟同步一次
            */1 * * * * sudo ntpdate hadoop112

 

  • 14
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值