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

1.4 Hadoop的安装与配置

1.4.1 Hadoop的安装

Hadoop 2系列版本可以从其官网下载,一般选择下载最新的稳定版本,即下载stable下的hadoop-2.×.×.tar.gz这个格式的文件,这是编译好的版本。另一个包含src的是Hadoop源代码,需要进行编译才可使用。

若Ubuntu系统是使用虚拟机的方式安装的,可使用虚拟机中的Ubuntu系统自带的火狐浏览器在网站中选择hadoop-2.7.1.tar.gz下载。火狐浏览器会默认把下载的文件保存到当前用户的下载目录下,即保存到“/home/当前登录用户名/下载”目录下。

下载安装文件之后,需要对文件进行解压。按照Linux系统使用的默认规范,用户安装的软件一般都存放在/usr/local目录下。使用hadoop用户登录Linux系统,打开一个终端执行如下命令:

其中“~/”表示“/home/hadoop/”这个目录。

Hadoop安装文件解压后即可使用。执行如下命令可检查Hadoop是否可用,可用则会显示Hadoop的版本信息:

相对路径与绝对路径:本章后续出现的./bin/...、./etc/...等包含“./”的路径,均为相对路径,以“/usr/local/hadoop”为当前目录。例如,在“/usr/local/hadoop”目录下执行./bin/hadoop version,等同于执行/usr/local/hadoop/bin/hadoop version。

1.4.2 Hadoop单机模式的配置

Hadoop默认的运行模式为非分布式模式(即单机模式),Hadoop解压后无须进行其他配置就可运行单机模式,非分布式表示单Java进程。Hadoop单机模式只在一台机器上运行,存储采用本地文件系统,而不是HDFS。无须任何守护进程(daemon),所有的应用程序都在单个JVM(Java virtual machine,Java虚拟机)上执行。在单机模式下调试MapReduce程序非常高效方便,这种模式适用于开发阶段。

Hadoop不会启动NameNode、JobTracker、TaskTracker等守护进程,Map和Reduce操作作为同一个进程的不同部分执行。

Hadoop附带了丰富的例子,执行如下命令可以查看附带的所有例子:

执行上述命令后,会显示所有例子的简介信息,包括wordcount、terasort、join、grep等。下面运行用于单词计数的wordcount例子,wordcount是最简单也是最能体现MapReduce思想的程序之一,可以称为MapReduce版的Hello World程序,wordcount例子的主要功能是统计一系列文本文件中每个单词出现的次数。可以先在/usr/local/hadoop目录下创建一个input文件夹,并复制一些文件到该文件夹下;然后运行wordcount程序,将input文件夹中的所有文件作为wordcount的输入;最后,把统计结果输出到/usr/local/hadoop/output文件夹中。完成上述操作的具体命令如下:

Hadoop默认不会覆盖结果文件,因此,再次运行上面的实例会提示出错。如果要再次运行,需要先使用如下命令把output文件夹删除:

1.4.3 Hadoop伪分布式模式的配置

Hadoop可以在单个节点(一台机器)上以伪分布式模式运行,同一个节点既作为NameNode,又作为DataNode,读取的是HDFS的文件。

1.配置相关文件

需要配置相关文件,才能够使Hadoop在伪分布式模式下运行。Hadoop的配置文件位于/usr/local/hadoop/etc/hadoop中,进行伪分布式模式的配置时,需要修改两个配置文件,即core-site.xml和hdfs-site.xml。

可以使用Vim编辑器打开core-site.xml文件:

core-site.xml文件的初始内容如下:

core-site.xml文件修改后的内容如下:

在上面的配置文件中,hadoop.tmp.dir用于保存临时文件。fs.defaultFS用于设置访问HDFS的地址,其中9000是端口号。

此外,需要修改配置文件hdfs-site.xml,该文件修改后的内容如下:

