本节书摘来自华章计算机《深入理解Hadoop(原书第2版)》一书中的第3章,第3.1节,作者 [美]萨米尔·瓦德卡(Sameer Wadkar),马杜·西德林埃(Madhu Siddalingaiah),杰森·文纳(Jason Venner),译 于博,冯傲风,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
第3章
初识Hadoop框架
前面的章节介绍了大数据的价值,然后对Hadoop系统进行了总体介绍,Hadoop系统是业界最重要的大数据框架。本章我们会真正地使用Hadoop系统框架。本章将指导你如何搭建Hadoop系统开发环境,以及如何在你选择的操作系统上安装Hadoop系统。你将能写出第一个简单的Hadoop程序,这会帮助你更深刻地理解Hadoop系统架构中的各种概念。
3.1安装类型
尽管Hadoop系统的安装常常是富有经验的系统管理员的工作,并且Hadoop系统的Apache站点上也有详尽的安装说明,但是对于在多种平台上安装Hadoop系统有个基本的了解还是非常重要的,这有以下两个原因:
- 要想对Hadoop程序进行单元测试,Hadoop系统需要安装在单机模式下。这个过程在Linux系统中操作是相对简单的,但在Windows系统中非常繁琐。
- 为了能够模拟Hadoop程序在集群中的运行情况,Hadoop系统提供了伪分布式集群模式下的操作。
本章内容涵盖了Hadoop系统的各种使用模式。对Hadoop开发环境配置的讲解是在提供商已经为虚拟机配置了开发环境的前提下进行的。我们会演示在Windows 和 Linux环境中以单机模式安装Hadoop系统(还会讲解Linux环境中以伪分布式模式安装Hadoop系统)。Hadoop系统尚不十分完善,它的安装还是非常复杂的。附录A讲解了Hadoop系统在Windows平台和Linux平台下的安装步骤。这些步骤仅是一个通用的安装指南,在具体的安装过程中你可能会遇到各种不同的情况。我们建议你在虚拟机中安装一个开发环境来进行Hadoop2.x平台的开发,本章将会讲述如何安装。
3.1.1单机模式
单机模式(Stand-Alone Mode)是最简单的安装类型模式,这种模式最适合调试。在这样的模式中,Hadoop系统的所有程序运行在一个单独的JVM中。从系统性能的角度看,这种模式显然是性能最差的,但是在开发过程中是最高效的方式。
3.1.2伪分布式集群模式
在伪分布式集群模式(Pseudo-Distributed Cluster)下,Hadoop系统以伪分布式的方式运行在一个服务器节点中,所有的守护进程分别运行在不同的Java进程中。这样的运行模式经常用来模拟一个集群环境。
3.1.3多节点集群安装模式
在多节点集群安装模式(Multinode Node Cluster Installation)中,Hadoop系统安装在由若干机器组成的集群中。其安装过程比较复杂,一般由富有经验的Linux系统管理员来进行操作。从系统逻辑上看,其系统运行情况与伪分布式模式是一致的。
3.1.4基于Amazon EMR预安装模式
另外一种快速搭建并使用一个真正的Hadoop系统集群的方法是使用亚马逊公司的EMR(Elastic MapReduce)服务。目前这个服务既支持Hadoop1.x版本,也支持Hadoop2.x版本。同时,这个服务还支持Hadoop系统的多种发行版本,比如Apache版本或MapR公司发布的版本。
EMR使得用户只要在Web页面上简单地点击几下就可以启动一个Hadoop集群。EMR背后的主要思想如下:
1)用户使用亚马逊公司的S3服务加载数据,S3是一项简单的存储服务。亚马逊的S3是由AWS(Amazon Web Services)提供的一个分布式文件存储系统。它通过Web Services接口来提供存储服务。通过配置,Hadoop系统可以把S3当做分布式文件系统使用。在此模式下,S3服务扮演了HDFS的角色。
2)用户也可以使用亚马逊S3服务加载应用程序函数库。
3)用户通过指定函数库和输入文件在S3上的位置就可以启动一个EMR作业,还要指定在S3上的输出目录供作业执行完毕写入输出结果。
4)在亚马逊云上启动一个Hadoop集群,执行作业,结果输出到前面步骤中指定的目录中。
在默认操作中,集群会被自动关闭,用户也不必继续支付费用。用户可以通过一个选项(现在在启动EMR的Web页面上就有这个选项)来控制集群是否一直处于激活状态:自动终止选项(Auto-terminate option)。当在这个选项中选择No,任务结束后,集群就不会被关闭了。
你可以使用一个SSH(Secure Shell)客户端登录集群中的任何一个计算节点。当用户通过一个SSH客户端连接到一台物理节点之后,就能够继续使用Hadoop系统集群的全部功能,甚至HDFS也是可用的。
用户可以在集群中使用示例程序执行数据量小的任务,这样可以保证集群一直处于运行状态。用户可以连接到集群中的一台节点执行更多的任务。使用一个普通的由两台服务器构成的集群每小时需要花费1美元(这依赖于你选择的服务器类型,如果选择的是顶级服务器,其花费会高达到每小时14美元)。当作业执行完毕,用户可以关闭集群,也不必继续支付费用了。用户只需花费少量的钱,就可以在真实的企业级Hadoop集群中运行我们实际需求中的作业(第16章会讲解云计算中的Hadoop系统)。
就算是每小时1美元,时间积攒起来也是个不小是花费。留意亚马逊云提供的服务所处的状态,可以使我们的花费更加经济。不使用的云服务要及时关闭,并且还要很清楚自己使用了那些服务。据我们所知,确实有人不使用集群之后却忘记关掉它,结果一个月就损失了数百美元。不要让这种事发生在你的身上。