阅读量:20
Ubuntu下搭建HDFS集群详细步骤
1. 准备工作
- 集群规划:确定集群角色(NameNode、DataNode、ResourceManager、NodeManager),建议至少1台NameNode+1台DataNode(生产环境需更多节点)。所有节点需在同一局域网,能互相通信(可通过
ping命令测试)。 - 硬件要求:每台节点至少4GB内存、500GB可用磁盘空间(生产环境需更高配置)。
- 软件要求:Ubuntu 20.04及以上版本,Java 8(推荐OpenJDK)、Hadoop 3.x(推荐3.3.6及以上稳定版)。
2. 安装Java环境
Hadoop依赖Java运行,需先安装OpenJDK 8:
sudo apt update
sudo apt install -y openjdk-8-jdk
# 验证安装
java -version # 应输出Java 8版本信息
3. 下载并解压Hadoop
从Apache官网下载Hadoop二进制包(选择稳定版本,如3.3.6),解压到/usr/local目录:
wget https://downloads.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
sudo tar -xzvf hadoop-3.3.6.tar.gz -C /usr/local/
sudo mv /usr/local/hadoop-3.3.6 /usr/local/hadoop # 重命名方便使用
4. 配置环境变量
编辑~/.bashrc文件(当前用户)或/etc/profile文件(所有用户),添加Hadoop和Java的环境变量:
echo 'export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64' >> ~/.bashrc
echo 'export HADOOP_HOME=/usr/local/hadoop' >> ~/.bashrc
echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> ~/.bashrc
# 使配置生效
source ~/.bashrc
5. 配置SSH免密登录
Hadoop节点间需通过SSH无密码通信,避免每次操作输入密码:
# 生成SSH密钥(若已有可跳过)
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
# 将公钥复制到所有节点(包括自身)
ssh-copy-id user@namenode # 替换为NameNode主机名
ssh-copy-id user@datanode1 # 替换为DataNode1主机名
ssh-copy-id user@datanode2 # 替换为DataNode2主机名(如有)
# 测试免密登录
ssh user@namenode # 应无需密码进入
ssh user@datanode1 # 同上
6. 配置Hadoop核心文件
进入Hadoop配置目录$HADOOP_HOME/etc/hadoop,修改以下关键文件:
6.1 core-site.xml
配置HDFS的默认文件系统URI(需替换namenode为NameNode的实际主机名):
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://namenode:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
</configuration>
6.2 hdfs-site.xml
配置HDFS副本数(生产环境建议3)、NameNode/DataNode数据目录(需提前创建):
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value> <!-- 副本数,根据集群规模调整 -->
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/hadoop/data/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/hadoop/data/datanode</value>
</property>
</configuration>
6.3 mapred-site.xml
配置MapReduce运行框架为YARN(需创建该文件,若不存在则复制模板):
cp $HADOOP_HOME/etc/hadoop/mapred-site.xml.template $HADOOP_HOME/etc/hadoop/mapred-site.xml
编辑内容:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
6.4 yarn-site.xml
配置ResourceManager主机名和NodeManager的Shuffle服务:
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>resourcemanager</value> <!-- 替换为ResourceManager实际主机名 -->
</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>
</configuration>
7. 创建HDFS数据目录
在NameNode和DataNode节点上创建数据存储目录,并设置正确权限:
# 在NameNode节点上
sudo mkdir -p /usr/local/hadoop/data/namenode
# 在所有DataNode节点上
sudo mkdir -p /usr/local/hadoop/data/datanode
# 设置目录所有者(替换hdfs为Hadoop运行用户,通常为hdfs或当前用户)
sudo chown -R hdfs:hdfs /usr/local/hadoop/data
8. 格式化NameNode
首次启动HDFS前,必须格式化NameNode(会清空原有数据,仅第一次需要):
hdfs namenode -format
9. 启动HDFS集群
在NameNode节点上执行以下命令启动HDFS服务:
# 启动HDFS(包含NameNode、DataNode)
start-dfs.sh
# 查看进程是否启动成功
jps # 应显示NameNode、DataNode进程
10. 验证集群状态
- 检查HDFS状态:使用
hdfs dfsadmin -report命令查看DataNode是否注册成功。 - 查看Web界面:浏览器访问
http://namenode:9870(Hadoop 3.x默认端口),可查看HDFS集群状态、存储信息。 - 测试文件操作:上传/下载文件到HDFS,验证功能是否正常:
hdfs dfs -mkdir -p /test # 创建测试目录 hdfs dfs -put $HADOOP_HOME/README.txt /test # 上传文件 hdfs dfs -ls /test # 查看文件
常见问题解决
- 权限问题:若启动时报权限错误,需确保HDFS数据目录的权限正确(
chown -R hdfs:hdfs /usr/local/hadoop/data)。 - 端口冲突:若端口被占用,可修改
core-site.xml中的fs.defaultFS端口(如9000改为9001)或其他配置文件的端口。 - 进程未启动:检查
/usr/local/hadoop/logs目录下的日志文件(如hadoop-*-namenode-*.log),定位错误原因。