Hadoop 部署(一)单机模式
Standalone Operation:不启动守护进程的最小验证环境
Hadoop环境部署-单机¶
全系列统一约定:虚拟机名为 node0,IP 为 192.168.179.100,普通用户为 zhangsan,所有大数据组件安装在 /opt/bigdata/ 下,Hadoop 版本统一为 3.1.3。
预备知识:本篇默认你已了解 HDFS、YARN、MapReduce 各自的职责,以及 NameNode、DataNode、ResourceManager 等角色的含义。若还不熟悉,建议先读 Hadoop 架构导论,其中还有一张"概念 ↔ 进程 ↔ 端口"的对照表。
学习目标¶
先把单机模式放进三种部署模式的坐标系里,看清它的位置与用途。
本篇要解决的问题¶
Hadoop下载解压之后,最小可运行的形态是什么?- 一个后台服务都不启动,能不能跑
MapReduce? - 计算结果为什写在名为
part-r-00000的文件里?
三种部署模式对照¶
| 对比项 | 单机模式 | 伪分布式 | 完全分布式 |
|---|---|---|---|
| 守护进程 | 无 | 全部进程在一台机器 | 进程分布在多台机器 |
| 文件系统 | 本地文件系统 | HDFS(单 DataNode) | HDFS(多 DataNode) |
| 计算资源 | 单个 JVM 多线程模拟 | YARN(单 NodeManager) | YARN(多 NodeManager) |
| SSH 免密 | 不需要 | 需要(登录本机) | 需要(登录所有节点) |
| 典型用途 | 验证程序逻辑 | 学习组件协作 | 生产环境 |
单机模式是理解后两种模式的起点:它剥离了分布式的外壳,只剩下 MapReduce 本身。
为什么从单机模式开始¶
MapReduce程序的正确性(输入输出类型、聚合逻辑)与"有没有集群"无关,用单机模式验证最快;- 单机模式几乎不会因为环境配置失败,排错范围最小;
- 后续每一种部署模式的配置,都可以拿单机模式作为对比基线。
安装¶
下载、解压、建软连接,三步之后 Hadoop 就可以使用了。
下载安装包¶
安装包从 Apache 归档站点获取,本系列统一使用 3.1.3 版本。
务必注意版本一致性:后面用到的
jar包名、$HADOOP_HOME路径中的版本号都必须是3.1.3,版本混用是最常见的报错来源。
复制到安装目录并解压¶
全系列统一的软件安装根目录是 /opt/bigdata/hadoop/。
[zhangsan@node0 ~]$ cp hadoop-3.1.3.tar.gz /opt/bigdata/hadoop/
[zhangsan@node0 ~]$ cd /opt/bigdata/hadoop/
[zhangsan@node0 hadoop]$ tar -zxf hadoop-3.1.3.tar.gz
创建软连接¶
为什么要额外建一个名为 default 的软连接:
- 环境变量
$HADOOP_HOME固定指向default,切换版本只需要改软连接的指向,环境变量与所有脚本都不用动; - 同一台机器上可以同时保留多个
Hadoop版本,互不干扰。
[zhangsan@node1 hadoop]$ ll /opt/bigdata/hadoop/
total 12
lrwxrwxrwx. 1 zhangsan zhangsan 12 Feb 28 12:53 default -> hadoop-3.1.3
drwxr-xr-x. 11 zhangsan zhangsan 4096 Feb 28 15:57 hadoop-3.1.3
drwxr-xr-x. 11 zhangsan zhangsan 4096 Dec 25 22:31 hadoop-2.7.3
本系列中
$HADOOP_HOME=/opt/bigdata/hadoop/default,实际指向hadoop-3.1.3。
配置文件¶
单机模式不需要修改任何配置,原因就藏在 Hadoop 的那一组默认值里。
为什么单机模式无需修改任何配置¶
Hadoop 的每一个配置项都有默认值,这一组默认值组合起来就是单机模式:
- 默认文件系统
fs.defaultFS是file:///,也就是本机文件系统,不涉及 HDFS; - 默认运行框架
mapreduce.framework.name是local,作业在单个 JVM 内完成,不提交给 YARN; - 没有 NameNode、DataNode、ResourceManager 需要指定地址。
因此解压即可使用。所谓"单机模式",本质就是把 Hadoop 当成一个普通的 Java 程序库来运行。
运行验证¶
用官方 wordcount 示例跑一遍,验证这套安装确实能产出正确的计算结果。
准备输入文件¶
在用户家目录下造一个小文本文件作为输入。
运行 WordCount¶
wordcount 是 Hadoop 自带的示例程序,打包在 examples 的 jar 包里。
[zhangsan@node0 ~]$ hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /home/zhangsan/bigdata.txt /home/zhangsan/out
命令拆解:
hadoop jar <jar 路径>:启动一个 JVM 来运行指定的 Java 程序;wordcount:要运行的主类名;- 之后的参数由程序自己约定,
wordcount的规则是<输入路径> <输出路径>。
上面命令能这样写的前提是环境变量
$HADOOP_HOME已生效(见 Linux 系统配置篇)。若尚未配置,可以先cd $HADOOP_HOME/bin再用./hadoop jar ...执行。
查看计算结果¶
为什么叫 part-r-00000?
r表示这是 Reduce 阶段的输出(m则表示 Map 阶段);00000是 Reduce 任务的编号,有几个 Reducer 就会生成几个part-r-*文件;- 结果是按键排序的(bigdata、hello、study),这个顺序由 Shuffle 阶段的排序保证。
用 jps 看看有没有"服务"¶
这一段最容易误解,需要说明两点:
- 列表里只有
RunJar(本次hadoop jar启动的进程)和Jps(jps命令自身),没有任何 Hadoop 守护进程; - 作业结束后
RunJar随之退出,进程消失是正常现象,不是崩溃。
正因为单机模式不存在后台服务,我们看到的是"命令执行完就干净退出",这与后面伪分布式的常驻进程形成鲜明对比。
再次运行前必须先做的事¶
MapReduce 要求输出目录事先不存在,重复运行会直接报错退出。
org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory file:/home/zhangsan/out already exists
这是 Hadoop 的保护机制:防止多个作业的输出互相覆盖。
习惯上也可以每次换一个输出目录名,便于保留多份结果做对比。
小结¶
回顾本篇要点,并预告伪分布式需要额外补齐哪些环节。
本篇要点¶
- 单机模式 = 默认配置 + 本地文件系统 + 单 JVM,不启动任何守护进程;
- 安装三步走:下载 → 解压 → 创建软连接
default; - 用官方
wordcount示例验证安装是否成功; - 输出目录必须事先不存在;结果文件
part-r-00000的个数由 Reduce 任务数决定。
下一篇做什么¶
伪分布式要在同一台机器上跑起完整的 HDFS 与 YARN:
- 必须先配置 SSH 免密登录——即使是登录本机,
start-dfs.sh也是通过 ssh 拉起守护进程的; - 必须修改全套配置文件,明确指定 NameNode 与 ResourceManager 的地址;
- 必须先格式化 NameNode,之后才会出现常驻后台的守护进程。
谢谢
下一篇:伪分布式部署