0


用Hadoop搭建完全分布式集群

用Hadoop搭建完全分布式集群

文章目录


一、平台软件说明

Windows,Hadoop3.x版本,3台虚拟机(centos)
3台虚拟机配置如下

主机名IP地址serverx192.168.31.169serverx1192.168.31.170serverx2192.168.31.171

二、完全分布式说明

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

守护进程布局
NameNodeDataNodeSecondaryNodeserverx√√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主机映射

[root@serverx ~]# vim /etc/hosts.....
192.168.31.169 serverx
192.168.31.170 serverx1
192.168.31.171 serverx2
.....

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.4 时间同步

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

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.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.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.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.7 启动集群
#格式化集群,格式化之前一定要将hadoop安装路径下的tmp文件删除不然会出现问题[root@serverx ~]# hdfs namenode -format#启动集群[root@serverx ~]# start-dfs.sh

通过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

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[*]}doecho"---------- $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

在这里插入图片描述

4.启动日志的查看

 HDFS的角色有三个:NameNode,SecondaryNameNode,DataNode,启动的时候也会有对应的日志文件生成
 。如果启动脚本执行之后,发现对应的进程没有启动,那就可以去看日志文件。
  • 日志的位置:$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搭建完全分布式集群的方法。

标签: hadoop 大数据

本文转载自: https://blog.csdn.net/m0_74346394/article/details/136040143
版权归原作者 小猪佩奇¥ 所有, 如有侵权,请联系我们删除。

“用Hadoop搭建完全分布式集群”的评论:

还没有评论