Hadoop: 完全分布式環(huán)境搭建

說(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 utilitiesOpenSSH 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)行如下配置:

  1. 設(shè)置主機(jī)名
  2. 設(shè)置靜態(tài) IP
  3. 安裝 JDK
  4. 安裝 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

參考 JDK 的正確安裝姿勢(shì)

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 

配置

  1. 配置 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
...
  1. 修改 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>

綁定 hostnameip
之前我們?cè)谖锢頇C(jī)中綁定過(guò) iphostname?,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)證

  1. 在 HDFS 上創(chuàng)建目錄
$ hadoop fs -mkdir -p /data/input
  1. 在本地創(chuàng)建 wordcount.txt 文件并上傳到 HDFS
    wordcount.txt中的內(nèi)容如下:
Hello laowang
hello kviccn
hello jack

上傳到文件到 HDFS

$ hadoop fs -put wordcount.txt /data/input
  1. 運(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)境搭建成功。

其他:

Ubuntu16.04換源 參考 這篇文章
中文亂碼 參考 這篇文章

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容