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