当前位置:   article > 正文

用Hadoop搭建完全分布式集群

hadoop搭建完全分布式集群

Hadoop搭建完全分布式集群


一、平台软件说明

Windows,Hadoop3.x版本,3台虚拟机(centos)
3台虚拟机配置如下
  • 1
  • 2
主机名IP地址
serverx192.168.31.169
serverx1192.168.31.170
serverx2192.168.31.171

二、完全分布式说明

 在真实的企业环境当中,服务器集群会使用到多台机器共同配合,来构建一
 个完整的   分布式文件系统。而这样的分布式文件系统中,HDFS相关的守
 护进程也会分布在不 同的机器上,例如:
  • 1
  • 2
  • 3
  • NameNode守护进程,尽可能的单独部署在一台硬件性能较好的机器中。
  • 其他的每台机器上都会部署一个DataNode守护进程,一般的硬件环境即可
  • SecondaryNameNode守护进程最好不要和NameNode在同一台机器上

守护进程布局

NameNodeDataNodeSecondaryNode
serverx
servex1
serverx2

1.集群搭建准备

1.1关闭防火墙

#关闭防火墙
[root@serverx ~]# systemctl stop firewalld
#禁止防火墙开机自启动
[root@serverx ~]# systemctl disable firewalld
#最好也把selinux也关闭掉,selinux是linux系统的一个安全机制
[root@serverx ~]# vim /etc/selinux/config
......
SELINUX=disabled
.....
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

1.2主机映射

[root@serverx ~]# vim /etc/hosts
.....
192.168.31.169 serverx
192.168.31.170 serverx1
192.168.31.171 serverx2
.....
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

hosts文件内容

1.3 免密登录

#使用rsa加密技术,生成公钥私钥
[root@serverx ~]# sky-keygen -t rsa
#将生成的公钥发给需要的主机
[root@serverx ~]# ssh-copy-id serverx1
[root@serverx ~]# ssh-copy-id serverx2
#验证是否成功
[root@serverx ~]# ssh serverx1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

1.4 时间同步

 同步时间有2种方案,第一种同步阿里云的时间,第二种就是以一台机器
 为基准另外两台机器同步这一台机器的时间,,下面是以同步阿里云时间
 为例
  • 1
  • 2
  • 3
#同步阿里的时间需要下载ntpdate,而采用第二种方法时,需要下载ntp
[root@serverx ~]# yum isntall ntpdate -y
#同步时间,将日志打入黑洞中
[root@serverx ~]# ntpdate -u ntp.aliyun.com > /dev/null 2>&1
  • 1
  • 2
  • 3
  • 4

1.5安装JDK和配置环境变量

