栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 系统运维 > 运维 > Linux

快速搭建一个hadoop集群

Linux 更新时间:发布时间: 百科书网 趣学号

快速搭建一个hadoop集群
    • 一、准备虚拟机
    • 二、配置ssh免密登录
    • 三、编写文件同步脚本
    • 四、安装jdk和hadoop
    • 五、hadoop集群配置
    • 六、启动集群

快速搭建一个hadoop集群

本文不讲原理,只记录一下快速搭建hadoop集群的过程。参考:https://www.bilibili.com/video/BV1Qp4y1n7EN

系统:CentOS7.7

hadoop版本:3.3.2

jdk版本:1.8.0_321

一、准备虚拟机

1、安装三台虚拟机,安装过程可参考 超详细的CentOS7.4下载与图文安装_运维_浅末年华的博客

2、安装完毕后,修改三台虚拟机的hostname分别为hadoop-node1、hadoop-node2、hadoop-node3,并在三台虚拟机的hosts中将其他虚拟机的ip加进去,原先的localhost可以删除,保留也不影响。修改后结果如下

[root@hadoop-node1 ~]# cat /etc/hostname
hadoop-node1
[root@hadoop-node1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.133.21 hadoop-node1
192.168.133.22 hadoop-node2
192.168.133.23 hadoop-node3
二、配置ssh免密登录

1、在三台机器上分别执行下面的命令来生成密钥对

# 如果文件夹不存在,则手动创建一下 mkdir ~/.ssh
cd ~/.ssh

# 输入下面的命令,连续敲三次回车,生成秘钥
ssh-keygen -t rsa

2、分别在三台机器上个执行下面的命令,将公钥复制到需要免登录的目标机器上,这一步需要输目标机器的密码

ssh-copy-id hadoop-node1
ssh-copy-id hadoop-node2
ssh-copy-id hadoop-node3

3、执行完成后就可以测试免密登录是否OK了

# 测试免密登录到node2
ssh hadoop-node2
三、编写文件同步脚本

1、编写同步脚本

cd ~
vim xsync

将下面的内容完整粘贴进去,根据对应机器的host进行修改

#!/bin/bash

#1. 判断参数个数
if [ $# -lt 1 ]
then
    echo Not Enough Arguement!
    exit;
fi

#2. 遍历集群所有机器
for host in hadoop-node1 hadoop-node2 hadoop-node3
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

2、修改文件权限

chmod +x xsync

3、将文件移动到/bin目录下

mv ~/xsync /bin/

4、将脚本同步到其他机器上

xsync /bin/xsync
四、安装jdk和hadoop

1、卸载openjdk

rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps

2、到官网下载jdk和hadoop的tar包,下载完成后上传到所有服务器上,路径为/opt/software,同时创建再创建一个目录用于存放解压后的应用

mkdir -p /opt/software /opt/module

3、解压jdk和hadoop

tar -zxvf jdk-8u321-linux-x64.tar.gz -C /opt/module/
tar -zxvf hadoop-3.3.2.tar.gz -C /opt/module/

4、配置环境变量

新建并编辑文件,文件名无所谓,只要是sh就行,至于为啥会这样,可以查看/etc/profile文件最后的那个for循环就可以知道了

vim /etc/profile.d/my_env.sh

将下面内容添加到文件中

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

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

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

上面的环境变量中,最后的5行,如果不是使用root用户启动,不用加,估计官方也不建议使用root用户启动吧。毕竟是自己搭建了玩的,所以就简单粗暴,直接使用root用户。

上述的环境变量配置好了之后,需要执行一下source命令来让环境变量生效(所有虚拟机上都需要执行)

source /etc/profile

上面的操作中,前三步由于文件较大,所以不建议使用xsync脚本进行同步,还是挨个上传手动解压。至于第四步,则可以通过xsync脚本将my_env.sh同步到所有主机,然后在所有虚拟机上挨个执行source命令即可。

五、hadoop集群配置

1、考虑到资源的合理运用,所以三台虚拟机的应用部署如下

hadoop-node1hadoop-node2hadoop-node3
HDFSNameNode
DataNode
DataNodeSecondaryNameNode
DataNode
YARNNodeManagerResourceManager
NodeManager
NodeManager

2、修改配置文件

下面的命令都是在hadoop安装目录下执行,即/opt/module/hadoop-3.3.2目录,修改的时候仅需要修改其中一台机器上的就行,修改完成后,直接通过xsync同步到其他所有节点上

(1)core-site.xml

vim etc/hadoop/core-site.xml

将下面的内容完整复制到configuration标签内



    fs.defaultFS
    hdfs://hadoop-node1:8020




    hadoop.tmp.dir
    /opt/module/hadoop-3.3.2/data




    hadoop.http.staticuser.user
    root

(2)hdfs-site.xml

vim etc/hadoop/hdfs-site.xml

将下面的内容完整复制到configuration标签内



    dfs.namenode.http-address
    hadoop-node1:9870



    dfs.namenode.secondary.http-address
    hadoop-node3:9868

(3)yarn-site.xml

vim etc/hadoop/yarn-site.xml

将下面的内容完整复制到configuration标签内



    yarn.nodemanager.aux-services
    mapreduce_shuffle




    yarn.resourcemanager.hostname
    hadoop-node2




    yarn.log-aggregation-enable
    true



    yarn.log.server.url
    http://hadoop-node1:19888/jobhistory/logs



    yarn.log-aggregation.retain-seconds
    604800

(4)mapred-site.xml

vim etc/hadoop/mapred-site.xml

将下面的内容完整复制到configuration标签内



    mapreduce.framework.name
    yarn



    yarn.app.mapreduce.am.env
    HADOOP_MAPRED_HOME=/opt/module/hadoop-3.3.2


    mapreduce.map.env
    HADOOP_MAPRED_HOME=/opt/module/hadoop-3.3.2


    mapreduce.reduce.env
    HADOOP_MAPRED_HOME=/opt/module/hadoop-3.3.2




    mapreduce.jobhistory.address
    hadoop-node1:10020




    mapreduce.jobhistory.webapp.address
    hadoop-node1:19888

(5)workers

vim etc/hadoop/workers

将所有的工作节点配置到里面,里面最初是有一个localhost,要去掉,需要注意的是,前后不能有空格,也不能有空行,文件内容如下

hadoop-node1
hadoop-node2
hadoop-node3

最后将上述修改的配置文件同步到所有机器

xsync etc/hadoop
六、启动集群

下面的命令若无特殊说明,都默认是在hadoop安装目录执行

1、初始化NameNode,在hadoop-node1上执行

hdfs namenode -format

2、启动hdfs,在hadoop-node1上执行

sbin/start-dfs.sh

3、启动yarn,注意,这一步是在hadoop-node2上执行

sbin/start-yarn.sh

4、启动历史服务器,又回到hadoop-node1上执行

mapred --daemon start historyserver

5、执行完上述的命令之后,应用的启动情况如下

[root@hadoop-node1 hadoop-3.3.2]# jps
6241 Jps
4050 NodeManager
4198 JobHistoryServer
3545 NameNode
3724 DataNode


[root@hadoop-node2 hadoop-3.3.2]# jps
3184 DataNode
3553 NodeManager
59767 Jps
3401 ResourceManager


[root@hadoop-node3 hadoop-3.3.2]# jps
3203 DataNode
3315 SecondaryNameNode
4964 Jps
3420 NodeManager

一切ok,打开浏览器依次查看下面的页面是否正常

(1)NameNode页面:http://hadoop-node1:9870

(2)SecondaryNameNode页面:http://hadoop-node3:9868

(3)ResourceManager页面:http://hadoop-node2:8088

(4)JobHistoryServer页面:http://hadoop-node1:19888

6、如果要关闭集群,则步骤与启动集群时刚好相反,其中的start换为stop

# node1
mapred --daemon stop historyserver

# node2
sbin/stop-yarn.sh

# node1
sbin/stop-dfs.sh
转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/868438.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号