【第一站】本地虚拟机部署Hadoop分布式集群

虚拟机:VmWare + Centos7

虚拟机准备工作

一、节点分配

hadoop001 master

hadoop002 node1

hadoop003 node2

关闭防火墙

systemctl stop firewalld #三台服务器都要执行

关闭开机自启

systemctl disable firewalld #三台服务器都要执行

修改文件内容

vim /etc/sysconfig/selinux

SELINUX=disabled #三台服务器都要执行

修改为disable,如果不能保存则切换至root用户

修改虚拟机名称

每台服务器都要执行

hostnamectl set-hostname master

hostnamectl set-hostname node1

hostnamectl set-hostname node2

reboot #重启服务器看下是否已经变成对应的名称

二、设置网络

修改ens33 网卡的网络配置文件

vi /etc/sysconfig/network-scripts/ifcfg-ens33 #修改BOOTPROTO为dhcp

#增加以下配置

IPADDR="192.168.**.100"

NETMASK="255.255.255.0"

DNS1="223.5.5.5"

GATEWAY="192.168.**.1"

#注意 每台主机的IPADDR不一样其他都一样

#主机的网段要和本地的ip在一个网段下

win+R 运行cmd,执行ipconfig命令查询本地ip

本文中的**由本地ip中的同位置数字代替

#但是要保证三台主机的IPADDR都在一个网段下

master:IPADDR="192.168.**.100"

node1: IPADDR="192.168.**.101"

node2: IPADDR="192.168.**.102"

重启网卡

systemctl restart network #每台服务器都运行

#查看网络连接是否正常

配置地址映射

vim /etc/hosts #每台服务器都运行

#添加以下内容

192.168.88.100 master

192.168.88.101 node1

192.168.88.102 node2

reboot #重启

三、设置虚拟机间的通信

每台主机都要操作

创建秘钥(rsa非对称加密)

ssh-keygen -t rsa -b 4096

root用户的免密登录

ssh-copy-id master

ssh-copy-id node1

ssh-copy-id node2

#执行后会出现以下交互,全程回车使用默认配置即可,还需要输入yes确认

#无需设置密码短语,否则免密登录会需要输入短语

执行ssh,查看能否正常ssh到其他主机

ssh node1

ssh node2

hadoop用户免密登录

增加Hadoop用户

useradd hadoop

passwd hadoop #需要输入密码,用户的登陆密码

切换到hadoop用户后把上面的操作都再来一遍

su hadoop

ssh-keygen -t rsa -b 4096

ssh-copy-id master

ssh-copy-id node1

ssh-copy-id node2

四、jdk配置

我的镜像本来自带了jdk1.8,但是在后续的部署中发件无法执行jps

所以直接把重新安装的过程放在前面

替换国内第三方源

如阿里云的 CentOS 7 归档源

备份原有源文件:

sudo mkdir /etc/yum.repos.d/bak

sudo mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak

#下载阿里云的 CentOS 7 归档源

sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

#修改源文件中的$releasever为固定值7(因官方源已归档,变量无法解析)

sudo sed -i 's/$releasever/7/g' /etc/yum.repos.d/CentOS-Base.repo

清除缓存并更新源

sudo yum clean all

sudo yum makecache

重新安装 Java 1.8

sudo yum install -y java-1.8.0-openjdk-devel

需要变更环境变量,先找到正确的 JDK 根目录

通过which java跟踪路径

复制代码
# 1. 找到java命令的路径
which java
# 示例输出:/usr/bin/java

# 2. 跟踪软链接,找到实际的java执行文件
ls -l /usr/bin/java
# 示例输出:/usr/bin/java -> /etc/alternatives/java

# 3. 继续跟踪,直到找到JDK的jre目录
ls -l /etc/alternatives/java
# 示例输出:/etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64/jre/bin/java
#从最终路径中,去掉/jre/bin/java,剩下的就是 JDK 根目录:
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64

JAVA_HOME应配置为:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64

export PATH=JAVA_HOME/bin:PATH

配置完成后

source /etc/profile

