HDFS | 分布式存储 |
---|---|
主角色 | NameNode |
从角色 | DataNode |
主角色辅助角色 | SecondaryNameNode |
YARN | 资源管理调度 |
---|---|
主角色 | ResoureManager |
从角色 | NodeManager |
源码包下载地址
集群规划
主机 | 角色 |
---|---|
node1 | NN DN RM NM |
node2 | SNN DN NM |
node3 | DN NM |
基础环境搭建
#编译环境软件安装目录
mkdir -p /export/server
#设置host映射
cat >> /etc/hosts <<EOF
#你每台主机的IP地址 和你自己设置的主机名或者域名 这几行都是可以你自己设置的
192.168.88.128 node1
192.168.88.129 node2
192.168.88.130 node3
EOF
# JDK 1.8安装 上传 jdk-8u241-linux-x64.tar.gz到/export/server/目录下
tar zxvf jdk-8u241-linux-x64.tar.gz
#关闭防火墙与selinux 脚本在下方赋予执行权限
#ssh免密登录(node1>node1|node2|node3)
ssh keygen
ssh-copy-id node1
ssh-copy-id node2
ssh-copy-id node3
#同步网络时间
yum -y install ntpdate
ntpdate ntp4.aliyun.com
#统一工作目录
mkdir -p /export/server/ #软件安装路径
mkdir -p /export/data/ #数据存储路径
mkdir -p /export/software/ #安装包存放路径
#配置环境变量
vim /etc/profile
export JAVA_HOME=/export/server/jdk1.8.0_241
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#重新加载环境配置变量
source /etc/profile
关闭防火墙和selinux脚本
#!/bin/bash
# 关闭防火墙
echo "正在关闭防火墙..."
sudo systemctl stop firewalld
sudo systemctl disable firewalld
echo "防火墙已关闭并禁用。"
# 检查 SELinux 状态
sestatus=$(sestatus | grep "SELinux status" | awk '{print $3}')
if [ "$sestatus" == "enabled" ]; then
# 关闭 SELinux
echo "正在关闭 SELinux..."
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
echo "SELinux 已关闭。"
else
echo "SELinux 已经处于禁用状态,无需操作。"
fi
echo "脚本执行完毕。"
Hadoop安装包上传到node1 /export/server
[root@node1 server]# ls
hadoop-3.3.0-Centos7-64-with-snappy.tar.gz jdk1.8.0_241
#解压
tar zxvf hadoop-3.3.0-Centos7-64-with-snappy.tar.gz
修改配置文件node1最终将这些文件实验scp传输到其他主机(hadoop-3.3.0/etc/hadoop)
hadoop-env.sh
#文件最后添加
export JAVA_HOME=/export/server/jdk1.8.0_241
#告诉Hadoop JDK在哪
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
core-site.xml(在两个configuration中间粘贴)
<property>
<name>fs.defaultFSname>
<value>hdfs://node1:8020value>
property>
<property>
<name>hadoop.tmp.dirname>
<value>/export/data/hadoop-3.3.0value>
property>
<property>
<name>hadoop.http.staticuser.username>
<value>rootvalue>
property>
<property>
<name>hadoop.proxyuser.root.hostsname>
<value>*value>
property>
<property>
<name>hadoop.proxyuser.root.groupsname>
<value>*value>
property>
<property>
<name>fs.trash.intervalname>
<value>1440value>
property>
hdfs-site.xml(在两个configuration中间粘贴)
<property>
<name>dfs.namenode.secondary.http-addressname>
<value>node2:9868value>
property>
mapred-site.xml(在两个configuration中间粘贴)
<property>
<name>mapreduce.framework.namename>
<value>yarnvalue>
property>
<property>
<name>mapreduce.jobhistory.addressname>
<value>node1:10020value>
property>
<property>
<name>mapreduce.jobhistory.webapp.addressname>
<value>node1:19888value>
property>
<property>
<name>yarn.app.mapreduce.am.envname>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}value>
property>
<property>
<name>mapreduce.map.envname>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}value>
property>
<property>
<name>mapreduce.reduce.envname>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}value>
property>
yarn-site.xml
<property>
<name>yarn.resourcemanager.hostnamename>
<value>node1value>
property>
<property>
<name>yarn.nodemanager.aux-servicesname>
<value>mapreduce_shufflevalue>
property>
<property>
<name>yarn.nodemanager.pmem-check-enabledname>
<value>falsevalue>
property>
<property>
<name>yarn.nodemanager.vmem-check-enabledname>
<value>falsevalue>
property>
<property>
<name>yarn.log-aggregation-enablename>
<value>truevalue>
property>
<property>
<name>yarn.log.server.urlname>
<value>http://node1:19888/jobhistory/logsvalue>
property>
<property>
<name>yarn.log-aggregation.retain-secondsname>
<value>604800value>
property>
workers
node1
node2
node3
分发同步hadoop安装包
cd /export/server
scp -r hadoop-3.3.0 root@node2:$PWD
scp -r hadoop-3.3.0 root@node3:$PWD
将Hadoop添加到环境变量当中
vim /etc/profile
export HADOOP_HOME=/export/server/hadoop-3.3.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile
#scp给其他两台机器
[root@node1 ~]# scp /etc/profile node2:/etc/
profile 100% 2064 1.3MB/s 00:00
[root@node1 ~]# scp /etc/profile node3:/etc/
profile 100% 2064 1.1MB/s 00:00
NameNode format(格式化)
首次启动,必须进行格式化操作
本质初始化,进行HDFS清理和准备工作
只进行一次,后续不再需要
如果多次格式化会导致hdfs集群主从角色互不识别。通过删除所有机器
hadoop.tmp.dir
目录重新format解决
hdfs namenode -format
集群启停
在node1上,使用软件自带的shell脚本一键启动。前提:配置好机器之间的SSH免密登录和workers文件。
HDFS集群
start-dfs.sh
stop-dfs.sh
start-yarn.sh
stop-yarn.sh
Hadoop集群
start-all.sh
stop-all.sh
进程状态,日志查看
jps命令
Hadoop启动日志路径 /export/server/hadoop-3.3.0/logs/
Web UI页面 (C:\Windows\System32\drivers\etc\hosts
配置IP地址和主机名)
#创建文件夹
[root@node1 ~]# hadoop fs -mkdir /rkun18
[root@node1 ~]# hadoop fs -ls /
Found 1 items
drwxr-xr-x - root supergroup 0 2023-06-13 01:26 /rkun18
在Web UI上也可以查看,操控:
#上传文件
[root@node1 ~]# echo hello hadoop > hp
[root@node1 ~]# ll
total 12
-rw-------. 1 root root 1228 Jun 12 10:16 anaconda-ks.cfg
-rw-r--r-- 1 root root 13 Jun 13 01:29 hp
-rwxr--r--. 1 root root 580 Jun 12 12:01 spt
[root@node1 ~]# hadoop fs -put hp /
#计算圆周率
[root@node1 mapreduce]# pwd
/export/server/hadoop-3.3.0/share/hadoop/mapreduce
[root@node1 mapreduce]# ll
... #此处省略
-rw-r--r--. 1 root root 281197 Jul 15 2021 hadoop-mapreduce-examples-3.3.0.jar
...
[root@node1 mapreduce]# hadoop jar hadoop-mapreduce-examples-3.3.0.jar pi 2 2
Number of Maps = 2
Samples per Map = 2
Wrote input for Map #0
Wrote input for Map #1
Starting Job
... #此处省略
Job Finished in 66.387 seconds
Estimated value of Pi is 4.00000000000000000000