参考[https://blog.csdn.net/m0_74346394/article/details/136032739?spm=1001.2014.3001.5501](https://blog.csdn.net/m0_74346394/article/details/136032739?spm=1001.2014.3001.5501)
  • 1

1.6 修改配置文件

1.6.1 core-site.xml
[root@serverx ~]# vim $HADOOP_HOME/etc/hadoop/core-site.xml
#在文件configuration下追加
<configuration>
    <!--设置namenode节点 -->
    <!--hadoop1.x默认端口9000,hadoop2.x默认端口8020,hadoop3.x默认端口9820 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://serverx:9820</value>
    </property>

   <!--hdfs的基础路径,被其他属性所依赖的一个基础路径,简而言之就是设置Hadoop集群过程中生成的文件保存的位置 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop-3.3.6/tmp</value>
    </property>
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
1.6.2 修改hdfs-site.xml
[root@serverx ~]# vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml
#追加一下内容
<configuration>
    <!--副本,如果某个节点宕机了我可以通过副本来进行找回,默认值为3 -->
    <property>
        <name>dfs.repliocation</name>
        <value>3</value>
    </property>

    <!-- secondarynamenode守护进程的http地址;主机名和端口 -->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>serverx1:9868</value>
    </property>

    <!--namenode守护进程的http地址:主机名和端口号,可以通过网页来监控Hadoop集群 -->
    <property>
        <name>dfs.namenode.http-address</name>
        <value>serverx:9870</value>
    </property>

</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
1.6.3 修改hadoop-env.sh
[root@serverx ~]# vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh
添加一下内容
------
export JAVA_HOME=/usr/local/jdk1.8.0_391
#Hadoop3中需要添加以下配置,设置启动集群角色的用户是谁
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
------
#编辑workers文件,Hadoop1.x和Hadoop2.x版本为slaves,切记一定要将localhost删除
[root@serverx ~]# vim workers
-------
serverx
serverx1
serverx2
------
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
1.7 启动集群
#格式化集群,格式化之前一定要将hadoop安装路径下的tmp文件删除不然会出现问题
[root@serverx ~]# hdfs namenode -format
#启动集群
[root@serverx ~]# start-dfs.sh
  • 1
  • 2
  • 3
  • 4

通过jps命令检查
serverx
serverx1
serverx2

启动之后访问192.168.31.169:9820网址
在这里插入图片描述

2. 关于集群启停的脚本

#启动HDFS相关进程,包括NameNode,SecondaryNameNode,DataNode
[root@serverx ~]# start-dfs.sh
#关闭HDFS相关进程,包括NameNode,SecondaryNameNode,DataNode
[root@serverx ~]# stop-dfs.sh
#启动一个节点的一个进程,例如启动namenode进程
[root@serverx ~]# hdfs --daemon start namenode
#关闭一个节点的一个进程,例如关闭namenode进程
[root@serverx ~]#hdfs --daemon start namenode

#启动所有机器的单个进程
[root@serverx ~]# hdfs --workers --daemon start namenode
#关闭所有机器的单个进程
[root@serverx ~]# hdfs --workers --daemon stop namenode
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

3. 进程查看脚本

#在/root/opt/下创建bin目录
[root@serverx opt]# mkdir bin
#在bin目录下编写一个叫jps-cluster.sh的脚本
[root@serverx bin]# vim  jps-cluster.sh
#在文件中加上一下内容
-----------------
#!/bin/bash
HOSTS=( serverx serverx1 serverx2 )

for HOST in ${HOSTS[*]}

do
    echo "---------- $HOST ----------"
    ssh -T $HOST << DELIMITER
    jps | grep -iv jps
    exit
DELIMITER

done
-----------------
#赋予文件执行的权限
[root@serverx bin]# sudo chmod a+x jps-cluster.sh
#配置环境变量,将文件软连接到/usr/bin/文件夹下,-sf强制执行,如果有则覆盖
[root@serverx bin]# ln -s /root/opt/bin/jps-cluster.sh /usr/bin/
#检验
[root@serverx ~]# jps-cluster.sh
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

在这里插入图片描述

4.启动日志的查看

 HDFS的角色有三个:NameNode,SecondaryNameNode,DataNode,启动的时候也会有对应的日志文件生成
 。如果启动脚本执行之后,发现对应的进程没有启动,那就可以去看日志文件。
  • 1
  • 2
  • 日志的位置:$HADOOP_HOME/logs
  • 日志的命名:hadoop-root-namenode-serverx.log

5. 集群常见问题

  • 格式化集群时报错原因
    -当前用户使用不当(最好用root用户)
    -/etc/hsots里的映射关系错误
    -免密登录认证异常
    -jdk环境变量配置错误
    -防火墙没有关闭
  • namenode进程没有启动
    -当前用户使用不当
    -重新格式化时,忘记删除${hadoop.tmp.dir}目录下的内容
    -网络震荡,造成edit日志文件的事务ID序号不连续
  • datanode进程没有启动的原因
    -/etc/hosts里的映射关系填写错误
    -免密登录异常
    -重新格式化时,忘记删除${hadoop.tmp.dir}目录下的内容,造成datanode的唯一标识符不在新集群中
  • 上述问题的暴力解决方法
    如果向重新格式化,那么需要先删除每台机器上的${hadoop.tmp.dir}指定路径下的所有内容,然后格式化;最好也把logs文件删除

总结

以上就是用Hadoop搭建完全分布式集群的方法。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/586105
推荐阅读
相关标签
  

闽ICP备14008679号