购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第四节
Hadoop平台构建

随着大数据技术的发展,Apache Hadoop被公认为行业大数据标准开源软件,在分布式环境下提供了海量数据的处理能力。凭借其突出的优势,Hadoop已经在各个领域得到了广泛应用。几乎所有主流厂商都围绕Hadoop提供开发工具、开源软件、商业化工具和技术服务,如谷歌、雅虎、微软、思科、百度、淘宝、网易、华为、中国移动等,都支持Hadoop。本节就Hadoop平台构建进行简单讨论,主要包括:

▶Hadoop集群配置;

▶Hadoop的安装与运行。

学习目标

▶熟悉Hadoop平台的架构;

▶掌握Hadoop单机、虚拟分布式和完全分布式三种模式的安装运行方法。

关键知识点

▶搭建Hadoop平台及运行环境。

Hadoop 集群配置

从Hadoop系统架构的角度看,通常把Hadoop部署在成本较低的Intel/Linux硬件平台上,即由多台装有Intel x86处理器的服务器或PC通过高速局域网构成一个计算集群,在各个节点上运行Linux操作系统(目前常用的是CentOS或者Ubuntu)。

Hadoop集群硬件配置

实际上,Hadoop集群内的计算节点有两种类型:一种是执行作业调度、资源调配、系统监控等任务的名称节点(NameNode);另一种是承担具体数据计算任务的数据节点(DataNode)。因此,应针对不同的需要,配置不同的大型、小型Hadoop集群,且节点机器的选型不宜超过两种。例如,对于小型集群,名称节点可以选用两组4核/8核CPU、32 GB以上内存、2 TB磁盘、1 GB/s以太网×2的机器;数据节点可以选用两组4核CPU、16GB以上内存、1 TB磁盘、1 GB/s以太网×2的机器。

在Hadoop实际生产系统中,可以根据项目需要进行灵活的硬件选配。作为一个集群,一般应准备4台机器,其中一台为名称节点(NameNode),另一台为第二名称节点(Secondary- NameNode),其他两台作为数据节点。实际应用时,Hadoop集群的机器数量可视需要配置。这种动态的可扩展性恰好是Hadoop平台的优势之一。

Hadoop集群网络拓扑结构

常规的Hadoop集群为两层网络结构,即名称节点到机架(Rack)的网络连接以及机架内部的数据节点之间的网络连接,其网络拓扑结构如图1.14所示。每个机架(Rack)内有30~40个数据节点服务器,配置一个1 Gb/s的交换机(Switch),并向上传输到一个核心交换机或者路由器。相同机架内节点之间的带宽总和要大于不同机架间的带宽总和。

图1.14 Hadoop集群网络拓扑结构

Hadoop软件系统及运行模式

Hadoop平台最早是为了在Linux上使用而开发的,虽然它在Windows下也可以安装运行,但在Windows下安装Hadoop比较复杂,必须首先模拟Linux环境才行。目前,免费的Hadoop版本主要有三个,分别是:Apache(最原始的版本,所有发行版均基于这个版本进行改进)、Cloudera版本(Clouderas Distribution Including Apache Hadoop,简称CDH)、Hortonworks版本(Hortonworks Data Platform,HDP)。其中,CDH是Hadoop众多分支中的一种,由Cloudera维护,基于稳定版本的Apache Hadoop构建,并集成了很多补丁,可直接用于实际生产环境。

Apache Hadoop的版本已有两代,第一代Hadoop称为Hadoop 1.0,第二代Hadoop称为Hadoop 2.0。第一代Hadoop包含三个版本,分别是0.20.x、0.21.x和0.22.x。其中,0.20.x最后演化成1.0.x,变成了稳定版,而0.21.x和0.22.x则增加了NameNode HA等新的重大特性。第二代Hadoop包含0.23.x和2.x两个版本,它们完全不同于Hadoop 1.0,是一套全新的架构,均包含HDFS Federation和YARN(Yet Another Resource Negotiator)两个系统。相比于0.23.x,2.x增加了NameNode HA和Wire-compatibility两大特性。Hadoop提供了如下三种安装运行模式。

(1)单机模式。单机模式操作是Hadoop的默认操作模式,当首次解压Hadoop的源码包时,Hadoop无法了解硬件安装环境,会保守选择最小配置,即单机模式(单 Java 进程),无须进行其他配置即可运行。该模式主要用于开发调试MapReduce程序的应用逻辑,而不会和守护进程交互,以避免增加额外的复杂性。

