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配置免密码登录。