Hadoop大数据平台集群部署与开发
上QQ阅读APP看书,第一时间看更新

1.2 任务二:搭建Hadoop伪分布式环境

【任务描述】

在认知了大数据之后,我们是不是也来体验一下Hadoop?但是我们还缺少环境条件,如果直接搭建Hadoop生产环境(高可用集群)就稍显复杂了,不如搭建一个Hadoop伪分布式环境,这也不妨碍我们的体验。而且搭建Hadoop伪分布式环境和搭建生产环境有很多相通之处,学习了搭建Hadoop伪分布式环境同样有利于我们后续搭建Hadoop生产环境。

1.2.1 准备工作

搭建Hadoop伪分布式环境,需要在单个节点上进行部署。在安装Hadoop之前,我们需要安装Hadoop的运行环境——Linux系统,本教材中选择安装的是CentOS7 mini server版本。我们可以通过VMWare、VirtualBox等虚拟化软件来创建部署所需要的虚拟机,安装过程略。需要注意的是,在安装时需要配置虚拟机的网卡信息,我们选择桥接网卡,这样虚拟机与虚拟机、虚拟机与主机之间都可以进行通信,同时也方便在虚拟机中下载安装所需要的资源。

配置好网卡后,建议测试一下网络环境是否存在问题,测试代码如下:

【代码1-1】测试网络环境

[root@huatec01 ~]# ping baidu.com

PING baidu.com(220.181.57.217)56(84)Byte of data.

64 Byte from 220.181.57.217: icmp_seq=1 ttl=57 time=5.10 ms

64 Byte from 220.181.57.217: icmp_seq=2 ttl=57 time=4.28 ms

[root@huatec01 ~]# ping 192.168.14.103

PING 192.168.14.103(192.168.14.103)56(84)Byte of data.

64 Byte from 192.168.14.103: icmp_seq=1 ttl=64 time=0.929 ms

64 Byte from 192.168.14.103: icmp_seq=2 ttl=64 time=0.256 ms

其中,PING baidu.com用于测试外网环境,PING 192.168.14.103用于测试内部网络环境,通过上面的代码我们看出,测试通过了,这表明我们的虚拟机的网卡配置信息是正确的。

同时,我们还需要关闭系统的防火墙,CentOS 7默认关闭iptables,关闭fi rewalld防火墙和selinux防火墙即可,代码如下所示:

【代码1-2】关闭并查看fi rewalld防火墙

[root@huatec01 ~]# systemctl stop firewalld

[root@huatec01 ~]# systemctl disable firewalld

[root@huatec01 ~]# systemctl status firewalld

firewalld.service-firewalld-dynamic firewall daemon

Loaded: loaded (/usr/lib/systemd/system/firewalld.service;disabled)

Active: inactive(dead)

Oct 12 22:54:57 huatec01 systemd[1]: Stopped firewalld-dynamic

firewall daemon.

在关闭firewalld防火墙之前,需要先执行“systemctl stop firewalld”命令来停止防火墙,避免其已经处于运行状态,导致关闭失败,然后调用systemctl disable firewalld让其彻底不可用。最后,执行systemctl status firewalld指令查看防火墙是否关闭成功。从上述的代码中可以看到最后的防火墙状态是inactive(dead),说明操作成功。

关闭selinnux防火墙,代码如下:

【代码1-3】关闭selinnux防火墙

[root@huatec01 ~]# vi /etc/sysconfig/selinux

# This file controls the state of SELinux on the system.

# SELINUX=can take one of these three values:

#   enforcing-SELinux security policy is enforced.

#   permissive-SELinux prints warnings instead of enforcing.

#   disabled-No SELinux policy is loaded.

SELINUX=disabled

# SELINUXTYPE=can take one of three two values:

# targeted-Targeted processes are protected,

# minimum-Modification of targeted policy.Only selected processes are protected.

# mls-Multi Level Security protection.

SELINUXTYPE=targeted

我们修改其中的一行,将SELINUX的值改为disabled即可。从上面的注释中可以看到SELINUX的取值有3个,分别为enforcing、permissive和disabled。enforcing表示SELINUX安全策略是强制性的;permissive表示SELINUX安全策略将会提示权限问题,输出提示信息;disabled是直接让其不可用。

【知识引申】