(2)伪分布式模式。伪分布模式操作是指在“单节点集群”上运行Hadoop,Hadoop 进程以分离的 Java 进程运行。该模式在单机模式操作之上多了代码调试功能,可以查阅内存的使用情况、HDFS的输入输出以及守护进程之间的交互。

(3)完全分布式模式。完全分布式模式操作是指实际意义上的Hadoop集群,使用多个节点构成集群环境来运行。Hadoop集群规模可从几个节点到成百上千个节点,甚至是成千上万个节点的超大集群。Hadoop集群的各个节点均需要安装如下软件系统:

▶Linux 操作系统,如Fedora、Ubuntu、CentOS都可以,也可以在其他操作系统(如Windows)平台上安装Linux虚拟机;

▶JDK1.6以上版本;

▶安装并设置SSH(Security Shell)安全协议。

Hadoop的安装与运行

Hadoop平台的搭建过程较为复杂。总体来说,若不具备集群环境条件,可以采取单机、伪分布式模式进行基本安装使用。Hadoop安装配置主要包括以下步骤:

▶创建Hadoop用户;

▶设置SSH登录权限;

▶安装Java开发环境;

▶Hadoop单机模式安装配置;

▶Hadoop伪分布式模式安装配置,或全分布式(集群)模式安装配置。

创建Hadoop用户

为方便操作,如果安装Ubuntu时未使用“hadoop”用户,那么需要创建一个名为“hadoop”的用户来运行程序,以便区别不同用户之间的权限。创建用户的命令是useradd,设置密码的命令为passwd。按Ctrl+Alt+t组合键,打开终端窗口,输入如下命令创建新用户:

该条命令创建可以登录的用户hadoop,并使用 /bin/bash 作为 shell。接着使用如下命令设置密码,可简单设置为“hadoop”,按提示输入两次密码:

为方便部署,避免一些比较棘手的权限问题,需要为用户hadoop增加管理员权限:

在创建用户hadoop后,即可开始进行此后的安装配置。

设置SSH登录权限

对于Hadoop的伪分布和集群(全分布式)而言,Hadoop的名称节点(NameNode)需要启动集群中的所有节点的守护进程,而这个远程调用需要通过SSH无密码登录来实现。但是,Hadoop并没有提供SSH输入密码的登录方式,因此在搭建Hadoop集群时,需要将所有节点机器配置为名称节点才可以无密码登录。配置SSH免密码登录的主要步骤如下:

▶在集群各节点上产生公钥和私钥;

▶把公钥复制到需要免密码登录的节点上。

首先,让NameNode生成自己的SSH密钥:

执行这个命令时,会提示让用户输入一些内容,这里不用输入任何信息,直接全部按回车键即可。在NameNode生成自己的密钥之后,再将它的公共密钥发送给集群中的其他机器。

安装Java开发环境

由于Hadoop本身是基于Java语言开发的,因此Hadoop的开发和运行都需要Java的支持。Linux本身是自带JDK的,不过是OpenJDK,通常Java环境可选择 Oracle 的 JDK。可以在Ubuntu中直接通过如下命令安装 OpenJDK 7:

同时,还需要配置JAVA_HOME 环境变量,具体参阅相关文献。例如,在环境配置的文件(vi/etc/profile)中输入以下内容:

第一个参数即为JAVA_HOME,第二个为PATH环境变量。完成JDK安装后可以通过java- version验证是否安装成功。

Hadoop单机模式安装配置