在hdfs-site.xml文件中,dfs.replication用于指定副本的数量,这是因为HDFS出于可靠性和可用性的考虑,进行冗余存储,以便某个节点发生故障时,能够使用冗余数据继续进行处理。但由于这里采用伪分布式模式,总共只有一个节点,所以,只可能有一个副本,因此将dfs.replication的值设置为1。dfs.namenode.name.dir用于设置NameNode的元数据的保存目录。dfs.datanode.data.dir用于设置DataNode的数据保存目录。

注意: Hadoop的运行模式(即单机模式或伪分布式模式)是由配置文件决定的,启动Hadoop时会读取配置文件,然后根据配置文件决定运行在什么模式下。因此,如果需要从伪分布式模式切换回单机模式,只需要删除core-site.xml中的配置项即可。

2.NameNode格式化

修改配置文件以后,还要执行NameNode格式化,命令如下:

3.启动Hadoop

执行下面的命令启动Hadoop:

4.使用Web页面查看HDFS信息

Hadoop成功启动后,可以在Linux系统中打开浏览器,在地址栏输入http://localhost:50070,按Enter键,就可以查看NameNode和DataNode的信息,如图1-26所示,还可以在线查看HDFS中的文件。

图1-26 使用Web页面查看HDFS信息

5.运行Hadoop伪分布式实例

要使用HDFS,首先需要在HDFS中创建用户目录,命令如下:

接下来,把本地文件系统的/usr/local/hadoop/etc/hadoop目录中的所有.xml文件作为输入文件,复制到HDFS的/user/hadoop/input目录下,命令如下:

现在可以以伪分布式模式运行Hadoop中自带的wordcount程序,命令如下:

运行结束后,可以通过如下命令查看HDFS中output文件夹中的内容:

需要强调的是,Hadoop运行程序时,输出目录不能存在,否则会提示错误信息。因此,若要再次执行wordcount程序,需要先执行如下命令删除HDFS中的output文件夹:

6.关闭Hadoop

如果要关闭Hadoop,可以执行如下命令:

7.配置PATH变量

前面在启动Hadoop时,都是先进入/usr/local/hadoop目录中,再执行./sbin/start-dfs.sh,等同于执行/usr/local/hadoop/sbin/start-dfs.sh。实际上,通过设置PATH变量,可以在执行命令时不用带上命令本身所在的路径。例如,打开一个Linux终端,在任何一个目录下执行ls命令时,都没有带上ls命令的路径。执行ls命令时,执行的是/bin/ls这个程序,之所以不需要带上命令路径,是因为Linux系统已经把ls命令的路径加入PATH变量中。当执行ls命令时,系统根据PATH这个环境变量中包含的目录位置逐一进行查找,直至在这些目录位置下找到匹配的ls程序(若没有匹配的程序,则系统会提示该命令不存在)。

同样,可以把start-dfs.sh、stop-dfs.sh等命令所在的目录/usr/local/hadoop/sbin加入环境变量PATH中,这样,以后在任何目录下都可以直接使用命令start-dfs.sh启动Hadoop,而不用带上命令路径。具体配置PATH变量的方法是,首先使用Vim编辑器打开~/.bashrc这个文件,然后在这个文件的最前面加入如下一行代码:

如果要继续把其他命令的路径也加入PATH变量中,也需要修改~/.bashrc这个文件,在上述路径的后面用英文冒号隔开,把新的路径加到后面即可。

将这些命令路径添加到PATH变量后,执行命令source~/.bashrc使设置生效。然后在任何目录下只需要直接执行start-dfs.sh命令就可启动Hadoop,执行stop-dfs.sh命令即可停止Hadoop。

1.4.4 Hadoop分布式模式的配置

考虑到机器的性能,本书简单使用两个虚拟机来搭建分布式集群环境:一个虚拟机作为Master节点,另一个虚拟机作为Slave1节点。由3个及以上节点构建分布式集群,也可以采用类似的方法完成安装部署。

Hadoop集群的安装配置大致包括以下步骤。

(1)在Master节点上创建hadoop用户、安装SSH、安装Java环境。

(2)在Master节点上安装Hadoop,并完成配置。

(3)在Slave1节点上创建hadoop用户、安装SSH、安装Java环境。