如果是CentOS 6.0,参考如下方式关闭防火墙。

第一步:关闭iptables和 ip6tables

#查看防火墙状态

service iptables status

service ip6tables status

#关闭防火墙

service iptables stop

service ip6tables stop

#查看防火墙开机启动状态

chkconfig iptables list

chkconfig ip6tables--list

#关闭防火墙开机启动

chkconfig iptables off

chkconfig ip6tables off

在生产环境中,需要为每个虚拟机设置固定的ip和主机名,即使是搭建伪分布式环境,也建议这么做。执行vim /etc/sysconfi g/network-scripts/ifcfg-eth0指令,打开ip配置文件进行编辑,编辑后的文件结果如下:

【代码1-4】配置固定ip

[root@huatec01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp0s3

HWADDR="08:00:27:89:86:1a"

TYPE="Ethernet"

BOOTPROTO="static"

DEFROUTE="yes"

PEERDNS="yes"

PEERROUTES="yes"

IPV4_FAILURE_FATAL="yes"

NAME="enp0s3"

UUID="1cd81753-424f-46aa-890d-9bb23f11438f"

ONBOOT="yes"

IPADDR=192.168.14.101

NETMASK=255.255.240.0

DNS=202.106.0.20

GATEWAY=192.168.0.1

其中,BOOTPROTO=“static”表明ip的获取方式是固定ip,ONBOOT=“yes”表明开机后就应用这个配置,IPADDR=“192.168.8.101”、NETMASK=“255.255.255.0”、GATEWAY=“192.168.8.1”分别为虚拟机配置的ip、子网掩码和默认网关信息。完成设置后,可以通过ifconfi g查看当前的ip是否设置成功,如果显示不成功,建议重启虚拟机后进行查看。

Mini版本的虚拟机默认没有安装ifconfi g指令的相关工具,请执行安装指令:yum install net-tools*。修改主机名,操作如下所示:

【代码1-5】修改主机名

[root@huatec01 ~]# hostnamectl set-hostname huatec01

[root@huatec01 ~]# hostname

huatec01

其中,hostnamectl set-hostname huatec01指令用于设置主机名,设置成功后,通过hostname指令查看设置是否生效。

最后,为主机名和ip配置映射关系,打开/etc/hosts文件进行编辑,在文件的末尾增加192.168.8.101 huatec01即可,编辑后的文件如下所示:

【代码1-6】配置主机名和ip映射关系

[root@huatec01 ~]# vi /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1       localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.8.101 huatec01

Hadoop的运行需要依赖java环境,而且不同版本的Hadoop对JDK的版本要求也不同。本教材中选择安装的是Hadoop 2.7.3版本,它要求JDK最低版本为1.7,具体说明如图1-4所示。

图1-4 Hadoop Java Versions

JDK官网显示的是最新版本下载,我们需要点击如图1-5所示的栏目,进入JDK历史版本下载界面。

图1-5 下载JDK示意

我们选择JDK7 X64位进行下载,如图1-6所示。

图1-6 下载JDK示意

将本地下载的JDK安装包上传到服务器,执行操作如下所示:

【代码1-7】上传JDK

bogon:~ zhusheng$ scp /Users/zhusheng/Backup/Hadoop/JDK-7u80-linux-x64.tar root@192.168.14.101:/home/zhusheng/

root@192.168.14.101's password:

JDK-7u80-linux-x64.tar 100% 294MB 92.0MB/s 00:03

bogon:~ zhusheng$

我们在服务器端进行JDK的安装工作,首先,新建一个JDK安装目录,然后将压缩包解压到我们的安装目录下,具体操作如下所示:

【代码1-8】安装JDK

[root@huatec01 java]# cd /usr/local

[root@huatec01 java]# mkdir java

[root@huatec01 java]# tar –xvf JDK-7u80-linux-x64.tar-C /usr/local/java/

[root@huatec01 /]# cd /usr/local/java/

[root@huatec01 java]# ls-al

total 8

drwxr-xr-x.3 root root 24 Jun 6 20:53.

drwxr-xr-x.15 root root 4096 Sep 21 23:02..

drwxr-xr-x.8 10 143 4096 Apr 10 2015 JDK1.7.0_80

解压即可完成安装。

【知识引申】:tar指令参数说明

z:表示gz格式的压缩文件。

x:表示释放,也就是解压。

v:显示解压过程文件。

f:解压到一个目录下。

-C:指定目录。

JDK安装完成后,我们还需要为系统配置java环境变量,打开环境变量配置文件/etc/profi le进行编辑,在文件中增加如下代码:

【代码1-9】配置java环境变量

[root@huatec01 local]# vi /etc/profi le

#java

JAVA_HOME=/usr/local/java/JDK1.7.0_80

export PATH=$PATH:$JAVA_HOME/bin

执行source /etc/profi le指令来更新环境变量配置文件,最后在任意目录执行java –version指令检测JDK是否安装成功以及环境变量是否成功配置。检测java是否安装成功的具体操作如下:

【代码1-10】检测java是否安装成功

[root@huatec01 local]# java-version

java version "1.7.0_80"

Java(TM)SE Runtime Environment(build 1.7.0_80-b15)

Java HotSpot(TM)64-Bit Server VM(build 24.80-b11,mixed mode)

[root@huatec01 local]#

如上所示,表明JDK已经安装成功!

至此,准备工作已经完成,下面将开始搭建Hadoop伪分布式环境。

1.2.2 搭建伪分布式环境

Hadoop伪分布式环境就是在一个节点上安装Hadoop,它包含了HDFS和基于Yarn架构的MapReduce。

1.下载与安装

Hadoop的下载示意如图1-7所示。

图1-7 Hadoop下载示意

其中,带src的是Hadoop源码包,另一个为Hadoop安装包。下载完成后,将其安装包上传到服务器进行安装。

首先,创建一个目录作为Hadoop的安装目录,Hadoop的安装十分简单,解压即可完成安装,安装Hadoop代码如下:

【代码1-11】安装Hadoop

[root@huatec01 /]# mkdir /huatec

[root@huatec01 /]# tar –zxvf hadoop-2.7.3.tar.gz –C /huatec

[root@huatec01 /]# cd /huatec/

[root@huatec01 huatec]# ls-al

total 24

drwxr-xr-x.7 root root 4096 Sep 15 03:29.

drwxr-xr-x.21 root root 4096 Oct 12 23:59..

drwxr-xr-x.12 root root 4096 Sep 14 04:41 Hadoop-2.7.3

我们来看一看Hadoop的目录结构是怎么样的,进入安装Hadoop的目录,代码如下所示:

【代码1-12】Hadoop目录结构

[root@huatec01 huatec]# cd Hadoop-2.7.3/

[root@huatec01 Hadoop-2.7.3]# ls-al

total 128

drwxr-xr-x.12 root root 4096 Sep 14 04:41.

drwxr-xr-x. 7 root root 4096 Sep 15 03:29..

drwxr-xr-x. 2 root root 4096 Aug 17 2016 bin

drwxr-xr-x. 3 root root  19 Aug 17 2016 etc

drwxr-xr-x. 2 root root  101 Aug 17 2016 include

drwxr-xr-x. 3 root root  16 Sep 14 04:41 journal

drwxr-xr-x. 3 root root  19 Aug 17 2016 lib

drwxr-xr-x. 2 root root 4096 Aug 17 2016 libexec

-rw-r--r--. 1 root root 84854 Aug 17 2016 LICENSE.txt

drwxr-xr-x. 3 root root 4096 Sep 27 05:37 logs

-rw-r--r--. 1 root root 14978 Aug 17 2016 NOTICE.txt

-rw-r--r--. 1 root root 1366 Aug 17 2016 README.txt

drwxr-xr-x. 2 root root 4096 Aug 17 2016 sbin

drwxr-xr-x. 4 root root  29 Aug 17 2016 share

drwxr-xr-x. 4 root root  35 Sep 14 04:46 tmp

目录结构的含义见表1-1。

表1-1 Hadoop目录结构说明

2.配置环境变量

安装完Hadoop后,还需要为Hadoop配置全局变量,以方便我们执行Hadoop相关的一些指令,打开环境变量配置文件/etc/profile进行编辑,在文件中增加如下代码所示信息:

【代码1-13】配置Hadoop环境变量

[root@huatec01 local]# vi /etc/profi le

#Hadoop

HADOOP_HOME=/huatec/Hadoop-2.7.3

export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

最后,我们执行source /etc/profi le指令来更新环境变量配置文件。

3.修改配置文件

要想启动Hadoop,还需要进入$HADOOP_HOME/etc/hadoop/目录,修改Hadoop的配置文件,主要有5个,分别为:

① hadoop.env.sh;

② core-site.xml;

③ hdfs-site.xml;

④ mapped-site.xml;

⑤ yarn-site.xml。

(1)hadoop.env.sh

该文件为Hadoop的运行环境配置文件,Hadoop的运行需要依赖JDK,我们将其中的export JAVA_HOME的值修改为安装的JDK路径,代码如下所示:

【代码1-14】配置Hadoop.env.sh

[root@huatec01 Hadoop]# vi Hadoop.env.sh

export JAVA_HOME=/usr/local/java/JDK1.7.0_80

...

(2)core-site.xml

该文件为Hadoop的核心配置文件,配置后的文件内容的代码如下所示:

【代码1-15】配置core-site.xml

[root@huatec01 Hadoop]# vi core-site.xml

...

<confi guration>

<property>

<name>fs.defaultFS </name>

<value>hdfs://huatec01:9000</value>

</property>

<property>

<name>hadoop.tmp.dir</name>

<value>/huatec/hadoop-2.7.3/tmp</value>

</property>

</configuration>

在上面的代码中,我们主要配置了两个属性:第一个属性用于指定HDFS的NameNode的通信地址,这里将其指定为huatec01;第二个属性用于指定Hadoop运行时产生的文件存放目录,这个目录我们无须创建,因为在格式化Hadoop时会自动创建。

(3)hdfs-site.xml

该文件为HDFS核心配置文件,配置后的文件内容的代码如下所示:

【代码1-16】配置hdfs-site.xml

[root@huatec01 Hadoop]# vi hdfs-site.xml

...

<confi guration>

<property>

<name>dfs.replication</name>

<value>1</value>

</property>

</confi guration>

Hadoop集群默认的副本数量是3,但是现在只是在单节点上进行伪分布式安装,无须保存3个副本,因此将该属性的值修改为1。

(4)mapped-site.xml

这个文件是不存在的,但是有一个模板文件mapred-site.xml.template,我们将模板文件改名为mapred-site.xml,然后进行编辑。该文件为MapReduce核心配置文件,配置后的文件内容的代码如下所示:

【代码1-17】配置mapped-site.xml

[root@huatec01 Hadoop]# mv mapred-site.xml.template mapred-site.xml

[root@huatec01 Hadoop]# vi mapred-site.xml

...

<confi guration>

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

</confi guration>

之所以配置上面的属性,是因为在Hadoop2.0之后,MapReduce是运行在Yarn架构上的,需要进行特别声明。

(5)yarn-site.xml

该文件为Yarn框架配置文件,主要指定ResourceManager的节点名称及NodeManager属性,配置后的文件内容的代码如下所示:

【代码1-18】配置yarn-site.xml

[root@huatec01 Hadoop]# vi yarn-site.xml

...

<confi guration>

<property>

<name>yarn.resourcemanager.hostname</name>

<value>huatec01</value>

</property>

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffl e</value>

</property>

</confi guration>

在上面的代码中,我们配置了两个属性:第一个属性用于指定ResourceManager的地址,因为是单节点部署,因此指定为huatec01即可;第二个属性用于指定reducer获取数据的方式。

4.格式化系统

至此,配置文件已经修改完毕了。那么是否就可以启动Hadoop了呢?也不是的,在此之前,需要先对Hadoop进行格式化操作,也就是格式化HDFS。这有点类似新买的U盘,需要先格式化才能使用。对于Hadoop1.x,格式化指令为hadoop namenode-format,对于Hadoop2.x,格式化指令已经发生了变化,新的格式化指令为hdfs namenode-format。格式化成功后,tmp目录被自动创建并存入了一些内容,可以查看一下tmp目录,代码如下所示:

【代码1-19】查看格式化后的文件系统

[root@huatec01 Hadoop-2.7.3]# cd tmp/

[root@huatec01 tmp]# ls-al

total 4

drwxr-xr-x. 4 root root 35 Sep 14 04:46.

drwxr-xr-x.12 root root 4096 Sep 14 04:41..

drwxr-xr-x. 4 root root 28 Sep 14 04:45 dfs

drwxr-xr-x. 5 root root 54 Sep 27 06:11 nm-local-dir

[root@huatec01 tmp]# cd dfs

[root@huatec01 dfs]# ls-al

total 0

drwxr-xr-x.4 root root 28 Sep 14 04:45.

drwxr-xr-x.4 root root 35 Sep 14 04:46..

drwx------.3 root root 20 Sep 27 06:12 data

drwxr-xr-x.3 root root 20 Sep 27 06:12 name

[root@huatec01 dfs]# cd name/

[root@huatec01 name]# ls-al

total 12

drwxr-xr-x.3 root root 20 Sep 27 06:12.

drwxr-xr-x.4 root root 28 Sep 14 04:45..

drwxr-xr-x.2 root root 8192 Sep 15 05:33 current

[root@huatec01 name]# cd current/

[root@huatec01 current]# ls-al

total 1488

drwxr-xr-x.2 root root 8192 Sep 15 05:33.

drwxr-xr-x.3 root root 20 Sep 27 06:12..

-rw-r--r--.1 root root 42 Sep 15 02:01

edits_0000000000000000216-0000000000000000217

-rw-r--r--.1 root root 42 Sep 15 02:03

edits_0000000000000000218-0000000000000000219

-rw-r--r--.1 root root 42 Sep 15 02:05

edits_0000000000000000220-0000000000000000221

5.启动Hadoop

启动Hadoop有两种方式。

方式一:我们可以先启动dfs,然后启动yarn。

start-dfs.sh

start-yarn.sh

方式二:一次启动全部。

start-all.sh

建议采用方式一,这样如果启动失败,也知道是哪个组件启动失败。而且Hadoop官方也推荐采用方式一。

启动hdfs的代码如下所示:

【代码1-20】启动hdfs

[root@huatec01 /]# start-dfs.sh

Starting namenodes on[huatec01]

huatec01: starting namenode,logging to /danji/Hadoop-2.7.3/logs/

Hadoop-root-namenode-huatec01.out

localhost: starting datanode, logging to /danji/Hadoop-2.7.3/

logs/Hadoop-root-datanode-huatec01.out

Starting secondary namenodes[0.0.0.0]

0.0.0.0: starting secondarynamenode, logging to /danji/

Hadoop-2.7.3/logs/Hadoop-root-secondarynamenode-huatec01.out

[root@huatec01 /]# jps

6704 DataNode

5170 ResourceManager

6959 Jps

6850 SecondaryNameNode

5262 NodeManager

[root@huatec01 /]#

通过启动日志看到,在启动hdfs的过程中,分别启动了NameNode、DataNode、SecondaryNameNode。

接下来,启动yarn,启动过程代码如下所示:

【代码1-21】启动yarn

[root@huatec01 /]# start-yarn.sh

starting yarn daemons

starting resourcemanager,logging to /danji/Hadoop-2.7.3/logs/yarn-root-resourcemanager-huatec01.out

localhost: starting nodemanager,logging to /danji/Hadoop-2.7.3/logs/yarn-root-nodemanager-huatec01.out

[root@huatec01 /]# jps

4844 DataNode

4983 SecondaryNameNode

5170 ResourceManager

5516 Jps

5262 NodeManager

通过日志看到,在启动yarn的过程中,分别启动了ResourceManager、NodeManager。

到此,Hadoop启动成功。Hadoop管理界面如图1-8所示。在该界面,我们可以了解整个HDFS的概况、文件存储情况以及可视化操作HDFS中的文件。

图1-8 Hadoop管理界面

MapReduce管理界面如图1-9所示。通过该界面,我们可以知道系统在执行一个任务时启动了多少个Job,以及监听每个Job的运行资源情况,还可以查看Job的历史、哪些Job运行成功、哪些Job运行失败。

图1-9 MapReduce管理界面

同理,关闭Hadoop也有两种方式。

方式一:先关闭dfs,然后关闭yarn。

stop-dfs.sh

stop-yarn.sh

方式二:关闭所有。

stop-all.sh

通过体验Hadoop的启动和关闭,我们发现在启动dfs的过程需要输入3次密码,在启动yarn的过程需要输入1次密码,也就是说,每次启动Hadoop都需要输入4次密码,分别对应NameNode、DataNode、SecondaryNameNode、NodeManager。关闭Hadoop的过程中同样需要输入4次密码。单节点操作如此,如果是集群环境,那么启动和关闭的过程就太麻烦了,因此,我们需要考虑解决这个问题。

6.配置SSH免密码登录

Hadoop进程间的通信使用的是SSH协议,即使是当前节点SSH自己,也需要输入密码。为了实现免密码登录,需要在 huatec01主机上进行配置,生成公钥和私钥,然后将自己的公钥添加到信任列表中,这样以后 SSH自己就不用输入密码了。并且也可以将公钥发送给其他主机,让其他主机可以 SSH免密码登录到当前主机。

首先,在huatec01上生成密钥,执行如下代码:

【代码1-22】生成ssh密钥

[root@huatec01 /]# cd /root/.ssh

[root@huatec01.ssh]# ssh-keygen-t rsa

[root@huatec02.ssh]# ls-al

total 20

drwx------.2 root root 76 Sep 14 04:32.

dr-xr-x---.5 root root 4096 Sep 27 05:51..

-rw-------.1 root root 1675 Jul 28 10:13 id_rsa

-rw-r--r--.1 root root 395 Jul 28 10:13 id_rsa.pub

执行ssh-keygen-t rsa生成密钥,rsa是一种非对称加密算法,即使是计算机破解也需要很多年,所以安全性相对来说还是比较高的。在生成密钥的过程中,会提示输入一些信息,此时可以不输入,直接enter下一步。执行完成后查看/root/.ssh目录,发现多了两个文件,它们是生成的密钥对。其中id_rsa是私钥,需要保密;id_rsa.pub是公钥,我们可以共享给其他可信任的用户,让其他用户可以通过SSH免密码连接到当前主机。我们可以打开文件查看密钥内容,它的内容是一个比较长的字符串。查看ssh私钥操作代码如下:

【代码1-23】查看ssh私钥

[root@huatec02.ssh]# cat id_rsa

-----BEGIN RSA PRIVATE KEY----

MIIEowIBAAKCAQEAvJoGzez9jdt6z1zCXaK5GCVvyHRK0bPP67t29tt/lYXrzfmz

UhCrC6JUCN9x0Hm915bvsCx2vb73AekGbGaUDb30NHwo16U8pLO+6oSn0R0afa

pDOa6QKBgCUgIJfT2KgcbIt3OT0AsNuFZXnM8bllZ9t+Doie750rmarn5XNUqT2n

KvjlmI6shRkYYZdTIZRZeudUy/+2ZmlR8Jr0eaTDJSLeIW1iy4I4yvTUZV/z5DjQ

2uDIK4c3mpk4C+cRPI8n9JzFy1J6Ckf2DOdZtN5hlCI7IB2m7nbi

-----END RSA PRIVATE KEY----

接下来,执行cp id_rsa.pub authorized_keys指令将公钥添加到自己信任的列表中。需要注意的是,authorized_keys文件夹本身是不存在的,但是名称写法必须是这样才能有效,不可写成其他名称。

配置完免密码登录后,再次启动Hadoop,发现已经不需要多次输入密码了。

【知识引申】:RSA加密算法概述

RSA加密算法起源于1977年,它的名称是由3位发明者的姓氏开头字母拼在一起组成的,他们分别是罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)。这种算法在当时发明后并没有得到应用,直到10年后才首次在美国公布。