Hadoop版本经常升级,可以根据自己的需要,安装不同版本的Hadoop。最新Hadoop版本可以到官网(http://hadoop.apache.org/releases.xhtml#Download)下载。例如,在目录中选择hadoop-2.7.3.tar.gz进行下载即可。下载文件后使用如下命令解压:

将该文件解压后,可以放置到自己喜欢的位置,如:选择将Hadoop安装到 /usr/local/ Hadoop文件夹下。注意,文件夹的用户和组用户必须都为“hadoop”。

然后将hadoop移动到 /usr/local/hadoop目录下:

在Hadoop文件夹(/usr/local/Hadoop)中,etc/hadoop目录下放置了配置文件,对于单机模式,需要先更改hadoop-env.sh文件,以配置Hadoop运行环境变量。在此只需将JAVA_HOME环境变量指定到本机的JDK目录即可,命令如下:

此后,可以输入如下命令检查 Hadoop 是否可用,若成功则会显示 Hadoop 版本信息:

这时,应该得到如下提示信息:

Hadoop 默认模式为非分布式模式(本地模式),无须进行其他配置即可运行。Hadoop文档中附带了一些实例供测试用,例如可以运行WordCount来检测Hadoop的安装是否成功,具体方法如下。

在/usr/local/hadoop路径下创建input文件夹:

将README.txt复制到input文件夹:

执行WordCount程序实例:

如果看到图1.15所示的内容,说明Hadoop已经安装成功。

图1.15 Hadoop测试

Hadoop 的伪分布式模式安装配置

伪分布式安装是指在一台机器上模拟一个小的集群,但集群中只有一个节点。该节点既作为 NameNode 也作为 DataNode,同时读取的是 HDFS 中的文件。当然,在一台机器上也可以实现完全分布式安装;只需在一台机器上安装多个Linux虚拟机,让每个Linux虚拟机成为一个节点,就可以实现Hadoop的完全分布式安装。对于Hadoop的详细安装配置,可参阅官方文档(http://hadoop.apache.org/docs/ stable)。

当Hadoop应用于集群时,不论是伪分布式运行还是完全分布式运行,都需要通过配置文件对各组件的协同工作进行设置。Hadoop 的配置文件位于/usr/local/hadoop/etc/hadoop/ 中,其中常用的配置文件如表1.3所示。

表1.3 Hadoop 中常用的配置文件

对于伪分布式配置,需要修改core-site.xml 和 hdfs-site.xml配置文件。Hadoop的配置文件是XML格式,每个配置以声明 property 的 name 和 value 的方式来实现。注意,首先要将jdk1.7的路径(export JAVA_HOME=/usr/lib/jvm/java)添加到hadoop-env.sh文件中。

1.配置文件core-site.xml

通常,通过gedit(gedit./etc/hadoop/core-site.xml)编辑core-site.xml会比较方便,即将<configuration>、</configuration>当中的内容做如下修改:

不难看出,core-site.xml配置文件的格式比较简单。<name>标签用来标识配置项的名字, hadoop.tmp.dir用来标识存放临时数据的目录,既包括NameNode的数据,也包括DataNode的数据。该路径任意指定,只要实际存在该文件夹即可。fs.defaultFS用来指定NameNode的HDFS协议的文件系统通信地址,可以指定一个主机+端口,也可以指定为一个NameNode服务(这个服务内部可以由多台NameNode实现)。<value>项设置的是配置的值,对于core-site.xml,只需在其中指定HDFS的地址和端口号,端口号按官方文档设置为9000即可。

2.配置文件hdfs-site.xml

采用如上同样方法,修改配置文件 hdfs-site.xml。修改后的配置文件hdfs-site.xml内容如下:

其中,dfs.replication表示副本的数量,伪分布式要设置为1;dfs.namenode.name.dir表示本地磁盘目录,是存储fsimage文件的地方;dfs.datanode.data.dir表示本地磁盘目录,是HDFS存放数据块的地方。

3.初始化文件系统

完成以上配置之后,需要初始化文件系统。由于Hadoop的很多工作是在自带的HDFS上完成的,因此需要将文件系统初始化之后才能进一步执行计算任务。采用如下命令执行 NameNode 的初始化:

在看到运行结果中出现“Exiting with status 0”之后,就说明初始化成功了。接着用如下命令启动所有守护进程:

可以通过提示信息获知所有的启动信息都已写入对应的日志文件。如果出现启动错误,则可以在日志中查看错误原因。

启动完成后,可以通过jps命令来判断是否成功启动。若成功启动,则会列出类似于图1.16所示的进程。

图1.16 查看服务器的进程

此时,可以访问 Web 界面(http://localhost:50070)查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件。

如果 SecondaryNameNode 没有启动,则运行“$./bin/stop-dfs.sh ”关闭进程,然后再次尝试启动。

如果没有 NameNode 或 DataNode,那就是配置不成功,需要仔细检查之前的步骤,或通过查看启动日志排查原因。例如,若DataNode没有启动,可通过如下方法解决:

Hadoop集群的部署与使用

Hadoop集群的部署过程较为复杂,需要配置的软、硬件环节较多。概括起来,其搭建过程大体上可分为如下步骤(以1台机器为NameNode、4台机器为DataNode为例)。

1.Hadoop环境准备

(1)首先是环境准备。采购了相关的硬件设备后,就可以把硬件装入机架,为安装和运行Hadoop做好硬件准备。然后选择合适的Linux操作系统,例如Linux Ubuntu操作系统12.04的64位版本,下载JDK。

(2)将这5台机器配置成一样的环境并作为虚拟机,通过内网的一个DNS服务器指定5台虚拟机所对应的域名。

(3)为Hadoop集群创建访问账号hadoop,创建访问组hadoop,创建用户目录,并绑定账号、组和用户目录。

(4)为Hadoop的HDFS创建存储位置,如/Hadoop/conan/data0,给用户分配权限。(5)设置SSH自动登录,使得5台机器都有SSH自动登录配置。

2.Hadoop完全分布式集群搭建

(1)在NameNode上下载Hadoop。

(2)修改Hadoop配置文件hadoop-env.sh、hdfs-site.xml、core-site.xml、mapred-site.xml,设置Masters和Slaves节点。

(3)把配置好的NameNode用scp命令复制到其他4台机器同样的目录位置。

(4)启动NameNode,第一次启动时要先进行初始化,其命令为:

(5)启动Hadoop,命令为:

输入jps命令,可以看到所有Java的系统进程。只要NameNode、SecondaryNameNode、JobTracker三个系统进程出现,则表示Hadoop启动成功。

通过命令netstart-nl,可以检查系统打开的端口,其中包括HDFS的9000、JobTracker的9001、NameNode的Web监控的50070、MapReduce的Web监控的50030。

其他的节点的测试检查方法与此相同。

3.Hadoop集群基准测试

如何判断一个Hadoop集群是否已正确安装?可以运行基准测试程序。Hadoop自带有一些基准测试程序,被打包在测试程序文件JAR中。

▶用TestDFSIO基准测试程序,可测试HDFS的I/O性能。

▶用排序测试MapReduce。Hadoop自带一个部分排序的程序,这个测试程序的整个数

据集都会通过洗牌(Shuffle)传输至Reducer,可以充分测试MapReduce的性能。

4.Hadoop的简单使用

Hadoop集群环境测试成功后,可以进行HDFS的简单应用。

(1)创建文件夹。在HDFS上创建一个文件夹/test/input:

(2)查看所创建的文件夹,按图1.17所示操作。

图1.17 查看文件夹

(3)上传文件。先创建一个文件words.txt。

然后,将所创建的文件words.txt上传到HDFS的/test/input文件夹中,并检查刚上传的文件是否上传成功,如图1.18所示。

图1.18 上传和查看文件

(4)下载文件。将刚刚上传的文件下载到~/data文件夹中,然后查看是否下载成功,如图1.19所示。

图1.19 查看下载文件

4.在云计算环境中使用Hadoop

Hadoop不仅可以运行在企业内部的集群中,也可以运行在云计算环境中。例如,可以在Amazon EC2中运行Hadoop。EC2是一个计算服务,允许客户租用计算机(实例)来运行自己的应用。客户可以按需运行或终止实例,并且按照实际使用情况付费。

Hadoop自带有一套脚本,用于在EC2上运行Hadoop。在EC2上运行Hadoop尤其适用于一些工作流。例如,在Amazon S3中存储数据,在EC2上运行集群,在集群中运行MapReduce作业,读取存储在S3中的数据,最后在关闭集群之前将输出写回S3中。如果长期使用集群,复制S3数据到运行在EC2上的HDFS中,则可以使得数据处理更加高效。因为,HDFS可以充分利用数据的位置,S3则做不到,因为S3与EC2的存储不在同一个节点上。

练习

1.简述大数据开源软件Apache Hadoop的功能和特点。

2.在配置Hadoop时,Java的路径JAVA-HOME是在哪一个配置文件中进行设置的?

3.试述Hadoop单机模式和伪分布式模式的异同点。

4.尝试Hadoop的单机/伪分布式模式安装使用,并运行Hadoop自带的WordCount实例检测安装是否成功,运行是否正常。

5.以下不属于Hadoop安装模式的是( )。

a.单机模式 b.多机模式 c.伪分布式模式 d.集群

补充练习

如果具备集群实验条件,按照Hadoop官方文档尝试搭建Hadoop集群环境。 FYgHyD6SgYfKBvmBOL6EcWacM/UirFkeCA5zFxYJbQm0ljwVUAVvcmqKHw+jRQ50

点击中间区域
呼出菜单
上一章
目录
下一章
×