Hadoop 用于提供可信赖的弹性分布式计算,hadoop 使得我们可以把计算逻辑分布到海量的机器上面去以提升计算性能并且实现高可用。

Hadoop 分为以下四个模块

模块功能
通用模块用于支撑 Hadoop 的工具模块
Hadoop Distributed File System (HDFS)分布式的文件系统
YARN用于任务调度集群资源管理的框架
MapReduce基于 YARN 的海量数据并行处理系统

HDFS 模块

HDFS 模块用于存储数据,它的核心思想是 Google 的 GFS,即把数据分成块 (block) 存储在多个机器上,同时每个块可能还会有多个备份以保证数据的高可用。

HDFS 运行在多个节点之上,不同的节点可能有不同的身份。

节点类型节点介绍
命名节点 (NameNode)命名节点用于管理其它存储节点,是“管理员”节点并且只有一个,它存储了文件路径和具体的文件块之间的映射关系。
副命名节点 (Secondary NameNode)命名节点的备份,可以有多个
数据节点 (DataNode)存储数据块的节点,具有存储和读写数据的功能

MapReduce 模块

通过分治法把任务拆解分到多个节点上进行计算,之后再把计算结果汇总,即 Map 和 Reduce。

配置 hadoop 环境

首先我们需要安装 Java 并且正确配置JAVA_HOME,然后从 网页上 下载 Hadoop 压缩包,这里我选择的是hadoop-3.3.2.tar.gz版本的压缩包。

创建 hadoop 用户

useradd -m hadoop

进入 hadoop 用户

su - hadoop

下载压缩包

wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.2/hadoop-3.3.2.tar.gz --no-check-certificate

解压压缩包

tar -zxvf hadoop-3.3.2.tar.gz

进入文件夹

cd hadoop-3.3.2

执行 Hadoop

Hadoop 的执行分为三种模式

本地模式

本地模式就是 Local (Standalone) Mode,是一个在本地执行用于 debug 的模式。下面这个例子是把 hadoop 的配置文件复制到input文件夹中,然后通过正则表达式查找input文件夹里面的文件内容,并且把结果输出到output文件夹

mkdir input
cp etc/hadoop/*.xml input
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.2.jar grep input output 'dfs[a-z.]+'
cat output/*

输出结果为

1       dfsadmin

伪分布式模式

这种模式是只在一个节点上面运行多个 Java 进程,包含了一些很机械的代码,不记录了,直接参考 Hadoop 官方文档 Setting up a Single Node Cluster 就可以了。

完全的分布式操作模式

HDFS 的搭建

因为这部分内容稍微有些复杂,所以放到 单独的一篇文章 中进行介绍。

MapReduce 的搭建

这部分的内容同样也放到了一篇 单独的文章 中进行了介绍。

参考

Hadoop: Setting up a Single Node Cluster
Hadoop Cluster Setup