Ubuntu下搭建HDFS集群详细步骤
ping命令测试)。Hadoop依赖Java运行,需先安装OpenJDK 8:
sudo apt update
sudo apt install -y openjdk-8-jdk
# 验证安装
java -version # 应输出Java 8版本信息
从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 # 重命名方便使用
编辑~/.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
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 # 同上
进入Hadoop配置目录$HADOOP_HOME/etc/hadoop,修改以下关键文件:
配置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>
配置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>
配置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>
配置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>
在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
首次启动HDFS前,必须格式化NameNode(会清空原有数据,仅第一次需要):
hdfs namenode -format
在NameNode节点上执行以下命令启动HDFS服务:
# 启动HDFS(包含NameNode、DataNode)
start-dfs.sh
# 查看进程是否启动成功
jps # 应显示NameNode、DataNode进程
hdfs dfsadmin -report命令查看DataNode是否注册成功。http://namenode:9870(Hadoop 3.x默认端口),可查看HDFS集群状态、存储信息。hdfs dfs -mkdir -p /test # 创建测试目录
hdfs dfs -put $HADOOP_HOME/README.txt /test # 上传文件
hdfs dfs -ls /test # 查看文件
chown -R hdfs:hdfs /usr/local/hadoop/data)。core-site.xml中的fs.defaultFS端口(如9000改为9001)或其他配置文件的端口。/usr/local/hadoop/logs目录下的日志文件(如hadoop-*-namenode-*.log),定位错误原因。