简介
Hadoop
:1
个使用Java
编写的Apache
开放源代码框架,它允许使用简单的编程模型跨大型计算机的大型数据集进行分布式处理。- 基于
Hadoop
框架工作的应用程序可以在跨计算机群集提供分布式存储和计算的环境中工作。 Hadoop
旨在从单一服务器扩展到数千台机器,每台机器都提供本地计算和存储。
环境
网址
Hadoop
:《传送门》。JDK
与Hadoop
的兼容性:《传送门》。- 官方教程:《传送门》。
NTP
服务:《传送门》。
版本
OS
:CentOS 7.7
、Ubuntu 16.04
。JDK
:1.8
。Hadoop
:3.2.1
。
架构
Hadoop
框架包括以下5
个模块:Hadoop Common
:支持其他Hadoop
模块的通用Java
库和实用程序,并包含启动Hadoop
的Java
文件和脚本。Hadoop Distributed File System
:HDFS
,提供对应用程序数据的高吞吐量访问的分布式文件系统。Hadoop YARN
:用于作业调度和集群资源管理的框架。Hadoop MapReduce
:基于YARN
的大型数据集并行处理系统。Hadoop Ozone
:Hadoop
的对象存储。
Hadoop
的框架最核心的设计:HDFS
:为海量的数据提供了存储。MapReduce
:为海量的数据提供了计算能力。
应用场景
- 大数据量存储:分布式存储(云存储)。
- 海量计算:并行计算。
ETL
:数据抽取到Oracle
、Mysql
、DB2
、MongDB
及主流数据库。- 数据分析:可以基于
Hadoop
和HBase
构建实时数据分析系统。
目标
Hadoop 3.X
目前仅支持JDK 8
,从Hadoop 3.3
开始将支持JDK 11
。- 本文介绍了如何部署和配置
Hadoop
单主集群,范围从几个节点到具有数千个节点的超大型集群。
节点
IP |
角色 | 服务 |
---|---|---|
172.18.20.3 |
Master |
NodeManager 、DataNode 、ResourceManager 、NameNode 、SecondaryNameNode |
172.18.20.4 |
Worker |
NodeManager 、DataNode |
172.18.20.5 |
Worker |
NodeManager 、DataNode |
部署
基础
CentOS
- 关闭
SELinux
:
1 | setenforce 0 |
- 关闭防火墙:
1 | systemctl stop firewalld.service |
Common
- 修改主机名:
1 | echo "cluster-hadoop-01" > /etc/hostname |
- 内部解析:
1 | echo '127.0.0.1 localhost' > /etc/hosts |
- 提示符:
1 | echo 'export PS1="\u@\[\e[1;93m\]\h\[\e[m\]:\w\\$\[\e[m\] "' >> /root/.bashrc |
- 添加用户:
1 | groupadd -r -f hadoop && useradd -r -g hadoop -G sudo -m hadoop -s /bin/bash |
- 免密通信:
1 | ssh-keygen -t rsa -P "" -C "Hadoop" -f '/root/.ssh/id_rsa' >/dev/null 2>&1 |
1 | rm -rf /home/hadoop/.ssh/ |
- 更换国内软件源: 《CentOS/Ubuntu的国内软件源》。
NTP
- 为保证集群内时间同步,我们需要安装
NTP
服务。
CentOS
1 | yum install -y chrony |
- 更新配置文件:
1 | vim /etc/chrony.conf |
Ubuntu
1 | apt install -y chrony |
- 更新配置文件:
1 | vim /etc/chrony/chrony.conf |
Common
- 文件内容:
1 | # Master: cluster-hadoop-01 |
- 更改时区:
1 | echo "Asia/Shanghai" > /etc/timezone |
- 重启服务:
1 | # Ubuntu |
JDK
- 依照
JDK
与Hadoop
的兼容性,从Oracle
下载最新版本的JDK
二进制文件。 - 参考《Linux上安装JDK》,完成
JDK
的安装。
Hadoop
- 依照
JDK
与Hadoop
的兼容性,从Apache
下载最新版本的Hadoop
二进制文件。 - 解压到指定目录:
1 | tar -zxvf hadoop-3.2.1.tar.gz -C /opt/ |
- 创建软连接:
1 | ln -sf /opt/hadoop-3.2.1 /opt/hadoop |
- 环境变量:
1 | echo '' >> /etc/profile |
- 获取版本信息:
1 | hadoop version |
- 更改目录权限:
1 | chown -R hadoop:root /opt/hadoop |
单主集群模式
- 单主集群模式:
1
个Master
节点和2
个Worker
节点,暂不考虑Master
的高可用。
Master
- 创建工作目录:
1 | # PID目录 |
- 切换到
hadoop
用户:
1 | su - hadoop |
- 编辑
core-site.xml
:
1 | vim /opt/hadoop/etc/hadoop/core-site.xml |
1 |
|
- 编辑
hdfs-site.xml
:
1 | vim /opt/hadoop/etc/hadoop/hdfs-site.xml |
1 |
|
- 编辑
mapred-site.xml
:
1 | vim /opt/hadoop/etc/hadoop/mapred-site.xml |
1 |
|
- 编辑
yarn-site.xml
:
1 | vim /opt/hadoop/etc/hadoop/yarn-site.xml |
1 |
|
- 编辑
workers
:
1 | vim /opt/hadoop/etc/hadoop/workers |
1 | cluster-hadoop-01 |
- 配置
hadoop-env.sh
:
1 | echo 'export JAVA_HOME="/opt/jdk"' >> /opt/hadoop/etc/hadoop/hadoop-env.sh |
- 格式化文件系统:
1 | hdfs namenode -format |
- 拷贝
Hadoop
到其他节点:
1 | rsync -azPS --delete /opt/hadoop-3.2.1 cluster-hadoop-02:/opt/ |
Worker
- 创建工作目录:
1 | # PID目录 |
Master
- 启动
HDFS
:
1 | /opt/hadoop/sbin/start-dfs.sh |
- 在
Master
节点查询进程状态:
1 | # NameNode、DataNode、SecondaryNameNode |
- 在
Worker
节点查询进程状态:
1 | # DataNode |
- 启动
YARN
:
1 | /opt/hadoop/sbin/start-yarn.sh |
- 在
Master
节点查询进程状态:
1 | # NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager |
- 在
Worker
节点查询进程状态:
1 | # DataNode、NodeManager |
实战
Web
HDFS
- 访问地址:
https://<External IP>:9870
。 - 获取
HDFS
的概要:

- 获取
DataNode
(数据节点)的信息:

- 查看
HDFS
文件系统:

- 此时由于未上传文件,所以文件系统为空:

YARN
- 访问地址:
https://<External IP>:8088
。 - 管理界面:

集群维护
Master
- 启动所有服务:
1 | /opt/hadoop/sbin/start-all.sh |
- 停止所有的服务:
1 | /opt/hadoop/sbin/stop-all.sh |
功能测试
- 切换到
hadoop
用户:
1 | su - hadoop |
- 设置执行
MapReduce
作业所需的HDFS
目录:
1 | hdfs dfs -mkdir -p /user/hadoop |
- 上传本地文件到
HDFS
文件系统中:
1 | hdfs dfs -mkdir input |
- 查看
HDFS
文件系统:

- 执行作业:
1 | hadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar grep input output 'dfs[a-z.]+' |
- 检查分布式文件系统中的输出文件:
1 | hdfs dfs -cat output/* |