(4)将Master节点上的/usr/local/hadoop目录复制到Slave1节点上。

(5)在Master节点上启动Hadoop。

根据前面讲述的内容完成步骤(1)到步骤(3),然后继续下面的操作。

1.网络配置

由于搭建本分布式集群在两个虚拟机上进行,需要将两个虚拟机的网络连接方式都改为“桥接网卡”模式,如图1-27所示,以实现两个节点的互连。一定要确保各个节点的MAC地址不能相同,否则会出现IP地址冲突。

图1-27 设置网络连接方式

设置网络连接方式以后,通过ifconfig命令查看两个虚拟机的IP地址,本书所用的Master节点的IP地址为192.168.0.115,Slave1节点的IP地址为192.168.0.114。

在Master节点上执行如下命令可修改Master节点中的/etc/hosts文件:

在hosts文件中增加如下两条IP地址和主机名的映射关系,即集群中两个节点与对应IP地址的映射关系:

需要注意的是,hosts文件中只能有一个127.0.0.1映射关系,其对应的主机名为localhost,如果有多个127.0.0.1映射关系,则应删除。hosts文件修改完成后,需要重启Master节点的Linux系统。

参照Master节点的配置方法,修改Slave1节点中的/etc/hosts文件,在hosts文件中增加如下两条IP地址和主机名的映射关系:

hosts文件修改完成后,同样需要重启Slave1节点的Linux系统。

这样就完成了Master节点和Slave节点的配置,然后需要在两个节点上测试它们是否相互ping得通,如果ping不通,后面就无法顺利配置成功。

在Master节点上ping 3次Slave1节点,如果ping得通的话,会显示下述信息:

2.SSH免密码登录Slave1节点

下面要让Master节点可以SSH免密码登录Slave1节点。首先,生成Master节点的公钥,具体命令如下:

Master节点生成公钥的界面如图1-28所示。

图1-28 Master节点生成公钥的界面

为了让Master节点能够SSH免密码登录本机,需要在Master节点上执行如下命令:

执行上述命令后,可以执行命令ssh Master验证Master节点能否SSH免密码登录本机,遇到提示信息,输入yes即可,测试成功的界面如图1-29所示,执行exit命令返回原来的终端。

图1-29 测试成功的界面

接下来在Master节点上将上述生成的公钥传输到Slave1节点:

上述命令中,scp是secure copy的缩写,用于在Linux上远程复制文件。执行scp时会要求输入Slave1节点上hadoop用户的密码,输入完成后会提示传输完毕,执行过程如下所示:

接着在Slave1节点上将SSH公钥加入授权:

执行上述命令后,在Master节点上就可以SSH免密码登录到Slave1节点了,可在Master节点上执行如下命令进行验证:

执行ssh Slave1命令的效果如图1-30所示。

3.配置PATH变量

在Master节点上配置PATH变量,以便在任意目录中可直接使用hadoop、hdfs等命令。执行vim~/.bashrc命令,打开~/.bashrc文件,在该文件最上面加入如下一行内容:

图1-30 执行ssh Slave1命令的效果

保存后执行命令source~/.bashrc使配置生效。

4.配置分布式环境

配置分布式环境时,需要修改/usr/local/hadoop/etc/hadoop目录下的5个配置文件,具体包括slaves、core-site.xml、hdfs-site.xml、mapred-site.xml和yarn-site.xml。

(1)修改slaves文件。需要把所有DataNode的主机名写入该文件,每行一个,默认为localhost(即把本机作为DataNode)。所以,在进行伪分布式模式配置时,就采用了这种默认配置,使得节点既作为NameNode又作为DataNode。在进行分布式模式配置时,可以保留localhost,让Master节点既充当NameNode又充当DataNode,或者删除localhost这一行,让Master节点仅作为NameNode使用。执行vim/usr/local/hadoop/etc/hadoop/slaves命令,打开/usr/local/hadoop/etc/hadoop/slaves文件,由于只有一个Slave节点Slave1,本书让Master节点既充当NameNode又充当DataNode,因此,在文件中添加如下两行内容:

