hadoop安装与搭建hdfs

配置前必看

本帖的主要目的是用最平实的语言描述配置的进程,同时在每个章节为可能涉及的知识点提供相应的网站以供读者学习。最重要的还是给我自己留个配置的日记。这样Linux玩崩了也能找到回家的路。

  1. 本帖主要涉及的目录一共有三个,如有需要,在根目录/下创建export目录存放以下三个目录(建议)。(解压目录)servers、(软件安装目录)software、(数据/日志目录)data如果自己的目录与本帖的目录不一样,请按照自己实际情况来
  2. 本帖基于centos 7.9配置,因此配置本帖软件请先安装好系统后将软件包上传并解压好
  3. 如若配置中报错,请第一时间查看前置软件是否正确安装配置并正常运行其次查看是否兼容性问题。
  4. 本帖所有命令都在root用户下执行如果非root用户,请在命令前添加sudo

前置准备

镜像:

软件

环境

  • 准备三台虚拟机,虚拟机主机名为masterslave1slave2

安装与配置

1.解压

查看自己的虚拟机上是否已经上传好软件至software

image-20230911221047145

Hadoopjdk解压至servers中依次执行以下命令

1
2
3
tar -zxvf hadoop-3.2.1.tar.gz /export/servers

tar -zxvf jdk-8u231-linux-x64.tar.gz /export/servers

image-20230911221534209

2.配置环境变量

执行以下命令,将jdkhadoop目录路径依次添加到/etc/profile底部

1
vi /etc/profile
1
2
3
4
5
export JAVA_HOME=/export/servers/jdk1.8.0_231
export PATH=$PATH:$JAVA_HOME/bin

export HADOOP_HOME=/export/servers/hadoop-3.2.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

image-20230911222023913

刷新环境变量

1
source /etc/profile

验证,如果出现版本号就证明安装成功

1
2
3
java -version

hadoop version

image-20230911222300447

环境搭建

1.查看主机名与hosts文件

查看自己的三台虚拟机主机名是否都已经更改、hosts文件是否都已经正确添加地址

1
hostname

如果没修改主机名请使用以下命令

1
hostnamectl set-hostname 新的主机名

修改完后重启

1
reboot

查看与修改hosts文件

1
vi /etc/hosts

image-20230911223954974

1
2
3
主机 192.168.100.128 master
从机 192.168.100.129 slave1
从机 192.168.100.130 slave2

如果没有添加,则输入命令 vim /etc/hosts进入文件,把东西写进去,键盘按i或者o进入编辑模式,编辑完毕,按esc输入:wq 保存退出

2.ssh配置

配置密钥文件(三台都要做)

生成密钥文件输入命令,生成key,都不输入密码,一直按回车,/root就会生成.ssh的文件夹

1
ssh-keygen -t rsa

分发密钥到其他节点

1
2
3
ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2

测试登录,依次输入以下命令,退出输入exit

1
2
3
ssh master
ssh slave1
ssh slave2

image-20230911230655448

3.命令同步脚本

创建脚本存储目录

1
cd /root/bin/

创建命令同步脚本文件

1
vi xcall