RSA是目前最有影响力和最常用的公钥加密算法,在很多领域都得到广泛的应用,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。它的加密强度和密钥的长度有关,一般只有短的RSA钥匙才可能被强力方式解破。截至2008年,世界上还没有任何攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。但随着分布式计算和量子计算机理论及技术的应用,RSA加密的安全性将受到挑战和质疑。

1.2.3 Hadoop测试

安装完Hadoop之后,分别测试Hadoop的两大核心模块:HDFS和MapReduce,查看其功能是否可用。通过文件上传和下载来测试HDFS,通过Hadoop自带的示例架包测试MapReduce。测试流程如下。

1.HDFS文件上传、下载测试

我们将CentOS系统的一个文件上传到HDFS上,上传指令如下所示:

【代码1-24】HDFS文件上传

[root@huatec01 software]# hadoop fs-put /home/zhusheng/JDK-7u80linux-x64.tar /JDK

[root@huatec01 software]# hadoop fs-ls /

Found 12 items

...

-rw-r--r--3 root supergroup 308285440 2017-10-13 02:49 /JDK

通过执行Hadoop fs –put指令上传文件,上传完成后通过Hadoop fs –ls查看HDFS的文件结构,结果显示上传成功;我们也可以通过图形化界面查看上传的结果情况,如图1-10所示。

