Hadoop3.3.6 三节点集群安装
准备工作
准备三台机器,大小为4c8g,主节点为 8c16g。并需要保证网络连通性,每台机器都相互ping一下
1、关闭网络防火墙
# 查看网络防火墙状态
sudo systemctl status firewalld
# 立即停止 firewalld
sudo systemctl stop firewalld
# 防止重启后再次启动,可以禁用防火墙服务
sudo systemctl disable firewalld
2、配置三台机器的节点映射
设置IP映射,在/etc/hosts添加如下内容(每个节点都需修改,)
sudo vi /etc/hosts
192.168.10.100 hadoop100 hadoop100.centos.com
192.168.10.101 hadoop101 hadoop101.centos.com
192.168.10.102 hadoop102 hadoop102.centos.com
编译生效
source /etc/profile
一、安装java 1.8JDK
java 1.8JDK安装
(每个节点都需要安装,安装的版本和目录保持一致)
二、配置节点间免密登录
1 生成密匙
在每台主机上使用 ssh-keygen 命令生成公钥私钥对:
ssh-keygen
连按三次
2 免密登录
将 hadoop001 的公钥写到本机和远程机器的 ~/ .ssh/authorized_key 文件中:
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop100 依次输入yes,root用户的密码
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop101
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop102
3 验证免密登录
依次输入,可成功跳转后exit回到hadoop100
ssh hadoop100
exit;
ssh hadoop101
exit;
ssh hadoop102
exit;
4、报错处理
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
修改SSH 配置允许公钥认证
vi /etc/ssh/sshd_config
#将PasswordAuthentication设置成为yes(一般在文件的末尾几行):
PermitRootLogin yes
PubkeyAuthentication yes
PasswordAuthentication yes
#vi中使用查找功能快速定位
#进入普通模式(如果您已经在插入模式中),按 Esc 键。
#输入 / 后跟您想要搜索的词或短语。
#按 Enter 键进行搜索。
#n 键:移动到下一个匹配项。
#N 键:移动到上一个匹配项。
#例如,要搜索单词 "PermitRootLogin ",您将输入:/PermitRootLogin
#修改完成后重启ssh服务
systemctl restart sshd.service
# 查看ssh服务状态
sudo systemctl status sshd
三、 Hadoop安装
1、下载hadoop
hadoop3.3.6官方下载
2、解压缩hadoop-3.3.6.tar.gz 文件
tar -zxvf /opt/soft/hadoop-3.3.6.tar.gz -C /opt/app
-z:使用 gzip 解压缩算法。这是用来解压 .gz 结尾的文件的
-x:提取归档文件的内容
-f:指定要处理的归档文件的名称,后面跟着文件名 hadoop-3.3.6.tar.gz
-C:指定解压后的文件应放置在哪个目录下。在这里,目录是 /opt/app
解压后即可,看到/opt/app/hadoop-3.3.6文件夹
3、配置Hadoop环境变量
vim /etc/profile.d/my_env.sh配置JAVA和Hadoop环境变量(每台机器都需要配置)
vim /etc/profile.d/my_env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_281-amd64
export HADOOP_HOME=/opt/app/hadoop-3.3.6
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
修改后执行【source /etc/profile】命令使其生效
4、配置Hadoop的配置文件
# 进入修改目录
cd /opt/app/hadoop-3.3.6/etc/hadoop/
** (1)、修改 hadoop-env.sh**
export JAVA_HOME=/usr/java/jdk1.8.0_431
** (2)、修改配置文件yarn-env.sh 在文件末尾加上**
export JAVA_HOME=/usr/java/jdk1.8.0_431
(3) 修改配置文件 workers
#删除原有 localhost,添加如下内容
#【不能有空格和空行】
hadoop101
hadoop102
注: 修改下面文件中存在,配置放入其中,且只保留一组的
(4) 修改配置文件core-site.xml
<configuration>
<!-- 设置默认使用的文件系统 Hadoop支持file、HDFS、GFS、ali|Amazon云等文件系统 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop100:8020</value>
</property>
<!-- 指定Hadoop的临时文件的本地存放路径 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/var/log/hadoop/tmp</value>
</property>
<!-- 设置HDFS web UI用户身份 -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
<!-- 配置该root(superUser)允许通过代理访问的主机节点 -->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<!-- 配置该root(superUser)允许通过代理用户所属组 -->
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<!-- 配置该root(superUser)允许通过代理的用户-->
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
</configuration>
(5) 修改配置文件hdfs-site.xml
<configuration>
<!-- 指定HDFS的主节点的元数据文件的本地存放路径 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/app/hadoop-3.3.6/name</value>
</property>
<!-- 指定HDFS的数据节点的数据文件的本地存放路径 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/app/hadoop-3.3.6/data</value>
</property>
<!-- nn web端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop100:9870</value>
</property>
<!-- 2nn web端访问地址 NameNode和SecondaryNameNode尽量不要安装在同一台服务器-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop101:50090</value>
</property>
<!-- 指定HDFS的数据分块的备份数量 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
(6) 修改配置文件mapred-site.xml
<configuration>
<!-- 指定MapReduce所使用的外部管理框架,这里使用Hadoop 3.3.6自带的YARN资源管理器 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- jobhistory properties -->
<!-- 设置 mapreduce 的历史服务器地址和端口号 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop100:10020</value>
</property>
<!-- mapreduce 历史服务器的 web 访问地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop100:19888</value>
</property>
</configuration>
(7) 修改配置文件yarn-site.xml
<configuration>
<!-- 指定ResourceManager -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop100</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>${yarn.resourcemanager.hostname}:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>${yarn.resourcemanager.hostname}:8030</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>${yarn.resourcemanager.hostname}:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.https.address</name>
<value>${yarn.resourcemanager.hostname}:8090</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>${yarn.resourcemanager.hostname}:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>${yarn.resourcemanager.hostname}:8033</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/data/hadoop/yarn/local</value>
</property>
<!-- 开启日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/data/tmp/logs</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop100:19888/jobhistory/logs/</value>
<description>URL for job history server</description>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>4096</value>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>2048</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>1</value>
</property>
<property>
<name>yarn.application.classpath</name>
<value>
$HADOOP_HOME/etc/hadoop:$HADOOP_HOME/share/hadoop/common/lib/*:$HADOOP_HOME/share/hadoop/common/*:$HADOOP_HOME/share/hadoop/hdfs:$HADOOP_HOME/share/hadoop/hdfs/lib/*:$HADOOP_HOME/share/hadoop/hdfs/*:$HADOOP_HOME/share/hadoop/mapreduce/lib/*:$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/yarn:$HADOOP_HOME/share/hadoop/yarn/lib/*:$HADOOP_HOME/share/hadoop/yarn/*
</value>
</property>
<!-- 关闭yarn对物理内存和虚拟内存的限制检查 -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
</configuration>
5、修改hadoop启动命令
# 进入到启动命令所在位置hadoop安装路径下的sbin目录下
cd /opt/app/hadoop-3.3.6/sbin
修改start-dfs.sh,stop-dfs.sh,在文件顶部添加
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
修改 start-yarn.sh,stop-yarn.sh,在文件顶部添加
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
6 、分发程序
拷贝 Hadoop 安装文件到集群节点
scp -qr /opt/app/hadoop-3.3.6 hadoop101:/opt/app
scp -r /opt/app/hadoop-3.3.6 hadoop102:/opt/app
7、 初始化
在 hadoop100上执行 namenode 初始化命令
注:Hadoop 集群只需要一次格式化即可,后续启动无需格式化
hdfs namenode -format
8、启动集群
启动命令
# 启动dfs和yarn 等价于start-all.sh
start-dfs.sh
start-yarn.sh
#或直接使用
start-all.sh
# 启动jobhistory
mr-jobhistory-daemon.sh start historyserver
执行jps查询
在本地电脑添加映射
在 Windows 下 C:\Windows\System32\drivers\etc\hosts 添加 IP 映射
192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102
浏览器打开监控端口界面:
http://hadoop100:9870
http://hadoop100:8088
http://hadoop100:19888
9、停止集群
stop-dfs.sh
stop-yarn.sh
或直接使用
stop-all.sh
#关闭historyserver
mr-jobhistory-daemon.sh stop historyserver
三、集群任务执行
【使用hadoop官方自带的词频统计程序测试】
1 、创建word.txt
在opt目录下创建word.txt文件,并编辑
touch words.txt
vi words.txt
#words.txt 内容
linuxidc yyh
yyh xplinuxidc
katy ling
yeyonghao linuxidc
xpleaf katy
2、上传单词文本文件至hdfs
hdfs dfs -mkdir /input
hdfs dfs -put /opt/words.txt /input
3、执行WordCount程序
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /input /output
执行成功后
访问HDFS监控界面【hadoop100:9870】查看/output路径下面生成的单词计数结果文件是否正确
报错或者执行不下去
查看任务状态
hadoop job -status job_1720664609595_0001
常见问题
- 资源不足:日志中出现类似 Container is running beyond physical memory limits。
- 需要调整 yarn.nodemanager.resource.memory-mb 或任务的内存配置。 数据分片异常:日志中出现
Split location is invalid。 需要检查输入路径和数据的完整性。 - 网络异常:日志中出现 Connection refused。 检查节点间的网络连接和防火墙配置。