#查看java版本,在node1和node2上分别验证

java -version

五、同步时间

date # 查看系统时间

timedatectl # 查看时区、同步状态 .

设置为中国时区(Asia/Shanghai)

运行 sudo timedatectl set-timezone Asia/Shanghai

六、设置共享文件夹

Vmware开启共享文件夹

挂载共享文件夹

bash 复制代码
mkdir /windowsDir
#创建共享文件夹,并将挂载设置为总是启用
echo ".host:/windowsDir /windowsDir fuse.vmhgfs-fuse allow_other,uid=1000,gid=1000 0 0" | sudo tee -a /etc/fstab
sudo mount -a  # 测试挂载
reboot #重启

host后面的是挂载的共享文件夹的名称,fuse前面的是主机上的文件夹名称

正式部署hadoop集群

一、集群部署-master节点部署

安装hadoop

创建工作目录

mkdir /software

进入目录

cd /software

本地下载好Hadoop3.3.6的tar包之后放到共享文件夹下面

根据上面的配置我这里是:E盘下的software

然后在主机上把windowsDir下面的安装包复制到本机software目录下

解压缩

tar -zxvf hadoop-3.3.6.tar.gz -C /software

修改workers

这个文件会指定节点的分布,比如DataNode有哪些

到hadoop的安装目录下

cd /software/hadoop-3.3.6/etc/hadoop

vi workers

#添加以下节点

master

node1

node2

配置hadoop相关的环境变量

cd /software/hadoop-3.3.6/etc/hadoop

vi hadoop-env.sh

#设置java和hadoop的环境变量,java的和上文的保持一致

export JAVA_HOME=/home/jdk/jdk1.8.0_151

export HAD00P_HOME=/software/hadoop-3.3.6

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

export HADOOP_LOG_DIR=$HADOOP_HOME/logs

hadoop的全局核心配置文件1

core-site.xml是 Hadoop 分布式文件系统(HDFS)中的核心配置文件,属于 Hadoop 的配置文件集合,主要用于配置 Hadoop 的核心服务(包括 HDFS 和 YARN 的基础配置),文件存放在 Hadoop 的配置目录下,通常是$HADOOP_HOME/etc/hadoop/

  1. 文件的作用 这个文件主要用来定义 Hadoop 集群的全局核心配置,会被 Hadoop 的所有守护进程和客户端读取,主要配置的内容包括:
    • HDFS 的命名节点(NameNode)的地址
    • Hadoop 的临时文件存储目录
    • HDFS 的默认文件系统的地址
    • 分布式文件系统的基础参数

cd /software/hadoop-3.3.6/etc/hadoop

vi core-site.xml

添加以下信息

XML 复制代码
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
</configuration>

正确的core-site.xml结构示例(单根节点,所有属性嵌套在中)绿色框中的要删掉

hadoop的全局核心配置文件2

hdfs-site.xmlHadoop 分布式文件系统(HDFS) 的核心配置文件之一,与core-site.xml配合使用,专门用于配置 HDFS 的具体运行参数和集群行为,而非 Hadoop 的全局核心配置。该文件同样存放在 Hadoop 的配置目录$HADOOP_HOME/etc/hadoop/下,会被 HDFS 的守护进程(NameNode、DataNode、SecondaryNameNode 等)和客户端读取。

文件的核心作用

它主要聚焦于 HDFS 的个性化配置,补充core-site.xml中未定义的 HDFS 专属参数,涵盖集群的存储策略、副本机制、守护进程的运行参数、容错机制等,是调优 HDFS 性能和功能的关键文件。

cd /software/hadoop-3.3.6/etc/hadoop

vi /hdfs-site.xml

格式问题和上面同理

XML 复制代码
<configuration>
<property>
<name>dfs.datanode.data.dir.perm</name>
<value>700</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/data/nn</value>
</property>
<property>
<name>dfs.namenode.hosts</name>
<value>master,node1,node2</value>
</property>
<property>
<name>dfs.blocksize</name>
<value>268435456</value>
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>100</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/data/dn</value>
</property>
</configuration>