输入下列代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash
if(($#==0))
then
echo "请输入参数"
exit;
fi
echo "----------------master-----------------"
ssh master $@
for((i=1;i<3;i++))
do
echo "----------------slave$i-----------------"
ssh slave$i $@
done
echo "命令已执行完毕"

保存退出:wq赋予脚本权限chmod 777 xcall

配置文件

1
vi /root/.bashrc

在文件末尾追加下列代码

1
source /etc/profile

image-20230911225624015

保存退出:wq

1
vi /etc/profile

在底部添加

1
export PATH=/root/bin:$PATH

保存退出:wq刷新文件source /etc/profile

image-20230911225850427

注意:以上操作必须在三台机器都要执行。

检验实验脚本是否可以使用

1
xcall jps

image-20230911230041563

4.文件同步脚本

创建脚本存储目录

1
cd /root/bin/

创建命令同步脚本文件

1
vi xsync

输入下列代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
if(($#!=1))
then
echo "只能输入一个参数"
exit;
fi
dirpath=$(cd -P `dirname $1`;pwd)
filename=$(basename $1)
echo "-----------------master--------------"
rsync -rvlt $dirpath/$filename root@master:$dirpath
for((i=1;i<3;i++))
do
echo "-----------------slave$i----------------"
rsync -rvlt $dirpath/$filename root@slave$i:$dirpath
done
echo "命令执行完毕"

保存退出:wq赋予脚本权限chmod 777 xsync

使用文件同步脚本将文件同步脚本分发到另外两台机器

1
xsync xsync

可以到其他节点的/root/bin目录下查看文件是否分发成功

image-20230911232602097

如果提示rsync: 未找到命令,前提需要安装rsync,最小化安装系统的可能没有自带该命令包

image-20230911233028618

1
yum install rsync

HDFS安装与配置

1.修改HDFS配置文件

进入目录

1
cd /export/servers/hadoop-3.2.1/etc/hadoop/

image-20230912000709355

设置JDK安装目录,编辑文件hadoop-env.sh,在文件末尾加上jdk的安装路径,jdk的安装路径根据实际情况更改

1
vi hadoop-env.sh
1
export JAVA_HOME=/export/servers/jdk1.8.0_231

2.指定HDFS主节点

编辑文件core-site.xml,将如下内容嵌入此文件里最后两行的configuration标签之间(注意修改master名称为自己的名称,我的主机名就叫master)

1
vi core-site.xml
1
2
3
4
5
6
7
8
<property>
<name>hadoop.tmp.dir</name>
<value>/export/servers/hadoop-3.2.1/cloud</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>

3.指定HDFS从节点

编辑文件workers,将slave1与slave2的hostname主机名称添加到文件中,将下列代码追加到文件末尾,同时删除localhost

1
vi workers
1
2
3
master
slave1
slave2

4.配置 yarn-site.xml

1
vi yarn-site.xml

输入如下代码,嵌入此文件里最后两行的configuration标签之间

1
2
3
4
5
6
7
8
9
10
<!-- Reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>

5.配置 mapred-site.xml

1
vi mapred-site.xml

添加下列代码添加在configuration标签之间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>

6.配置 hdfs-site.xml

1
vi hdfs-site.xml

添加下列代码,添加在configuration标签之间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave2:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
<description>2</description>
</property>
<!--配置namenode的web界面-->
<property>
<name>dfs.namenode.http-address</name>
<value>master:50070</value>
</property>

7.配置 yarn-env.sh

1
vi yarn-env.sh

在文件末尾添加(jdk是你自己版本)

1
export JAVA_HOME=/export/servers/jdk1.8.0_231

8.配置 mapred-env.sh

1
vi mapred-env.sh

在文件末尾添加(注意JDK的版本号)

1
export JAVA_HOME=/export/servers/jdk1.8.0_231

9.拷贝文件

将整个hadoop解压包至其它服务器slave1slave2

1
xsync /export/servers/hadoop-3.2.1
1
scp -r /export/servers/hadoop-3.2.1 slave1:/export/servers/hadoop-3.2.1
1
scp -r /export/servers/hadoop-3.2.1 slave2:/export/servers/hadoop-3.2.1

集群环境格式化及启动

格式化主节点:在master服务器上,进入到hadoop安装包的bin目录下

1
cd /export/servers/hadoop-3.2.1/bin

进行格式化

1
./hdfs namenode -format

start-dfs.shstop-dfs.sh两个文件顶部添加以下参数

1
2
3
vi /export/servers/hadoop-3.2.1/sbin/start-dfs.sh

vi /export/servers/hadoop-3.2.1/sbin/stop-dfs.sh

添加下列内容

1
2
3
4
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

start-yarn.shstop-yarn.sh两个文件顶部也需添加以下内容

1
2
3
vi /export/servers/hadoop-3.2.1/sbin/start-yarn.sh

vi /export/servers/hadoop-3.2.1/sbin/stop-yarn.sh

添加下列内容

1
2
3
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=roo

master结点启动Hadoop:在master结点中进入hadoop安装包的sbin目录下启动Hadoop

1
/export/servers/hadoop-3.2.1/sbin/start-all.sh

查看进程并验证HDFS环境

注意:这些东西一个都不能少

为了方便后续操作,我们可以把hadoop也添加到系统环境变量(三台节点上都要添加)

1
vi /etc/profile

将下述代码追加到文件末尾

1
2
3
export HADOOP_HOME=/export/servers/hadoop-3.2.1

export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

刷新文件

1
source /etc/profile

退出集群

1
stop-all.sh