書名: Hadoop大數據平臺集群部署與開發作者名: 羅文浪等主編本章字數: 5872字更新時間: 2021-01-06 18:27:24
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配置免密碼登錄。