#需要创建上述文件夹

#在master上执行下述命令

mkdir -p /data/dn

mkdir /data/nn

#在node1和node2上执行下述命令

mkdir -p /data/dn

二、node节点部署

将hadoop-3.3.6及其所有子文件复制到其他两个节点(node1和node2)的/software文件夹下

使用scp工具(依赖主机间的通信)

scp -r /software/hadoop-3.3.6 node1:'/software/hadoop-3.3.6'/

scp -r /software/hadoop-3.3.6 node2:'/software/hadoop-3.3.6'/

#查看node1、node2复制过去的文件夹是否正常

#把master配置好的环境变量文件复制过去,要保证三个节点的java、hadoop部署位置一致

scp -r /etc/profile node1:/etc/profile

scp -r /etc/profile node2:/etc/profile

#加载配置文件,在node1和node2上分别执行

source /etc/profile

#查看java版本,在node1和node2上分别验证

java -version

#给hadoop用户授权(三个节点都要赋权)

chown -R hadoop:hadoop /data

chown -R hadoop:hadoop /software/hadoop-3.3.6

启动集群

一、集群启动相关命令

bash 复制代码
start-dfs.sh 启动hdfs服务
然后jps查看进程,正常应该是这样
# 通过jps验证启动的程序,正常情况下,master应该启动如下进程:
6576 Jps
86147 DataNode
86522 SecondaryNameNode
85741 NameNode
 
# node1和node2应该启动的进程包括:
8729 Jps
112543 DataNode

但是发现DataNode没有启动然后进行核查

表现为jps下没有DataNode进程

二、异常处理

原因分析

最常见原因:DataNode 与 NameNode 的 clusterID 不一致

这是 DataNode 无法启动的首要原因:
原因:NameNode 格式化后生成的clusterID被存储在其数据目录中,若多次格式化 NameNode,新的clusterID会与 DataNode 本地存储的旧clusterID不匹配,导致 DataNode 拒绝启动。

异常修复方案

停止所有 HDFS 服务:

stop-dfs.sh

删除 DataNode 的存储目录(所有从节点执行)

DataNode 的存储目录是/data/dn,删除该目录下的所有数据:(参考自己的目录,我这里是单独给data新建的)

rm -rf /data/dn/*

重新启动 HDFS 服务

start-dfs.sh

也可以通过查看日志发现问题

tail -100f $HADOOP_HOME/logs/hadoop-hadoop-datanode-master.log

这个错误的核心是DataNode 与 NameNode 的 clusterID 不匹配(日志中明确显示Incompatible clusterIDs),这是 DataNode 无法启动的典型原因 ------NameNode 格式化后生成了新的 clusterID,而 DataNode 本地存储的还是旧的 clusterID。


参考来源:

HADOOP集群部署-CSDN博客

豆包

相关推荐
天天讯通2 小时前
BI 报表:呼叫中心的伪刚需
大数据·前端·数据库
跨境卫士—小依2 小时前
TikTok Shop 进化全解析,从内容驱动到品牌共建,抢占跨境新赛道
大数据·人工智能·跨境电商·亚马逊·防关联
wdfk_prog2 小时前
[Linux]学习笔记系列 -- [fs]filesystems
linux·笔记·学习
fengyehongWorld2 小时前
Linux tree命令
linux
字节跳动数据平台2 小时前
火山引擎发布《AI时代企业数据基建升级路线图》
大数据
像名字一样难取的昵称2 小时前
Linux学习笔记:十八、Linux文件的压缩,解压缩一站式学习
linux·运维·笔记·学习·ubuntu·ssh
少年、潜行3 小时前
F1C100/200S学习笔记(2)-- 初次FLASH启动(裸机)和SD卡启动(Linux)
linux·笔记·f1c200s
连线Insight3 小时前
智谱、MiniMax争夺“大模型第一股”:高增长之下各有难题
大数据·人工智能·microsoft
laozhao4323 小时前
谁的使用效果好?标标达与乙方宝的使用情况多维度解析
大数据