图1-10 文件上传

现在下载我们上传的文件,下载指令如下所示:

【代码1-25】hdfs文件下载

[root@huatec01 software]# hadoop fs-get /JDK /home/zhusheng/JDK

[root@huatec01 software]# ls-al /home/zhusheng/

total 12

drwxr-xr-x.5 root root   4096 Oct 13 02:58.

drwxr-xr-x.3 root root 21 Jul 28 04:42..

...

-rw-r--r--.1 root root 308285440 Oct 13 02:58 JDK

我们也可以从浏览器下载,单击需要下载的文件名,进入下载界面,如图1-11所示。

图1-11 Hadoop文件下载

需要注意的是,单击“Download”会进入文件下载路径,我们需要在当前电脑上配置huatec01与ip的映射关系或者修改下载路径的主机名为具体的ip地址,才可以下载成功。

2.MapReduce测试

使用MapReduce框架提供的示例jar包进行测试,统计一个文件里面的单词数量。该jar文件位于/huatec/Hadoop-2.7.3/share/hadoop/mapreduce目录下,名称为Hadoopmapreduce-examples-2.7.3.jar。

需要统计的文件内容的代码如下所示:

【代码1-26】查看统计文件

[root@huatec01 zhusheng]# cat sample-wordcount.txt

username zhusheng

