在配置HDFS前,需完成以下基础准备工作:
sudo yum update -y
sudo yum install java-1.8.0-openjdk-devel -y
验证安装:java -version(需显示JDK版本信息)。/usr/local):wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
tar -xzvf hadoop-3.3.6.tar.gz -C /usr/local/
sudo mv /usr/local/hadoop-3.3.6 /usr/local/hadoop
/etc/hosts文件,添加节点映射(如192.168.1.100 namenode、192.168.1.101 datanode1)。为了让系统识别Hadoop命令,需配置环境变量:
~/.bashrc(用户级)或/etc/profile(系统级)文件,添加以下内容:export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source ~/.bashrc # 或 source /etc/profile
hadoop version(需显示Hadoop版本信息)。HDFS的关键配置文件位于$HADOOP_HOME/etc/hadoop/目录下,需调整以下文件:
该文件定义HDFS的默认文件系统和临时目录,配置示例如下:
<configuration>
<!-- 指定HDFS的NameNode URI,客户端通过该地址访问HDFS -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://namenode:9000</value>
</property>
<!-- Hadoop临时文件存储目录(需提前创建) -->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
</configuration>
说明:fs.defaultFS是HDFS的核心地址,后续所有HDFS操作均基于此URI。
该文件配置HDFS的副本数、数据存储路径等关键参数,示例如下:
<configuration>
<!-- HDFS文件块的默认副本数(生产环境建议设置为集群节点数的2/3以上) -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- NameNode元数据存储路径(本地文件系统,需提前创建) -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/hadoop/data/namenode</value>
</property>
<!-- DataNode数据存储路径(本地文件系统,需提前创建) -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/hadoop/data/datanode</value>
</property>
<!-- DataNode向NameNode发送心跳的时间间隔(秒,默认3秒) -->
<property>
<name>dfs.heartbeat.interval</name>
<value>3</value>
</property>
</configuration>
说明:dfs.replication需根据集群规模调整,若节点数较少(如3节点),建议设置为3以保证容错性。
若需使用YARN作为资源管理系统,需配置yarn-site.xml:
<configuration>
<!-- 指定ResourceManager的主机名 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>resourcemanager</value>
</property>
<!-- NodeManager提供的辅助服务(MapReduce Shuffle必需) -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- Shuffle服务的实现类 -->
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
</configuration>
若需运行MapReduce作业,需配置mapred-site.xml(若文件不存在,可复制模板生成):
cp $HADOOP_HOME/etc/hadoop/mapred-site.xml.template $HADOOP_HOME/etc/hadoop/mapred-site.xml
配置示例如下:
<configuration>
<!-- 指定MapReduce框架为YARN -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
该文件位于$HADOOP_HOME/etc/hadoop/目录下,用于指定DataNode节点列表(每行一个节点主机名或IP):
datanode1
datanode2
datanode3
说明:仅在集群部署时需要配置,单机环境可忽略。
为了实现NameNode与DataNode之间的免密通信(如启动集群、复制数据),需配置SSH无密码登录:
ssh-keygen -t rsa
按回车键接受默认路径(~/.ssh/id_rsa)和空密码。ssh-copy-id datanode1
ssh-copy-id datanode2
ssh-copy-id datanode3
ssh datanode1 # 无需输入密码即可登录
ssh datanode2
注意:若NameNode本身也是DataNode,需将公钥复制到自身(ssh-copy-id namenode)。
NameNode首次启动前,需格式化其元数据存储目录(此操作会清空NameNode数据,仅首次执行):
hdfs namenode -format
说明:格式化会生成fsimage(命名空间镜像)和edits(操作日志)文件,存储于hadoop.tmp.dir指定的目录中。
start-dfs.sh
该命令会自动启动NameNode、SecondaryNameNode(若配置)和所有DataNode。jps命令查看进程:jps
正常应显示NameNode、DataNode、SecondaryNameNode(若配置)进程。hdfs dfsadmin -report
显示所有DataNode的信息(如IP、存储容量、心跳状态)。通过以下命令验证HDFS是否正常工作:
hdfs dfs -mkdir -p /user/test
hdfs dfs -put /path/to/localfile /user/test
hdfs dfs -ls /user/test
hdfs dfs -get /user/test/localfile /path/to/save
若以上命令均执行成功,说明HDFS配置正确。
NameNode或DataNode日志(位于$HADOOP_HOME/logs/目录下),常见原因包括端口冲突(如9000端口被占用)、hadoop.tmp.dir目录权限不足(需设置为hadoop用户所有)。sudo firewall-cmd --permanent --zone=public --add-port=9000/tcp
sudo firewall-cmd --reload
dfs.replication参数是否设置合理(若节点数少于副本数,需调整副本数)。通过以上步骤,即可在Linux环境下完成HDFS的基本配置与验证。实际生产环境中,还需根据集群规模调整参数(如dfs.block.size、yarn.scheduler.maximum-allocation-mb等),并进行性能优化。