一、独立模式

Hadoop最简单的运行模式是独立模式,该模式下,所有的Hadoop守护进程都在运行Hadoop的同一台机器上。在独立模式下使用HDFS和MapReduce是为了测试,演示以及使用的方便。

在独立模式下,除了Hadoop守护进程所需的少量操作系统资源,几乎不需要分配资源。Hadoop守护进程可以使用用户凭据运行,不需要运行在超级用户下。

在核心站点或开发测试环境中使用独立模式很方便,因为所有的进程共享相同的文件系统。例如,在与其他人合作之前可以很容易地使用Hadoop分配测试数据。

sbin/start-all.sh # 启动所有Hadoop守护进程,包括NameNode、DataNode和JobTracker、TaskTracker
sbin/stop-all.sh # 关闭所有Hadoop守护进程,包括NameNode、DataNode和JobTracker、TaskTracker

二、伪分布式模式

伪分布式模式是指Hadoop可以运行在一台机器上,但是它像在一个正确的分布式环境中运行一样。

在伪分布式模式下,所有守护进程都在一台机器上运行,但是它们在每个节点上运行。在本例中,工作流程在多个进程之间进行切换,而不是在多个机器之间进行切换。这个时候的HDFS是跨越多个磁盘分散存储数据的,而且可以使用JobTracker和TaskTracker,因此伪分布式模式可以模拟真正的分布式环境。

修改conf/core-site.xml文件中的hadoop.tmp.dir和fs.default.name属性,然后启动hadoop和yarn:
- hadoop namenode -format
- sbin/start-dfs.sh
- sbin/start-yarn.sh

三、完全分布式模式

在完全分布式模式下,Hadoop守护进程在多台机器上运行。在完全分布式模式下,Hadoop有足够的资源和处理能力来每个节点独立运行MapReduce任务。完全分布式模式需要额外的配置和管理工作。

在完全分布式模式下,有一个主机扮演集群管理器的角色,它能够控制整个集群。Hadoop集群管理器名称为YARN(Resource Manager),它负责启动各种应用程序,并协调各个节点上的Node Manager、Container和Application Master。

完全分布式模式可以使用Hadoop集群处理大容量数据,因为它允许在许多物理和/virtual主机之间分隔工作负载,并使得在群集中添加或删除计算器更加容易。

为一个完全分布式Hadoop集群配置的流程,大致应该包括如下步骤:
1. 安装jdk和hadoop
2. 配置各项参数(core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml)
3. 格式化NameNode(hadoop namenode -format)
4. 启动相关服务(start-dfs.sh、start-yarn.sh)
5. 验证

四、基于容器的完全分布式模式

基于容器的完全分布式模式是最新的Hadoop运行模式之一。在YARN的基础上,Hadoop引入了基于容器(也称为Linux Control Groups)的隔离技术来进一步增强相对资源预测和对多租户的支持。

在基于容器的模式下,每个MapReduce任务都运行在独立的容器中。YARN的管理器可以在设定的资源限制下运行这个容器。每个容器都被分配给一个JobTracker,这个JobTracker根据需要启动任务容器并管理调度。因此,每个容器都是JobTracker的一个实例。

为了方便使用,Hadoop引入了Docker容器技术和Docker容器映像,以便在远程集群中部署MapReduce应用程序。这意味着可以利用Docker容器来包装MapReduce应用程序并在基于容器的模式下运行它们。

yarn-site.xml中需要设置值为yarn.container-executor.class属性,配置位于yarn-site.xml中,容器间隔离由Linux内核提供,因此没有特别的软件包需要安装或其他配置。
容器的资源隔离和预测是由Linux Control Groups(cgroups)提供的。启动以下命令即安装:
$ sudo apt-get install cgroup-bin libcgroup1

五、总结

在不同的Hadoop运行模式之间进行选择基于不同的应用场景。从简单的独立模式到真正的分布式环境下的伪分布式模式、完全分布式模式、基于容器的完全分布式模式,这是Hadoop运行模式的从简单到复杂的演变过程,也是Hadoop开发者和用户应该了解的基础知识。

在使用不同的Hadoop运行模式之前,请提前了解每个运行模式下所涉及的配置和准备工作。通过适当的配置,各种配置实现可以使Hadoop在不同的环境中进行部署和开发。