Hadoop部署完全分布式

news/2024/11/8 22:32:37/

​ 在真实的企业环境中,服务器集群会使用到多台机器,共同配合,来构建一个完整的分布式文件系统。而在这样的分布式文件系统中,HDFS相关的守护进程也会分布在不同的机器上,例如:

  • NameNode守护进程,尽可能的单独部署在一台硬件性能较好的机器中。
  • 其他的每台机器上都会部署一个DataNode守护进程,一般的硬件环境即可。
  • SecondaryNameNode守护进程最好不要和NameNode在同一台机器上。

平台软件说明

平台&软件说明
宿主机操作系统Windows / MacOS
虚拟机操作系统CentOS 7
虚拟机软件Windows: VMWare
MacOS: Parallels Desktop
虚拟机主机名: qianfeng01, IP地址: 192.168.10.101
主机名: qianfeng02, IP地址: 192.168.10.102
主机名: qianfeng03, IP地址: 192.168.10.103
SSH工具Windows: MobaXterm / FinalShell
MacOS: FinalShell / iTerm2
软件包上传路径/root/softwares
软件安装路径/usr/local
JDKX64: jdk-8u321-linux-x64.tar.gz
ARM: jdk-8u321-linux-aarch64.tar.gz
HadoopX64: hadoop-3.3.1.tar.gz
ARM: hadoop-3.3.1-aarch64.tar.gz
用户root

守护进程布局

NameNodeDataNodeSecondaryNameNode
qianfeng01
qianfeng02
qianfeng03

集群搭建准备

  1. 总纲

    1. 三台机器的防火墙必须是关闭的.
    2. 确保三台机器的网络配置畅通(NAT模式,静态IP,主机名的配置)
    3. 确保/etc/hosts文件配置了ip和hostname的映射关系
    4. 确保配置了三台机器的免密登陆认证(克隆会更加方便)
    5. 确保所有机器时间同步
    6. jdk和hadoop的环境变量配置
    复制代码
  2. 防火墙关闭

    [root@qianfeng01 ~]# systemctl stop firewalld
    [root@qianfeng01 ~]# systemctl disable firewalld
    [root@qianfeng01 ~]# systemctl stop NetworkManager
    [root@qianfeng01 ~]# systemctl disable NetworkManager#最好也把selinux关闭掉,这是linux系统的一个安全机制,进入文件中将SELINUX设置为disabled
    [root@qianfeng01 ~]# vi /etc/selinux/config
    .........
    SELINUX=disabled			
    .........
    复制代码
  3. 主机映射

    [root@qianfeng01 ~]#  vi /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.10.101 qianfeng01  #添加本机的静态IP和本机的主机名之间的映射关系 
    192.168.10.102 qianfeng02
    192.168.10.103 qianfeng03
    复制代码
  4. 免密登录

    # 1. 使用rsa加密技术,生成公钥和私钥。一路回车即可
    [root@qianfeng01 ~]# ssh-keygen -t rsa	# 2. 使用ssh-copy-id命令
    [root@qianfeng01 .ssh]# ssh-copy-id  root@qianfeng01
    [root@qianfeng01 .ssh]# ssh-copy-id  root@qianfeng02
    [root@qianfeng01 .ssh]# ssh-copy-id  root@qianfeng03# 3. 进行验证	
    [hadoop@qianfeng01 .ssh]# ssh qianfeng01
    [hadoop@qianfeng01 .ssh]# ssh qianfeng02
    [hadoop@qianfeng01 .ssh]# ssh qianfeng03# 4. 继续在qianfeng02和qianfeng03生成公钥和私钥,给三台节点拷贝。
    复制代码
  5. 时间同步

    # 三台节点都要执行的命令
    ntpdate ntp.aliyun.com
    复制代码
  6. 安装JDK和配置环境变量

    图文管理系统

