关闭防火墙和SELinux
systemctl stop firewalld
systemctl disable firewalld
# 此步可选(可做可不做,目前没发现有什么影响)
vim /etc/sysconfig/selinux
# 将第七行,SELINUX=enforcing 改为
SELINUX=disabled
# 保存退出后,重启虚拟机即可,千万要注意disabled单词不要写错,不然无法启动系统
设置本机登录本机免密码(教程参照网上资料,大概逻辑为:服务端生成私钥和公钥,服务器端持有私钥,公钥交由客户端,此后客户端可免密码登录服务器端)
具体代码实施如下(在 ~/.ssh目录下进行如下操作):
ssh localhost
# 进入 ~/.ssh目录
cd ~/.ssh
ssh-keygen -t rsa
# 在之后跳出的文字交互界面一路回车+yes即可
cat id_rsa.pub >> authorized_keys
# 将公钥追加到authorized_keys文件中去
chmod 600 authorized_keys
# 将authorized_keys文件权限更改为600
# 至此设置免密操作完毕
1.下载Hadoop安装包、解压、配置软链接
# 1. 上传
# 2. 解压
mkdir -p /export/server
tar -zxvf hadoop-3.3.0.tar.gz -C /export/server/
# 3. 构建软链接
ln -s /export/server/hadoop-3.3.0 /export/server/hadoop
cd /export/server/hadoop/etc/hadoop,
进入文件夹中,配置文件都在这里。
Hadoop的配置文件要修改的地方很多,请细心
此文件是配置一些Hadoop用到的环境变量
这些是临时变量,在Hadoop运行时有用
如果要永久生效,需要写到/etc/profile中
vim hadoop-env.sh
# 在文件开头加入:
# 配置Java安装路径
export JAVA_HOME=/export/server/jdk
# 配置Hadoop安装路径
export HADOOP_HOME=/export/server/hadoop
# Hadoop hdfs配置文件路径
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
# Hadoop hdfs 日志文件夹
export HADOOP_LOG_DIR=$HADOOP_HOME/logs/hdfs
# Hadoop的使用启动用户配置
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
export YARN_PROXYSERVER_USER=root
3.vim core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
<description>The name of the default file system.</description>
</property>
<!--
localhost可以设置为主机名以及IP地址中的任意一个,如 hdfs://xx:9000
-->
<property>
<name>hadoop.tmp.dir</name>
<value>/export/server/hadoop/tmp</value>
<description>Base for other temporary directories.</description>
</property>
<!-- 你可以自由指定 hadoop.tmp.dir 中的目录,只要确保该目录存在且有合适的权限 -->
</configuration>
4.vim hdfs-site.xml
<configuration>
<!-- HDFS 存储的基本目录 -->
<property>
<name>dfs.replication</name>
<value>1</value>
<description>Default block replication. The default is 1 unless overridden in the file.</description>
</property>
<!-- HDFS 数据目录 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///export/server/hadoop/dfs/name</value>
<description>Directories on the local filesystem where the NameNode stores its metadata.</description>
</property>
<!-- HDFS 数据节点目录 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///export/server/hadoop/dfs/data</value>
<description>Directories on the local filesystem where the DataNode stores its data blocks.</description>
</property>
<!-- Secondary NameNode 目录 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>localhost:9868</value>
<description>The address for the secondary NameNode.</description>
</property>
<!--
localhost可以设置为主机名以及IP地址中的任意一个,如 xx:9868
-->
</configuration>
5.vim mapred-env.sh
# 在文件的开头加入如下环境变量设置 shift+o即可在第一行进行插入
# 指定 Java 安装路径
export JAVA_HOME=/export/server/jdk
# 指定 Hadoop 安装路径
export HADOOP_HOME=/export/server/hadoop
# 允许指定 MapReduce 任务使用的 Java 选项,比如内存设置等
# 可以设置为 JVM 的内存限制、GC 选项等
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_MAPRED_LOG_DIR=$HADOOP_HOME/logs/mapred
# 如果需要调试,可以开启以下选项,方便查看日志
export HADOOP_LOG_DIR=$HADOOP_HOME/logs/hadoop
export HADOOP_OPTS="-Djava.net.preferIPv4Stack=true"
export HADOOP_HEAPSIZE=2048
export MAPRED_JAVA_OPTS="-Xmx1024m"
# 如果有其他附加类路径,可以指定
# export HADOOP_CLASSPATH=$HADOOP_HOME/share/hadoop/mapreduce/lib
# 如果你有多节点,需要配置这些变量为用户权限相关内容
# export HADOOP_MAPRED_PID_DIR=/export/server/hadoop/pids
5.vim mapred-site.xml
<configuration>
<!-- 指定 MapReduce 框架使用 YARN -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<description>MapReduce should run as a YARN application</description>
</property>
<!-- MapReduce JobHistory Server 的地址,用于查看作业历史 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>localhost:10020</value>
<description>Address of the JobHistory Server</description>
</property>
<!-- JobHistory Server 的 web 界面地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>localhost:19888</value>
<description>WebUI for JobHistory Server</description>
</property>
<!-- 指定临时文件目录 -->
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/export/server/hadoop/mapreduce/done</value>
<description>Directory where history of finished jobs are stored</description>
</property>
<!-- 指定中间结果的临时存储目录 -->
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/export/server/hadoop/mapreduce/intermediate-done</value>
<description>Directory for intermediate results during job processing</description>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>
$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/mapreduce/lib/*:
$HADOOP_HOME/share/hadoop/common/*:$HADOOP_HOME/share/hadoop/common/lib/*:
$HADOOP_HOME/share/hadoop/hdfs/*:$HADOOP_HOME/share/hadoop/hdfs/lib/*:
$HADOOP_HOME/share/hadoop/yarn/*:$HADOOP_HOME/share/hadoop/yarn/lib/*
</value>
</property>
<!--
localhost可以设置为主机名以及IP地址中的任意一个,如 xx
-->
</configuration>
7.vim yarn-env.sh
# 在文件的开头加入如下环境变量设置
# 设置 Java 环境
export JAVA_HOME=/export/server/jdk
# 设置 Hadoop 安装路径
export HADOOP_HOME=/export/server/hadoop
# Hadoop 配置文件路径
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
# Hadoop 日志路径(包括 YARN 和 HDFS)
export HADOOP_LOG_DIR=$HADOOP_HOME/logs/hdfs
8.vim yarn-site.xml
<configuration>
<!-- ResourceManager 地址配置 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value> <!-- 改为主机名或IP地址 -->
<description>The hostname of the ResourceManager.</description>
</property>
<!-- 设置 ResourceManager 的 web 界面端口 -->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>localhost:8088</value><!-- 改为主机名或IP地址 -->
<description>ResourceManager web interface.</description>
</property>
<!-- 设置 YARN 的临时目录 -->
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/export/server/hadoop/tmp/nm-local-dir</value>
<description>Local directory where NM stores data.</description>
</property>
<!-- 设置 NodeManager 的日志目录 -->
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>/export/server/hadoop/logs/nm-logs</value>
<description>Directory for logs.</description>
</property>
<!-- 设置 YARN 使用的资源调度器 -->
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
<description>Class used for resource scheduling.</description>
</property>
<!-- 启用跨节点资源调度 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
<description>Auxiliary services used by NodeManager.</description>
</property>
</configuration>
9.vim /etc/profile
export HADOOP_HOME=/export/server/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
10.格式化 HDFS(如果是首次运行):如果是首次启动 HDFS,需要格式化 namenode:
hdfs namenode -format
注意:格式化只需进行一次,下次启动不要再次格式化,否则会缺失DataNode进程。
在你已经执行过 hdfs namenode -format 并随后修改了配置文件的情况下,通常不需要再次格式化。格式化是一个破坏性的操作,会清空 HDFS 中的数据并重新初始化文件系统。
如果你的配置文件修改并没有涉及到 HDFS 的存储路径(如 dfs.namenode.name.dir 和 dfs.datanode.data.dir),那么格式化操作不需要重复进行。
不过,如果你修改了涉及 HDFS 存储目录的配置,并且这些目录不再和之前的格式化路径一致,可能会导致启动时的错误。这时有以下几种操作建议:
确认是否需要重新格式化:
如果只是一些常规配置(如网络配置或日志路径),而没有更改涉及数据存储的目录(如 dfs.namenode.name.dir 或 dfs.datanode.data.dir),则不需要再次格式化。
如果你修改了存储路径或数据目录,且这些目录是新的或空的,则需要重新格式化 HDFS。此操作会清除现有的数据存储结构。
如果不重新格式化:
直接启动 HDFS 服务,使用以下命令:
start-dfs.sh
检查是否能正常启动。如果能正常启动并使用 jps 查看各个进程正常运行,那么不需要格式化。
总结:
如果没有修改存储路径,无需再次格式化。
如果修改了存储路径并且 HDFS 无法正常启动,可以选择格式化重新初始化,但这会清除所有数据。
11. 验证 Hadoop 安装:
运行以下命令测试 Hadoop 是否安装成功,并确保配置生效:
验证 Hadoop 版本:
hadoop version
正常情况下,你会看到 Hadoop 版本的信息。
启动 HDFS 和 YARN 服务(伪分布式模式): 运行以下命令启动 Hadoop 的 HDFS 和 YARN 服务:
start-dfs.sh # 启动 HDFS 服务
start-yarn.sh # 启动 YARN 服务
检查运行状态: 检查 Namenode、Datanode 和 ResourceManager 是否正常启动:
jps
你应该看到如下服务的进程:
NameNode
DataNode
ResourceManager
NodeManager
SecondaryNameNode
至此,Hadoop配置成功。
————————————————