3. Hadoop集群搭建:从零开始,手把手带你跑起来

好,咱们进入正题。这一章,我带你亲手搭一个Hadoop集群。别怕,这事儿我干过不下几十次了,踩过的坑比你们见过的Hadoop版本还多。说白了,集群搭建就是个熟练工,你跟着我走一遍,后面就顺了。

本章核心脉络:下载解压 → 改四个配置文件 → 初始化 → 启动 → 验证。就这五步,少一步都跑不起来。

Hadoop集群搭建五步法 ① 下载与解压 tar -xzf hadoop-*.tar.gz ② 核心配置 4个xml文件 ③ 初始化 hdfs namenode -format ④ 启动集群 start-all.sh ⑤ Web验证 :9870 / :8088 四个核心配置文件 core-site.xml fs.defaultFS + tmp目录 hdfs-site.xml 副本数 + 数据目录 mapred-site.xml MapReduce框架 = yarn yarn-site.xml ResourceManager + NodeManager

3.1 下载与解压:选对版本,少走弯路

我个人习惯用Apache Hadoop 3.3.x系列。为什么?因为3.x以后,HDFS支持了纠删码,性能提升明显。你如果还在用2.x,嗯,也不是不行,但新项目我建议直接上3.x。

下载地址我一般去Apache官网的镜像站。别去第三方网站下,我吃过亏——有次下到一个被篡改的包,集群跑起来各种诡异报错,排查了两天才发现是包的问题。

# 下载(以3.3.6为例)
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz

# 解压到指定目录
tar -xzf hadoop-3.3.6.tar.gz -C /usr/local/

# 创建软链接,方便以后升级
ln -s /usr/local/hadoop-3.3.6 /usr/local/hadoop

我的小技巧:解压后第一件事,检查一下bin目录下有没有hadoop这个可执行文件。我曾经遇到过解压不完整的情况,跑hadoop version直接报错。用 ls -l /usr/local/hadoop/bin/hadoop 看一眼,心里踏实。

3.2 核心配置文件:四个文件,一个都不能少

配置Hadoop,说白了就是改四个XML文件。你想想看,Hadoop自己也不知道你的数据存在哪、副本要几个、计算框架用啥。这些信息,全靠这四个文件告诉它。

3.2.1 core-site.xml — 集群的“门牌号”

这个文件告诉Hadoop:你的老大(NameNode)在哪,临时文件放哪。

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
        <description>NameNode的地址和端口</description>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/data/hadoop/tmp</value>
        <description>Hadoop临时文件目录,别放/tmp下,重启就没了</description>
    </property>
</configuration>

注意:hadoop.tmp.dir这个路径,一定要提前创建好,并且确保Hadoop用户有读写权限。我曾经图省事没建目录,结果格式化NameNode时报错“权限不足”,折腾了半小时才发现是目录没建。

3.2.2 hdfs-site.xml — 数据怎么存,你说了算

这个文件管的是HDFS的行为。副本数设多少?数据块多大?数据存哪个盘?都在这里配。

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
        <description>副本数,生产环境至少3,测试可以设1</description>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/data/hadoop/namenode</value>
        <description>NameNode元数据存储目录</description>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/data/hadoop/datanode</value>
        <description>DataNode数据存储目录</description>
    </property>
</configuration>

这里我要多说一句。副本数设3,不是拍脑袋定的。HDFS的设计哲学是“硬件故障是常态”,三副本能保证在坏掉一台机器的情况下,数据依然完整。我在项目中遇到过磁盘坏道,就是因为副本数够,数据一点没丢。

3.2.3 mapred-site.xml — 告诉Hadoop:用YARN跑计算

这个文件以前叫mapred-site.xml.template,需要你手动重命名。它告诉MapReduce:你的计算任务交给YARN来调度。

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
        <description>使用YARN作为资源调度框架</description>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>master:10020</value>
        <description>历史服务器地址,方便查看已完成的任务</description>
    </property>
</configuration>

3.2.4 yarn-site.xml — 资源调度的大脑

YARN是Hadoop 2.x以后引入的资源管理器。说白了,它就是集群的“包工头”,谁要多少资源,它说了算。

<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master</value>
        <description>ResourceManager运行在哪台机器上</description>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
        <description>NodeManager的辅助服务,MapReduce必须配这个</description>
    </property>
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>8192</value>
        <description>每个NodeManager可用内存,根据机器配置调整</description>
    </property>
</configuration>

配置检查清单:

  • 四个文件都放在 $HADOOP_HOME/etc/hadoop/ 目录下
  • 所有路径目录都已创建,权限正确
  • 主机名(如master)在/etc/hosts中已配置
  • SSH免密登录已设置好(我习惯用ssh-keygen生成密钥对)

3.3 集群初始化与启动:最激动人心的一步

配置写好了,接下来就是见证奇迹的时刻。不过我得提醒你,第一次格式化NameNode时,手别抖。

# 第一步:格式化NameNode(只在主节点执行一次!)
hdfs namenode -format

# 第二步:启动HDFS
start-dfs.sh

# 第三步:启动YARN
start-yarn.sh

# 或者一步到位
start-all.sh

血的教训:格式化NameNode只能做一次!如果你不小心格式化了两次,集群里所有元数据都会丢失。我曾经在测试环境手滑了,结果整个集群的数据都找不回来了。所以,格式化前一定确认:这是第一次搭建,不是重启。

启动后,用 jps 命令看看进程都在不在。主节点上应该看到:NameNode、ResourceManager、SecondaryNameNode。从节点上应该看到:DataNode、NodeManager。

# 主节点进程示例
[root@master ~]# jps
12345 NameNode
12346 ResourceManager
12347 SecondaryNameNode
12348 Jps

# 从节点进程示例
[root@slave1 ~]# jps
23456 DataNode
23457 NodeManager
23458 Jps

3.4 Web UI验证:眼见为实

命令行看到进程还不够,我习惯再用浏览器看一眼。Hadoop提供了两个Web界面,一个管存储,一个管计算。

服务 URL 端口 看什么
HDFS NameNode http://master:9870 9870 数据节点状态、存储容量、文件系统浏览
YARN ResourceManager http://master:8088 8088 集群资源使用、正在运行的任务、节点列表

打开浏览器,输入 http://master:9870。如果看到Hadoop的Logo,下面显示“NameNode - master”,恭喜你,HDFS跑起来了。再打开 http://master:8088,看到YARN的界面,说明资源调度也没问题。

一个小细节:如果Web界面打不开,先别急着怀疑配置。检查一下防火墙:systemctl stop firewalld。我遇到过好几次,配置全对,就是防火墙挡着,关了立马就能访问。

嗯,到这里,你的Hadoop集群就算搭好了。从下载到验证,每一步我都带着你走了一遍。你可能会觉得步骤有点多,但相信我,多搭几次就熟了。后面我们就要在这个集群上跑真正的数据处理任务了。


公众号:蓝海资料掘金营,微信deep3321