配置文件

  1. core-site.xml

    <configuration><!-- 设置namenode节点 --><!-- 注意: hadoop1.x时代默认端口9000 hadoop2.x时代默认端口8020 hadoop3.x时代默认端口 9820 --><property><name>fs.defaultFS</name><value>hdfs://qianfeng01:9820</value></property><!-- hdfs的基础路径,被其他属性所依赖的一个基础路径 --><property><name>hadoop.tmp.dir</name><value>/usr/local/hadoop-3.3.1/tmp</value></property>
    </configuration>
    复制代码
  2. hdfs-site.xml

    <configuration><!-- 块的副本数量 --><property><name>dfs.replication</name><value>3</value></property><!-- secondarynamenode守护进程的http地址:主机名和端口号。参考守护进程布局 --><property><name>dfs.namenode.secondary.http-address</name><value>qianfeng02:9868</value></property><!-- namenode守护进程的http地址:主机名和端口号。参考守护进程布局 --><property><name>dfs.namenode.http-address</name><value>qianfeng01:9870</value></property>
    </configuration>
    复制代码
  3. hadoop-env.sh

    export JAVA_HOME=/usr/local/jdk1.8.0_321# Hadoop3中,需要添加如下配置,设置启动集群角色的用户是谁
    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
    复制代码
  4. works

    qianfeng01
    qianfeng02
    qianfeng03
    复制代码
  5. 分发

    # 我们已经完成了一个节点的环境配置,其他的节点也需要保持完全相同的配置。我们只需要将qianfeng01节点的配置拷贝到其他的节点即可。
    # 分发之前,先检查自己的节点数据文件是否存在
    # 如果之间格式化过集群,那么会在core-site.xml中配置的hadoop.tmp.dir路径下生成文件,先将其删除
    [root@qianfeng01 ~]# stop-dfs.sh
    [root@qianfeng01 ~]# rm -rf $HADOOP_HOME/tmp
    复制代码
    [root@qianfeng01 ~]# cd /usr/local
    [root@qianfeng01 local]# scp -r jdk1.8.0_321/ qianfeng02:$PWD
    [root@qianfeng01 local]# scp -r jdk1.8.0_321/ qianfeng03:$PWD[root@qianfeng01 local]# scp -r hadoop-3.3.1/ qianfeng02:$PWD
    [root@qianfeng01 local]# scp -r hadoop-3.3.1/ qianfeng03:$PWD[root@qianfeng01 local]# scp file/profile qianfeng02:/etc/
    [root@qianfeng01 local]# scp file/profile qianfeng02:/etc/
    复制代码

文章底部扫码,免费领取大数据资料大礼包!  

格式化集群

hdfs namenode -format
复制代码

启动集群

start-dfs.sh			# 启动HDFS所有进程(NameNode、SecondaryNameNode、DataNode)
stop-dfs.sh				# 停止HDFS所有进程(NameNode、SecondaryNameNode、DataNode)hadoop-daemon.sh start namenode				# 只开启NameNode
hadoop-daemon.sh start secondarynamenode	# 只开启SecondaryNameNode
hadoop-daemon.sh start datanode				# 只开启DataNodehadoop-daemon.sh stop namenode				# 只关闭NameNode
hadoop-daemon.sh stop secondarynamenode		# 只关闭SecondaryNameNode
hadoop-daemon.sh stop datanode				# 只关闭DataNode
复制代码

进程查看

# qianfeng01节点
[root@qianfeng01 hadoop]# jps
13442 NameNode
13618 DataNode
13868 Jps# qianfeng02节点
[root@qianfeng02 ~]# jps
10514 SecondaryNameNode
10548 Jps
10405 DataNode# qianfeng03节点
[root@qianfeng03 ~]# jps
10931 DataNode
11001 Jps
复制代码

文章底部扫码,免费领取大数据资料大礼包! 

启动日志查看

​ HDFS的角色有三个: NameNode、SecondaryNameNode、DataNode,启动的时候也会有对应的日志文件生成。如果在启动脚本执行之后,发现对应的角色没有启动起来,那就可以去查看日志文件,检查错误的详情,解决问题。

  • 日志的位置: $HADOOP_HOME/logs

  • 日志的命名: hadoop-username-daemon-host.log

    例如:

    • hadoop-root-namenode-qianfeng01.log => qianfeng01节点上的namenode的日志
    • hadoop-root-datanode-qianfeng02.log => qianfeng02节点上的datanode的日志

集群常见问题

  • 格式化集群时,报错原因

    • 当前用户使用不当
    • /etc/hosts里的映射关系填写错误
    • 免密登录认证异常
    • jdk环境变量配置错误
    • 防火墙没有关闭
  • namenode进程没有启动的原因:

    • 当前用户使用不当
    • 重新格式化时,忘记删除${hadoop.tmp.dir}目录下的内容
    • 网络震荡,造成edit日志文件的事务ID序号不连续
  • datanode出现问题的原因

    • /etc/hosts里的映射关系填写错误
    • 免密登录异常
    • 重新格式化时,忘记删除${hadoop.tmp.dir}目录下的内容,造成datanode的唯一标识符不在新集群中。
  • 上述问题暴力解决: 重新格式化

    如果想重新格式化,那么需要先删除每台机器上的${hadoop.tmp.dir}指定路径下的所有内容,然后再格式化:最好也把logs目录下的内容也清空,因为日志内容已经是前一个废弃集群的日志信息了,留着也无用。