username zhusheng

username caolijie

username zhaoyanhui

username zhaoyanhui

username zhangjing

username shaobing

username zhaoyanhui

username zhangjing

username zhangjing

将该文件上传到HDFS,然后使用上面的jar包执行单词统计指令,代码如下:

【代码1-27】执行统计指令

[root@huatec01 mapreduce]# hadoop fs-mkdir /sample/

[root@huatec01 mapreduce]# hadoop fs-put /home/zhusheng/samplewordcount.txt /sample/

[root@huatec01 mapreduce]# hadoop jar Hadoop-mapreduceexamples-2.7.3.jar wordcount/sample/sample-wordcount.txt /sample/sample-wordcount-result

17/10/13 03:19:13 INFO input.FileInputFormat: Total input paths to process : 1

17/10/13 03:19:14 INFO mapreduce.JobSubmitter: number of splits:1

17/10/13 03:19:14 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1507875298857_0001

17/10/13 03:19:15 INFO impl.YarnClientImpl: Submitted application application_1507875298857_0001

17/10/13 03:19:15 INFO mapreduce.Job: The url to track the job:http://huatec02:8088/proxy/application_1507875298857_0001/

17/10/13 03:19:15 INFO mapreduce.Job: Running job:job_1507875298857_0001

17/10/13 03:19:25 INFO mapreduce.Job: Job job_1507875298857_0001 running in uber mode : false

17/10/13 03:19:25 INFO mapreduce.Job: map 0% reduce 0%

17/10/13 03:19:32 INFO mapreduce.Job: map 100% reduce 0%

17/10/13 03:19:43 INFO mapreduce.Job: map 100% reduce 100%

17/10/13 03:19:43 INFO mapreduce.Job: Job job_1507875298857_0001 completed successfully

执行完成后,结果如图1-12所示。

图1-12 wordcount运行结果

下载结果文件sample-wordcount.result,其内容如图1-13所示。

图1-13 wordcount统计结果

1.2.4 任务回顾

知识点总结

1.搭建Hadoop伪分布式环境。

2.SSH原理。

3.为Hadoop配置SSH免密码登录。

4.Hadoop文件上传及下载测试。

学习足迹

项目1任务二的学习足迹如图1-14所示。

图1-14 项目1任务二学习足迹

思考与练习

1.搭建Hadoop伪分布式环境有哪些步骤?

2.请简述SSH原理,以及如何为Hadoop配置免密码登录。