說(shuō)明:本文所有操作均在 64位 ubuntu 16.04 操作系統(tǒng)下進(jìn)行
準(zhǔn)備
通過(guò)物理機(jī)器虛擬化 4 臺(tái)虛擬機(jī):1 個(gè) Master 節(jié)點(diǎn),3 個(gè) Slave 節(jié)點(diǎn)。為了實(shí)現(xiàn)節(jié)點(diǎn)間在同一局域網(wǎng)上定向通信,配置使用靜態(tài)地址,各節(jié)點(diǎn)的 IP 分布如下:
節(jié)點(diǎn)主機(jī)名 | 靜態(tài) IP 地址 | 主要角色 |
---|---|---|
master | 192.168.1.200 | namenode 節(jié)點(diǎn) |
slave01 | 192.168.1.201 | datanode 節(jié)點(diǎn) |
slave02 | 192.168.1.202 | datanode 節(jié)點(diǎn) |
slave03 | 192.168.1.203 | datanode 節(jié)點(diǎn) |
Master 節(jié)點(diǎn)機(jī)器主要配置 NameNode 和 JobTracker 角色,總體負(fù)責(zé)分布式數(shù)據(jù)和分解任務(wù)的執(zhí)行;Slave 節(jié)點(diǎn)機(jī)器配置 DataNode 和 TaskTracker 的角色,負(fù)責(zé)分布式數(shù)據(jù)存儲(chǔ)以及任務(wù)的執(zhí)行。
需要的軟件:
軟件名稱(chēng) | 描述 |
---|---|
VirtualBox | 用于虛擬化主機(jī) |
Ubuntu Server 16.04.2 LTS | 服務(wù)器版的 ubuntu 操作系統(tǒng) |
jdk-8u121-linux-x64.tar.gz | Hadoop 需要 JDK 的支持 |
hadoop-2.7.3.tar.gz | hadoop 的安裝文件 |
配置一個(gè)單節(jié)點(diǎn)環(huán)境
安裝 VirtualBox
使用 apt
安裝 virtual box
$ sudo apt install virtualbox
新建虛擬機(jī)
打開(kāi) VirtualBox,點(diǎn)擊 New,Name 填 master (為方便區(qū)分),Type 選擇 Linux,Version 選擇 Ubuntu(64-bit),點(diǎn)擊下一步。
一路 Next,最終如下圖。
為虛擬機(jī)安裝操作系統(tǒng)
選擇鏡像
點(diǎn)擊 Settings,選中 Storage -> Controller:IDE -> Empty
右上方有一個(gè)光盤(pán)的小圖標(biāo),點(diǎn)擊之后選擇下載好的 Ubuntu Server 鏡像
點(diǎn)擊 OK 確定。
安裝
點(diǎn)擊 Start 運(yùn)行虛擬機(jī)開(kāi)始安裝
注意:語(yǔ)言請(qǐng)選擇 "English",選擇 "中文" 安裝過(guò)程中會(huì)報(bào)錯(cuò)
選擇 "Install Ubuntu Server"
一路回車(chē),到創(chuàng)建新用戶(hù)時(shí)停止。
這里我將用戶(hù)名設(shè)置為 spark (最頭疼的就是起名字了,你可以根據(jù)自己的喜好隨意起名 _ )
continue,continue,到設(shè)置密碼的時(shí)候停止。
注意:密碼輸入完成后還需重新輸入一次以確認(rèn)兩次密碼是否一致
如果密碼強(qiáng)度太弱系統(tǒng)會(huì)發(fā)出如下提示:
手動(dòng)選擇 Yes
然后一路回車(chē)。注意,在此過(guò)程中系統(tǒng)會(huì)自動(dòng)配置時(shí)區(qū)時(shí)間,就不要 cancel 了,讓它自己配一會(huì)兒。
接下來(lái)是給磁盤(pán)分區(qū),依舊回車(chē),到如圖所示的時(shí)候停下來(lái),選擇 Yes
繼續(xù),到這一步,選擇 Yes
現(xiàn)在靜靜的等一小會(huì)兒_。
到這一步,直接 continue
然后系統(tǒng)會(huì)連接網(wǎng)絡(luò)更新軟件,這一步不是必須的(且比較耗時(shí)),所以選擇 cancel,然后繼續(xù)回車(chē),到下圖所示的步驟停止。
這里我們選擇安裝 standard system utilities
和 OpenSSH server
。standard system utilities
不安裝的話(huà)機(jī)器基本無(wú)法正常使用,安裝 OpenSSH server
是為了方便集群之間的通信。
好了,剩下的所有對(duì)話(huà)框都可以用回車(chē)解決了。
等待安裝完成,系統(tǒng)會(huì)自動(dòng)重啟。
關(guān)閉虛擬機(jī),并設(shè)置虛擬機(jī)的網(wǎng)絡(luò)為橋接(bridged adapter)模式。
對(duì)安裝的操作系統(tǒng)進(jìn)行配置
啟動(dòng)虛擬機(jī),并進(jìn)行如下配置:
- 設(shè)置主機(jī)名
- 設(shè)置靜態(tài) IP
- 安裝 JDK
- 安裝 Hadoop
1. 設(shè)置主機(jī)名
打開(kāi)文件 hostname
$ sudo vim /etc/hostname
將內(nèi)容修改為 master
2. 設(shè)置靜態(tài) IP
打開(kāi)文件 interfaces
$ sudo vim /etc/network/interfaces
我的 interfaces
文件中的內(nèi)容如下:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto enp0s3
iface enp0s3 inet dhcp
將 dhcp
修改為 static
,并添加 ip 地址,子網(wǎng)掩碼,網(wǎng)關(guān)
修改完成后的文件內(nèi)容如下:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto enp0s3
iface enp0s3 inet static
address 192.168.1.200
netmask 255.255.255.0
gateway 192.168.1.1
完成后繼續(xù)配置 DNS 解析
$ sudo vim /etc/resolvconf/resolv.conf.d/base
添加如下內(nèi)容:
nameserver 192.168.1.1
nameserver 114.114.114.114
重啟使配置生效
此時(shí),主機(jī)名已經(jīng)是 master
了,運(yùn)行 ifconfig
查看一下 ip
是否正確修改
spark@master:~$ ifconfig
...
enp0s3 Link encap:Ethernet HWaddr 08:00:27:0f:f6:ec
inet addr:192.168.1.200 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe0f:f6ec/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:86 errors:0 dropped:0 overruns:0 frame:0
TX packets:86 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:12088 (12.0 KB) TX bytes:12102 (12.1 KB)
...
看到 inet addr
已經(jīng)修改為 192.168.1.200
在進(jìn)行接下來(lái)的操作之前我們先配置一下本機(jī)(物理機(jī))的 hosts
文件,使 ip
和主機(jī)名綁定,方便后續(xù)操作
$ sudo vim /etc/hosts
在文件末尾添加如下內(nèi)容:
192.168.1.200 master
192.168.1.201 slave01
192.168.1.202 slave02
192.168.1.203 slave03
現(xiàn)在我們就可以通過(guò)主機(jī)名來(lái)連接主機(jī)了
打開(kāi)終端,使用 ssh
連接虛擬機(jī)
$ ssh spark@master
spark 為虛擬機(jī)中創(chuàng)建的用戶(hù)名,master 為剛才配置的主機(jī)名
中間會(huì)有個(gè)小提示,輸入 yes
回車(chē),然后輸入 spark
用戶(hù)的密碼
3. 安裝 JDK
4. 安裝 Hadoop
我已經(jīng)提前下載好了 hadoop-2.7.3.tar.gz,直接傳到虛擬機(jī)里就可以了
這里有個(gè)小技巧,可以用 scp
命令在 linux
主機(jī)之間傳文件,例如:
$ scp hadoop-2.7.3.tar.gz spark@master:/home/spark/
這條命令表示將文件 hadoop-2.7.3.tar.gz
從本機(jī)復(fù)制到 master
主機(jī)的 /home/spark/
目錄下
在虛擬機(jī)中進(jìn)行安裝 hadoop 的操作
解壓安裝文件
在用戶(hù)家目錄下新建 apps
目錄,將 hadoop-2.7.3.tar.gz
移動(dòng)到 apps
目錄中進(jìn)行解壓
$ mkdir apps && mv hadoop-2.7.3.tar.gz apps && cd apps && tar zxvf hadoop-2.7.3.tar.gz
配置
- 配置 hadoop 環(huán)境變量
export HADOOP_HOME="/home/spark/apps/hadoop-2.7.3"
export HADOOP_LOG_DIR="$HADOOP_HOME/logs"
export YARN_LOG_DIR="$HADOOP_LOG_DIR"
export PATH="$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin"
使配置立即生效
$ source ~/.bashrc
執(zhí)行 hadoop
命令,出現(xiàn)如下信息則說(shuō)明環(huán)境配置成功
$ hadoop
Usage: hadoop [--config confdir] [COMMAND | CLASSNAME]
CLASSNAME run the class named CLASSNAME
...
- 修改 hadoop 配置文件
2.1 修改~/apps/hadoop-2.7.3/etc/hadoop
目錄下的hadoop-env.sh
yarn-env.sh
mapred-env.sh
文件中JAVA_HOME
的值為/opt/java/jdk1.8.0_121
2.2 修改~/apps/hadoop-2.7.3/etc/hadoop/slaves
文件內(nèi)容如下:
slave01
slave02
slave03
2.3 配置 ~/apps/hadoop-2.7.3/etc/hadoop/core-site.xml
添加如下內(nèi)容:
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
<description>設(shè)定 namenode 的主機(jī)名及端口</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/spark/apps/hadoop-2.7.3/tmp/hadoop-${user.name}</value>
<description>存儲(chǔ)臨時(shí)文件的目錄</description>
</property>
<!-- 用戶(hù) "spark" 可以代理所有主機(jī)上的所有用戶(hù) -->
<property>
<name>hadoop.proxyuser.spark.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.spark.groups</name>
<value>*</value>
</property>
2.4 配置 ~/apps/hadoop-2.7.3/etc/hadoop/hdfs-site.xml
添加如下內(nèi)容:
<property>
<name>dfs.namenode.http-address</name>
<value>master:50070</value>
<description> NameNode 地址和端口 </description>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave01:50090</value>
<description> SecondNameNode 地址和端口 </description>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
<description> 設(shè)定 HDFS 存儲(chǔ)文件的副本個(gè)數(shù),默認(rèn)為 3 </description>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///home/spark/apps/hadoop-2.7.3/dfs/name</value>
<description> namenode 用來(lái)持續(xù)存儲(chǔ)命名空間和交換日志的本地文件系統(tǒng)路徑 </description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///home/spark/apps/hadoop-2.7.3/dfs/data</value>
<description> DateNode 在本地存儲(chǔ)塊文件的目錄列表 </description>
</property>
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file:///home/spark/apps/hadoop-2.7.3/dfs/namesecondary</value>
<description>
設(shè)置 secondarynamenode 存儲(chǔ)臨時(shí)鏡像的本地文件系統(tǒng)路徑,
如果這是一個(gè)用逗號(hào)分隔的列表,則鏡像將會(huì)冗余復(fù)制到所有目錄
</description>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
<description> 是否允許網(wǎng)頁(yè)瀏覽 HDFS 文件 </description>
</property>
<property>
<name>dfs.stream-buffer-size</name>
<value>131072</value>
<description>
默認(rèn) 4KB,作為 hadoop 緩沖區(qū),用于 hadoop 讀 HDFS 的文件和寫(xiě) HDFS 的文件,
還有 map 的輸出都用到了這個(gè)緩沖區(qū)容量,對(duì)于現(xiàn)在的硬件,可以設(shè)置為 128KB(131072),
甚至是 1MB(太大了 map 和 reduce 任務(wù)可能會(huì)內(nèi)存溢出)
</description>
</property>
2.5 配置 ~/apps/hadoop-2.7.3/etc/hadoop/mapred-site.xml
該文件需要通過(guò)模板復(fù)制一份
$ cp mapred-site.xml.template mapred-site.xml
添加如下內(nèi)容:
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
2.6 配置 ~/apps/hadoop-2.7.3/etc/hadoop/yarn-site.xml
添加如下內(nèi)容:
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
綁定 hostname
與 ip
之前我們?cè)谖锢頇C(jī)中綁定過(guò) ip
與 hostname
?,F(xiàn)在,在虛擬機(jī)中進(jìn)行同樣的操作
$ sudo vim /etc/hosts
在文件末尾添加如下內(nèi)容:
192.168.1.200 master
192.168.1.201 slave01
192.168.1.202 slave02
192.168.1.203 slave03
通過(guò) ping master
檢查是否修改成功
$ ping master
PING master (192.168.1.200) 56(84) bytes of data.
64 bytes from master (192.168.1.200): icmp_seq=1 ttl=64 time=0.016 ms
64 bytes from master (192.168.1.200): icmp_seq=2 ttl=64 time=0.022 ms
64 bytes from master (192.168.1.200): icmp_seq=3 ttl=64 time=0.021 ms
至此,我們已經(jīng)完成了一臺(tái)主機(jī)上 hadoop 的配置,接下來(lái),我們通過(guò) master 主機(jī)克隆 3 個(gè) slave 主機(jī)
克隆多個(gè)虛擬主機(jī)
關(guān)閉虛擬機(jī),選中列表中的 master,右鍵選擇 clone
將其命名為 slave01,并把下面的對(duì)勾打上(用于重新初始化 MAC 地址)
繼續(xù)創(chuàng)建 slave02, slave03,方法同上
現(xiàn)在,我們就有了 4 臺(tái)虛擬主機(jī)
配置 slave 主機(jī)
修改 slave01 的 hostname
$ sudo vim /etc/hostname
內(nèi)容如下:
slave01
修改 slave01 的 ip
$ sudo vim /etc/network/interfaces
將 address
修改為 192.168.1.201
對(duì) slave02 和 slave03 做類(lèi)似操作
配置 SSH 免密碼登錄
在 master 主機(jī)上運(yùn)行如下命令(一路回車(chē)):
$ ssh-keygen -t rsa
此時(shí) ~/.ssh
目錄下會(huì)生成兩個(gè)文件:id_rsa
id_rsa.pub
,前者是私鑰,后者是公鑰
將 id_rsa.pub
寫(xiě)入 authorized_keys
文件并測(cè)試是否可以對(duì)本機(jī)進(jìn)行 SSH 無(wú)密碼登錄
$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys
$ chmod 600 .ssh/authorized_keys
$ ssh localhost // 接下來(lái)會(huì)詢(xún)問(wèn)是否繼續(xù),輸入 yes 回車(chē)
對(duì) 3 臺(tái) slave 主機(jī)進(jìn)行上述操作均會(huì)生成自己的 authorized_keys
將 slave 主機(jī)的公鑰依次復(fù)制到 master 主機(jī)
$ ssh-copy-id -i ~/.ssh/id_rsa.pub spark@master
此時(shí) master 主機(jī)的 authorized_keys
文件內(nèi)容如下:
$ cat .ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDPdIlGd1POJtarQAVIos5GuZKs64wRQfDXBT/p8WtLshKQ2NN+HGqOqwOY42VjtaEAhoWiWUaT4DPuMgMVso7N90oLVADOu8kEqE8EErrZKTbD1qW4HJOA5LNdNt6ExrTQQMQ8W8gdxN209/e/z7ZIblnT2ZXfw0Y5bQHYf37RI9+vo//NTPFLTP07YoKc9LYTx4YxQxw7PJRm7+G6B2wY5x/YIqYlhwWCqDut/lfoRFR0iMbifsjyOyNMSDF2/f6DQvTgx+EZ3UAxZFSQhE1HSdxpTsWA/SbRctF7MlTWrDYP6eknVfHjdD15CBcqEdkVbiKNJk6WjobeUy8XSWyz spark@master
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC20+5tTSIoj+cLVN9lhWtyyJudzKJP7lEz/bP3fecX00nNAeWD0YJnWMOVibw3ISMZ8lHu4YUqZjzN6taDesqGWtI57o7cRr5PeeuU2Iwruy48MOPHlx4kgXPjLN4APapTJ5m5UPZYjERt3RnEGfHMU5dowZ8QKAl4rk0yApctXoD3N1Kz2avNqKiREdzGo7bJm/HrEzt5uUqKqEQqVpFGOZRhZ7t2Ad/mu5/CvgB/weA24wC3noXliGTxdX6x0/SHKBdIBCWnTzgX6xAbs/l/Gix2Se70/Xl23pJRp4GK/ulOB4zKasxJOTfe0/33BhNT48AUCVoYXRUNuoq7Um3L spark@slave01
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7To6Xa58/2EPR0OOHFpsy5n9acp+a/cwoYXI9rIvO8ISG52FBHahtimEN2RgIon0oU+r32+E3wcZRB/4uwfBQriKxGHpII3WVTEj8qZoDywqITvbhM08EXBISzIIOfIc6s3zCZb6fqQW1Vsw5Toz6QteEB8g9Eq6AXrvM4PKILq+aZeV8qnjFZOWccjz+sHRXyNcP1v111hZbrrOBvAvh5Q8P79ReLDyWjJodfS6MTuQe6kMnTscvwA+2x/qxeYthkXDlp7+ETogYrP/LBcfd+LUX6A2fzFahQSy/Ok1Dzq0N/BRPnpEWD920GwpN0VhjOQMn7relKHxl0I4HUwAz spark@slave02
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC54wC6D1TckbScYKtErVdM8a332bIyyaFDTCoL7kyvHubx4ZE2uY9CxBxosKk/eC9GLYc3gIOfVrXotGBzafQxUUVf/AxsuP2cMoSQU4yjLmyFE5D/HISIG+1kt9wGE6RqL0HmQ7BAOMBwv0rvI4GeEpnEo3O7cwRmEh42r5mS7kAHYKg2f8sLqMeA8UXrh4YUqzs8r64lEphOgd4UBmAdc1xKrM9j95P3dKeFfRANSfckJkNHgdzGYWioaY/qSfYczjR8JLXT6veC822xF6Q6Za05fYMzVVW9f/DfNdXba01rb20RJmQ1lC68ClqgR5EDFqSt5xAaVn4aSuH57IOv spark@slave03
復(fù)制此文件到 3 臺(tái) slave 主機(jī)即可實(shí)現(xiàn)節(jié)點(diǎn)之間的免密碼登錄
$ scp .ssh/authorized_keys spark@slave01:/home/spark/.ssh/
$ scp .ssh/authorized_keys spark@slave02:/home/spark/.ssh/
$ scp .ssh/authorized_keys spark@slave03:/home/spark/.ssh/
Hadoop 的啟動(dòng)和測(cè)試
格式化文件系統(tǒng)
$ hdfs namenode -format
輸出如下信息:
...
17/03/03 21:11:54 INFO util.ExitUtil: Exiting with status 0
17/03/03 21:11:54 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at master/192.168.1.200
************************************************************/
提示 Exiting with status 0
則表示格式化成功
啟動(dòng) HDFS
啟動(dòng) Hadoop HDFS
服務(wù)
$ start-dfs.sh
驗(yàn)證是否啟動(dòng)成功,在瀏覽器地址欄輸入 http://master:50070 ,出現(xiàn)如下圖所示的信息則表示啟動(dòng)成功:
也可以通過(guò) jps
命令查看各節(jié)點(diǎn)是否正常啟動(dòng)
啟動(dòng) Yarn
$ start-yarn.sh
驗(yàn)證是否啟動(dòng)成功,在瀏覽器地址欄輸入 http://master:8088 ,出現(xiàn)如下圖所示的信息則表示啟動(dòng)成功:
同樣的,也可以使用 jps
命令查看各節(jié)點(diǎn)啟動(dòng)的進(jìn)程
此時(shí)可以看到 master 節(jié)點(diǎn)多了 ResourceManager
進(jìn)程,slave 節(jié)點(diǎn)多了 NodeManager
進(jìn)程
集群驗(yàn)證
使用 Hadoop 自帶的 WordCount 例子進(jìn)行集群驗(yàn)證
- 在 HDFS 上創(chuàng)建目錄
$ hadoop fs -mkdir -p /data/input
- 在本地創(chuàng)建
wordcount.txt
文件并上傳到 HDFS
wordcount.txt
中的內(nèi)容如下:
Hello laowang
hello kviccn
hello jack
上傳到文件到 HDFS
$ hadoop fs -put wordcount.txt /data/input
- 運(yùn)行 WordCount
$ hadoop jar ${HADOOP_HOME}/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /data/input /data/output
等待運(yùn)行結(jié)束,輸出如下信息:
17/03/03 21:48:46 INFO client.RMProxy: Connecting to ResourceManager at master/192.168.1.200:8032
17/03/03 21:48:48 INFO input.FileInputFormat: Total input paths to process : 1
17/03/03 21:48:48 INFO mapreduce.JobSubmitter: number of splits:1
17/03/03 21:48:48 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1488547769795_0001
17/03/03 21:48:49 INFO impl.YarnClientImpl: Submitted application application_1488547769795_0001
17/03/03 21:48:49 INFO mapreduce.Job: The url to track the job: http://master:8088/proxy/application_1488547769795_0001/
17/03/03 21:48:49 INFO mapreduce.Job: Running job: job_1488547769795_0001
17/03/03 21:49:00 INFO mapreduce.Job: Job job_1488547769795_0001 running in uber mode : false
17/03/03 21:49:00 INFO mapreduce.Job: map 0% reduce 0%
17/03/03 21:49:09 INFO mapreduce.Job: map 100% reduce 0%
17/03/03 21:49:20 INFO mapreduce.Job: map 100% reduce 100%
17/03/03 21:49:21 INFO mapreduce.Job: Job job_1488547769795_0001 completed successfully
17/03/03 21:49:21 INFO mapreduce.Job: Counters: 49
...
查看結(jié)果:
$ hadoop fs -cat /data/output/*
Hello 1
hello 2
jack 1
kviccn 1
laowang 1
至此,Hadoop 完全分布式環(huán)境搭建成功。