案例演示

  1. 数据准备

    [root@qianfeng01 ~]# mkdir input && cd input
    [root@qianfeng01 input]# echo "hello world hadoop linux hadoop" >> file1
    [root@qianfeng01 input]# echo "hadoop linux hadoop linux hello" >> file1
    [root@qianfeng01 input]# echo "hadoop linux mysql linux hadop" >> file1
    [root@qianfeng01 input]# echo "hadoop linux hadoop linux hello" >> file1
    [root@qianfeng01 input]# echo "linux hadoop good programmer" >> file2
    [root@qianfeng01 input]# echo "good programmer qianfeng good" >> file2
    复制代码
  2. 上传到集群

    # 将数据上传到HDFS
    [root@qianfeng01 input]# hdfs dfs -put ~/input/ /
    # 检查是否已经上传成功
    [root@qianfeng01 input]# hdfs dfs -ls -R /
    drwxr-xr-x   - root supergroup          0 2022-01-28 13:11 /input
    -rw-r--r--   1 root supergroup         31 2022-01-28 13:11 /input/file
    -rw-r--r--   1 root supergroup        127 2022-01-28 13:11 /input/file1
    -rw-r--r--   1 root supergroup         59 2022-01-28 13:11 /input/file2
    复制代码
  3. 执行任务

    [root@qianfeng01 input]# hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /input /output
    复制代码
  4. 查看结果

    [root@qianfeng01 input]# hdfs dfs -cat /output/*
    good	3
    hadoop	9
    hadop	2
    hello	3
    linux	10
    mysql	2
    programmer	2
    qianfeng	1
    world	1
    

 也可以看视频:

千锋教育大数据全套视频教程800集完整版(学完可就业/入门到精通)


http://www.ppmy.cn/news/77915.html

相关文章

go-gf框架两个表以事务方式写入示例

下面是对每一行代码的中文解释&#xff1a; // 创建数据库连接对象 var tx gdb.TX这行代码声明了一个名为tx的变量&#xff0c;类型为gdb.TX&#xff0c;表示数据库事务对象。 // 开启事务 if tx, err g.DB().Ctx(ctx).Begin(ctx); err nil {这行代码通过在数据库连接&…

Python appium搭建app自动化测试环境

目录 前言 App自动化环境安装 安装安卓开发工具 安装模拟器 前言 appium做app自动化测试&#xff0c;环境搭建是比较麻烦的。 也是很多初学者在学习app自动化之时&#xff0c;花很多时间都难跨越的坎。 但没有成功的环境&#xff0c;就没有办法继续后续的使用。 在app自…

2023 年互联网就业怎样?

来说说我们公司最近的情况&#xff1a; 15K的Java后端程序员&#xff0c;岗位发布一天&#xff0c;收到简历212份&#xff1b; 28K的高级全栈工程师&#xff0c;岗位发布6小时&#xff0c;收到简历349份&#xff1b; 技术主管不信邪&#xff0c;200/天的Python实习生&#xff…

2023-05-24:为什么要使用Redis做缓存?

2023-05-24&#xff1a;为什么要使用Redis做缓存&#xff1f; 答案2023-05-24&#xff1a; 缓存的好处 买啤酒和喝啤酒的例子可以帮助我们理解缓存的好处。 假设你在超市里买了一箱啤酒&#xff0c;如果你需要每次想喝啤酒就去超市购买&#xff0c;无疑会浪费很多时间和精力…

OpenCV的40道入门选择题

以下哪个库可以在Python中使用OpenCV&#xff1f; A. numpy B. matplotlib C. scipy D. all of the above 答案&#xff1a;D 解析&#xff1a;numpy、matplotlib和scipy都是与OpenCV一起使用的常用库。 在OpenCV中&#xff0c;以下哪个函数用于加载图像&#xff1f; A. cv2.i…

Python3安装pyhanlp最佳解决方法

1、Hanlp介绍 Hanlp是一款中文自然语言处理工具。Hanlp支持多种自然语言处理任务&#xff0c;包括分词、词性标注、命名实体识别、依存句法分析、情感分析、文本分类等。其主要优点包括&#xff1a; 高准确率&#xff1a;Hanlp采用了基于神经网络的分词方法&#xff0c;有效提…

炸金花底层模拟

一.说明 经常刷视频&#xff0c;看到一个有意思的项目&#xff0c;非常适合练手&#xff0c;今天这里我们实现炸金花的底层模拟。 二.游戏规则 1.一副扑克牌去掉大小王&#xff0c;剩下52张牌2.参与游戏的玩家每人发三张牌3.比较每个人手中牌的大小4.若三张牌相同&#xff0…

IP 查询/手机在网状态等热门API大全分享

IP 归属地查询 IP归属地-IPv4区县级&#xff1a;根据IP地址查询归属地信息&#xff0c;包含43亿全量IPv4&#xff0c;支持到中国地区&#xff08;不含港台地区&#xff09;区县级别&#xff0c;含运营商数据。IP归属地-IPv6区县级&#xff1a;根据IP地址&#xff08;IPv6版本&…