(2)修改core-site.xml文件。core-site.xml文件用来配置Hadoop集群的通用属性,包括指定NameNode的地址和指定Hadoop临时文件的存放路径等。把core-site.xml文件修改为如下内容:

(3)修改hdfs-site.xml文件。hdfs-site.xml文件用来配置HDFS的属性,包括指定HDFS保存数据的副本数量、指定HDFS中NameNode的存储位置、指定HDFS中DataNode的存储位置等。本书让Master节点既充当NameNode又充当DataNode,此外还有一个Slave节点Slave1,即集群中有两个DataNode,所以将dfs.replication的值设置为2。hdfs-site.xml的具体内容如下:

(4)修改mapred-site.xml文件。/usr/local/hadoop/etc/hadoop目录下有一个mapred-site.xml.template文件,需要将该文件重命名为mapred-site.xml:

把mapred-site.xml文件配置成如下内容:

(5)修改yarn-site.xml文件。YARN是MapReduce的调度框架。yarn-site.xml文件用于配置YARN的属性,包括指定NodeManager获取数据的方式、指定ResourceManager的地址。把yarn-site.xml文件配置成如下内容:

上述5个文件配置完成后,需要把Master节点上的/usr/local/hadoop文件夹复制到各个节点上。如果之前运行过伪分布式模式,建议在切换到分布式模式之前先删除在伪分布式模式下生成的临时文件。具体来说,在Master节点上实现上述要求需执行的命令如下:

然后在Slave1节点上执行如下命令:

Hadoop集群包含两个基本模块:分布式文件系统HDFS和分布式计算框架MapReduce。首次启动Hadoop集群时,需要先在Master节点上格式化HDFS,命令如下:

HDFS格式化成功后,就可以输入启动命令来启动Hadoop集群了。Hadoop采用主从架构,启动时由主节点带动从节点,所以启动集群的操作需要在Master节点上完成。在Master节点上启动Hadoop集群的命令如下:

Hadoop自带了一个历史服务器,可以通过历史服务器查看已经运行完的MapReduce作业记录,了解用了多少个Map、用了多少个Reduce、作业提交时间、作业启动时间、作业完成时间等信息。默认情况下,Hadoop历史服务器是没有启动的。

jps命令用于查看各个节点启动的进程。如果在Master节点上可以看到DataNode、NameNode、ResourceManager、SecondaryNameNode、JobHistoryServer和NodeManager等进程,就表示主节点进程启动成功,如下所示:

在Slave1节点的终端执行jps命令,如果在输出结果中可以看到DataNode和NodeManager等进程,就表示从节点进程启动成功,如下所示:

关闭Hadoop集群,需要在Master节点执行如下命令:

此外,还可以启动全部Hadoop集群或者停止全部Hadoop集群。

启动命令:

停止命令:

5.执行分布式实例

执行分布式实例的过程与执行伪分布式实例的过程一样,首先创建HDFS中的用户目录,命令如下:

然后在HDFS中创建一个input目录,并把/usr/local/hadoop/etc/hadoop目录中的配置文件作为输入文件复制到input目录中,命令如下:

接下来,就可以运行MapReduce作业了,命令如下:

执行完毕后的输出结果如下所示:

6.运行计算圆周率π 的实例

在数学领域,计算圆周率π的方法有很多种,在Hadoop自带的examples中就给出了一种利用分布式系统计算圆周率π的方法。下面通过运行程序来检查Hadoop集群是否安装配置成功,命令如下:

Hadoop的命令类似Java命令,通过jar指定要运行的程序所在的JAR包hadoop-mapreduce-examples-*.jar。参数pi表示运行计算圆周率的程序。再看后面的两个参数:第一个参数“10”指的是要运行10次Map任务,第二个参数“100”指的是每个Map任务的运行次数。执行结果如下所示:

如果以上的验证都没有问题,说明Hadoop集群配置成功。 Ke7YkR/iEgRczpDqeWBPoaKyFMPfKFcV0MT5UVN7/GQ1AdRXl1rZK6iDq+SCwr2a

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