使用Docker在本地搭建Hadoop分佈式集羣

學習Hadoop集羣環境搭建是Hadoop入門必經之路。搭建分佈式集羣一般有兩個辦法:html

  • 要麼找多臺機器來部署(經常找不到機器)java

  • 或者在本地開多個虛擬機(開銷很大,對宿主機器性能要求高,光是安裝多個虛擬機系統就得搞半天……)。node

那麼,問題來了!python

有沒有更有可行性的辦法?

提到虛擬化,Docker最近非常火熱!不妨拿來在本地作虛擬化,搭建Hadoop的僞分佈式集羣環境。雖然有點大材小用,可是學習學習,練練手也是極好的。git

文章比較長,建議先倒杯水,聽我慢慢到來……web

先說一下個人思路吧:docker

  1. 先使用Docker構建一個Hadoop運行環境的鏡像shell

  2. 而後使用這個鏡像分別啓動3個容器:1個Master節點,兩個Slave節點express

  3. 在Master節點上配置Slave節點信息apache

  4. 在Master上啓動Hadoop

使用Docker搭建Hadoop環境

什麼是 Docker?

Docker 是一個開源項目,誕生於 2013 年初,最初是 dotCloud 公司內部的一個業餘項目。它基於 Google 公司推出的 Go 語言實現。 項目後來加入了 Linux 基金會,聽從了 Apache 2.0 協議,項目代碼在 GitHub 上進行維護。

Docker 自開源後受到普遍的關注和討論,以致於 dotCloud 公司後來都更名爲 Docker Inc。Redhat 已經在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 產品中普遍應用。

Docker 項目的目標是實現輕量級的操做系統虛擬化解決方案。 Docker 的基礎是 Linux 容器(LXC)等技術。

在 LXC 的基礎上 Docker 進行了進一步的封裝,讓用戶不須要去關心容器的管理,使得操做更爲簡便。用戶操做 Docker 的容器就像操做一個快速輕量級的虛擬機同樣簡單。

Docker安裝

我使用的是Ubuntu14.04,命令以下:

$ sudo apt-get install apt-transport-https
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
$ sudo bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
$ sudo apt-get update
$ sudo apt-get install lxc-docker

其他系統或其餘版本,請參考這裏

Docker經常使用命令介紹
  • docker images:列出全部鏡像(images)

  • docker ps:列出正在運行的(容器)containers

  • docker pull ubuntu:下載鏡像

  • docker run -i -t ubuntu /bin/bash:運行ubuntu鏡像

  • docker commit 3a09b2588478 ubuntu:mynewimage:提交你的變動,而且把容器保存成Tag爲mynewimage的新的ubuntu鏡像.(注意,這裏提交只是提交到本地倉庫,相似git)

其餘經常使用命令,參考這裏

Docker去sudo

在Ubuntu下,在執行Docker時,每次都要輸入sudo,同時輸入密碼,這裏把當前用戶執行權限添加到相應的docker用戶組裏面。

# 添加一個新的docker用戶組
sudo groupadd docker
# 添加當前用戶到docker用戶組裏,注意這裏的king爲ubuntu登陸用戶名
sudo gpasswd -a king docker
# 重啓Docker後臺監護進程
sudo service docker restart
# 重啓以後,嘗試一下,是否生效
docker version
#若還未生效,則系統重啓,則生效
sudo reboot
下載Ubuntu鏡像
docker pull ubuntu:14.04

這條命令的做用是從Docker倉庫中獲取ubuntu的鏡像,參考這裏

下載完成之後,使用docker images,能夠列出全部本地的鏡像:

king@king:~$ docker images 
REPOSITORY                      TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu                          14.04               5ba9dab47459        4 weeks ago         188.3 MB
ubuntu                          14.04.1             5ba9dab47459        4 weeks ago         188.3 MB
ubuntu                          latest              5ba9dab47459        4 weeks ago         188.3 MB
ubuntu                          trusty              5ba9dab47459        4 weeks ago         188.3 MB

啓動第一個容器

下面,咱們準備以ubuntu鏡像做爲基準鏡像,構建咱們的Hadoop運行環境鏡像。

先使用命令以下命令啓動容器:

docker run -ti ubuntu

注意:咱們在不指定Tag的狀況下,默認選擇Tag爲latest的鏡像啓動容器。 指定Tag啓動命令爲:

docker run -ti ubuntu:14.04

另外,每次容器啓動的時候須要指定一個命令,容器啓動後便會執行這個命令。例如執行下面的命令:

king@king:~$ docker run ubuntu /bin/echo 'Hello world'
Hello world
king@king:~$

能夠看到,容器啓動了立刻又退出了,由於容器之作了一件事情:就是打印Hello world,打印完了,天然就退出了。

若是你想作多件事情,能夠本身寫一個shell腳本,把你要的操做寫入進去,而後在run後面指定這個腳本路徑。

咱們剛剛的docker run -ti ubuntu命令中沒有指定執行程序,Docker默認執行/bin/bash

其餘啓動參數,你們能夠本身在網上查,這裏再也不陳述了。好了咱們回到剛剛docker run -ti ubuntu啓動的容器,能夠看到容器幾乎瞬間就啓動起來了,比虛擬機不知快了多少倍!!

king@king:~$ docker run -ti ubuntu
root@009fe5728aba:/#

容器啓動起來了,接下來就是安裝Java、Hadoop及相關配置了。

Java安裝

依次執行以下命令:

sudo apt-get install software-properties-common python-software-properties
sudo add-apt-repository ppa:webupd8team/java
sodu apt-get update
apt-get install oracle-java7-installer
java -version

注意:

  • 這裏安裝的Java7(JDK1.7),如需其餘版本請自行修改apt-get install oracle-java7-installerapt-get install oracle-java6-installer

  • 默認使用的是Ubuntu的官方源,若是下載比較慢,請自行修改更新源,不知道如何使用命令行修改的,參考這裏

另外,你們能夠將裝好java的鏡像保存爲一個副本,他日能夠在此基礎上構建其餘鏡像。命令以下:

root@122a2cecdd14:~# exit
docker commit -m "java install" 122a2cecdd14 ubuntu:java

上面命令中122a2cecdd14爲當前容器的ID, ubuntu:java是爲新的鏡像指定一個標識,ubuntu倉庫名javaTag

如何獲取容器ID:

  • 有個簡便的辦法找到此ID,就是命令行用戶名@後面的那一串字符。這個方法只在容器啓動時沒有指定hostname時才能用。

  • 使用docker ps列出全部運行的容器,在命令結果中查看

Hadoop安裝

漸漸切入正題了O(∩_∩)O~

使用剛剛已經安裝了Java的容器鏡像啓動:

docker run -ti ubuntu:java

啓動成功了,咱們開始安裝Hadoop。這裏,咱們直接使用wget下載安裝文件。

1.先安裝wget:
sudo apt-get install -y wget
2.下載並解壓安裝文件:
root@8ef06706f88d:cd ~
root@8ef06706f88d:~# mkdir soft
root@8ef06706f88d:~# cd soft/
root@8ef06706f88d:~/soft# mkdir apache
root@8ef06706f88d:~/soft# cd apache/
root@8ef06706f88d:~/soft/apache# mkdir hadoop
root@8ef06706f88d:~/soft/apache# cd hadoop/
root@8ef06706f88d:~/soft/apache/hadoop# wget http://mirrors.sonic.net/apache/hadoop/common/hadoop-2.6.0/hadoop-2.6.0.tar.gz
root@8ef06706f88d:~/soft/apache/hadoop# tar xvzf hadoop-2.6.0.tar.gz

注意:這裏咱們安裝的Hadoop版本是2.6.0,若是須要其餘版本,請在這裏找到連接地址後修改命令便可。

3.配置環境變量

修改~/.bashrc文件。在文件末尾加入下面配置信息:

export JAVA_HOME=/usr/lib/jvm/java-7-oracle
export HADOOP_HOME=/root/soft/apache/hadoop/hadoop-2.6.0
export HADOOP_CONFIG_HOME=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

注意:咱們使用apt-get安裝java,不知道java裝在什麼地方的話可使用下面的命令查看:

root@8ef06706f88d:~# update-alternatives --config java
There is only one alternative in link group java (providing /usr/bin/java): /usr/lib/jvm/java-7-oracle/jre/bin/java
Nothing to configure.
root@8ef06706f88d:~#
4.配置Hadoop

下面,咱們開始修改Hadoop的配置文件。主要配置core-site.xmlhdfs-site.xmlmapred-site.xml這三個文件。

開始配置以前,執行下面命令:

root@8ef06706f88d:~# cd $HADOOP_HOME/
root@8ef06706f88d:~/soft/apache/hadoop/hadoop-2.6.0# mkdir tmp
root@8ef06706f88d:~/soft/apache/hadoop/hadoop-2.6.0# cd tmp/
root@8ef06706f88d:~/soft/apache/hadoop/hadoop-2.6.0/tmp# pwd
/root/soft/apache/hadoop/hadoop-2.6.0/tmp
root@8ef06706f88d:~/soft/apache/hadoop/hadoop-2.6.0/tmp# cd ../
root@8ef06706f88d:~/soft/apache/hadoop/hadoop-2.6.0# mkdir namenode
root@8ef06706f88d:~/soft/apache/hadoop/hadoop-2.6.0# cd namenode/
root@8ef06706f88d:~/soft/apache/hadoop/hadoop-2.6.0/namenode# pwd
/root/soft/apache/hadoop/hadoop-2.6.0/namenode
root@8ef06706f88d:~/soft/apache/hadoop/hadoop-2.6.0/namenode# cd ../
root@8ef06706f88d:~/soft/apache/hadoop/hadoop-2.6.0# mkdir datanode
root@8ef06706f88d:~/soft/apache/hadoop/hadoop-2.6.0# cd datanode/
root@8ef06706f88d:~/soft/apache/hadoop/hadoop-2.6.0/datanode# pwd
/root/soft/apache/hadoop/hadoop-2.6.0/datanode
root@8ef06706f88d:~/soft/apache/hadoop/hadoop-2.6.0/datanode# cd $HADOOP_CONFIG_HOME/
root@8ef06706f88d:~/soft/apache/hadoop/hadoop-2.6.0/etc/hadoop# cp mapred-site.xml.template mapred-site.xml
root@8ef06706f88d:~/soft/apache/hadoop/hadoop-2.6.0/etc/hadoop# nano hdfs-site.xml

這裏建立了三個目錄,後續配置的時候會用到:

  1. tmp:做爲Hadoop的臨時目錄

  2. namenode:做爲NameNode的存放目錄

  3. datanode:做爲DataNode的存放目錄

1).core-site.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
    <property>
            <name>hadoop.tmp.dir</name>
            <value>/root/soft/apache/hadoop/hadoop-2.6.0/tmp</value>
            <description>A base for other temporary directories.</description>
    </property>

    <property>
            <name>fs.default.name</name>
            <value>hdfs://master:9000</value>
            <final>true</final>
            <description>The name of the default file system.  A URI whose
            scheme and authority determine the FileSystem implementation.  The
            uri's scheme determines the config property (fs.SCHEME.impl) naming
            the FileSystem implementation class.  The uri's authority is used to
            determine the host, port, etc. for a filesystem.</description>
    </property>
</configuration>

注意:

  • hadoop.tmp.dir配置項值即爲此前命令中建立的臨時目錄路徑。

  • fs.default.name配置爲hdfs://master:9000,指向的是一個Master節點的主機(後續咱們作集羣配置的時候,天然會配置這個節點,先寫在這裏)

2).hdfs-site.xml配置

使用命令nano hdfs-site.xml編輯hdfs-site.xml文件:

 <?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
        <final>true</final>
        <description>Default block replication.
        The actual number of replications can be specified when the file is created.
        The default is used if replication is not specified in create time.
        </description>
    </property>

    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/root/soft/apache/hadoop/hadoop-2.6.0/namenode</value>
        <final>true</final>
    </property>

    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/root/soft/apache/hadoop/hadoop-2.6.0/datanode</value>
        <final>true</final>
    </property>
</configuration>

注意:

  • 咱們後續搭建集羣環境時,將配置一個Master節點和兩個Slave節點。因此dfs.replication配置爲2。

  • dfs.namenode.name.dirdfs.datanode.data.dir分別配置爲以前建立的NameNode和DataNode的目錄路徑

3).mapred-site.xml配置

Hadoop安裝文件中提供了一個mapred-site.xml.template,因此咱們以前使用了命令cp mapred-site.xml.template mapred-site.xml,建立了一個mapred-site.xml文件。下面使用命令nano mapred-site.xml編輯這個文件:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
    <property>
        <name>mapred.job.tracker</name>
        <value>master:9001</value>
        <description>The host and port that the MapReduce job tracker runs
        at.  If "local", then jobs are run in-process as a single map
        and reduce task.
        </description>
    </property>
</configuration>

這裏只有一個配置項mapred.job.tracker,咱們指向master節點機器。

4)修改JAVA_HOME環境變量

使用命令.nano hadoop-env.sh,修改以下配置:

# The java implementation to use.
export JAVA_HOME=/usr/lib/jvm/java-7-oracle
5.格式化 namenode

這是很重要的一步,執行命令hadoop namenode -format

4.安裝SSH

搭建集羣環境,天然少不了使用SSH。這能夠實現無密碼訪問,訪問集羣機器的時候很方便。

root@8ef06706f88d:~# sudo apt-get install ssh

SSH裝好了之後,因爲咱們是Docker容器中運行,因此SSH服務不會自動啓動。須要咱們在容器啓動之後,手動經過/usr/sbin/sshd 手動打開SSH服務。未免有些麻煩,爲了方便,咱們把這個命令加入到~/.bashrc文件中。經過nano ~/.bashrc編輯.bashrc文件(nano沒有安裝的自行安裝,也可用vi),在文件後追加下面內容:

#autorun
/usr/sbin/sshd
5.生成訪問密鑰
root@8ef06706f88d:/# cd ~/
root@8ef06706f88d:~# ssh-keygen -t rsa -P '' -f ~/.ssh/id_dsa
root@8ef06706f88d:~# cd .ssh
root@8ef06706f88d:~/.ssh# cat id_dsa.pub >> authorized_keys

注意: 這裏,個人思路是直接將密鑰生成後寫入鏡像,省得在買個容器裏面再單獨生成一次,還要相互拷貝公鑰,比較麻煩。固然這只是學習使用,實際操做時,應該不會這麼搞,由於這樣全部容器的密鑰都是同樣的!!

6.保存鏡像副本

這裏咱們將安裝好Hadoop的鏡像保存爲一個副本。

root@8ef06706f88d:~# exit
king@king:~$ docker commit -m "hadoop install" 8ef06706f88d ubuntu:hadoop

Hadoop分佈式集羣搭建

重點來了!

按照 hadoop 集羣的基本要求,其 中一個是 master 結點,主要是用於運行 hadoop 程序中的 namenode、secondorynamenode 和 jobtracker(新版本名字變了) 任務。用外兩個結點均爲 slave 結點,其中一個是用於冗餘目的,若是沒有冗 餘,就不能稱之爲 hadoop 了,因此模擬 hadoop 集羣至少要有 3 個結點。

前面已經將Hadoop的鏡像構建好了,下面就是使用這個鏡像搭建Master節點和Slave節點了:

節點 hostname ip 用途 Docker啓動腳本
Master master 10.0.0.5

namenode

secondaryNamenode

jobTracker

docker run -ti -h master ubuntu:hadoop
Slave slave1 10.0.0.6

datanode

taskTracker

docker run -ti -h slave1 ubuntu:hadoop
Slave slave2 10.0.0.7

datanode

taskTracker

docker run -ti -h slave2 ubuntu:hadoop

啓動Docker容器

回顧一下,Docker啓動容器使用的是run命令:

docker run -ti ubuntu:hadoop

這裏有幾個問題:

  1. Docker容器中的ip地址是啓動以後自動分配的,且不能手動更改

  2. hostname、hosts配置在容器內修改了,只能在本次容器生命週期內有效。若是容器退出了,從新啓動,這兩個配置將被還原。且這兩個配置沒法經過commit命令寫入鏡像

咱們搭建集羣環境的時候,須要指定節點的hostname,以及配置hosts。hostname可使用Docker run命令的h參數直接指定。但hosts解析有點麻煩,雖然可使用run--link參數配置hosts解析信息,但咱們搭建集羣時要求兩臺機器互相可以ping通,其中一個容器沒有啓動,那麼ip不知道,因此--link參數對於咱們的這個場景不實用。要解決這個問題,大概須要專門搭建一個域名解析服務,即便用--dns參數(參考這裏)。

咱們這裏只爲學習,就不整那麼複雜了,就手動修改hosts吧。只不過每次都得改,我Docker知識淺薄,一時尚未解決這個問題。相信確定有更好的辦法。若是有高人能指定一下,感激涕零!!

啓動master容器
docker run -ti -h master ubuntu:hadoop
啓動slave1容器
docker run -ti -h slave1 ubuntu:hadoop
啓動slave2容器
docker run -ti -h slave2 ubuntu:hadoop

配置hosts

  1. 經過ifconfig命令獲取各節點ip。環境不一樣獲取的ip可能不同,例如我本機獲取的ip以下: 

    • master:10.0.0.5

    • slave1:10.0.0.6

    • slave2:10.0.0.7

  2. 使用sudo nano /etc/hosts命令將以下配置寫入各節點的hosts文件,注意修改ip地址:

    10.0.0.5        master
    10.0.0.6        slave1
    10.0.0.7        slave2
配置slaves

下面咱們來配置哪些節點是slave。在較老的Hadoop版本中有一個masters文件和一個slaves文件,但新版本中只有slaves文件了。

在master節點容器中執行以下命令:

root@master:~# cd $HADOOP_CONFIG_HOME/
root@master:~/soft/apache/hadoop/hadoop-2.6.0/etc/hadoop# nano slaves

將以下slave節點的hostname信息寫入該文件:

slave1
slave2

啓動Hadoop

在master節點上執行start-all.sh命令,啓動Hadoop。

激動人心的一刻……

佛祖保佑,永無bug

若是看到以下信息,則說明啓動成功了:

root@master:~/soft/apache/hadoop/hadoop-2.6.0/etc/hadoop# start-all.sh 
This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
Starting namenodes on [master]
master: starting namenode, logging to /root/soft/apache/hadoop/hadoop-2.6.0/logs/hadoop-root-namenode-master.out
slave1: starting datanode, logging to /root/soft/apache/hadoop/hadoop-2.6.0/logs/hadoop-root-datanode-slave1.out
slave2: starting datanode, logging to /root/soft/apache/hadoop/hadoop-2.6.0/logs/hadoop-root-datanode-slave2.out
Starting secondary namenodes [0.0.0.0]
0.0.0.0: starting secondarynamenode, logging to /root/soft/apache/hadoop/hadoop-2.6.0/logs/hadoop-root-secondarynamenode-master.out
starting yarn daemons
starting resourcemanager, logging to /root/soft/apache/hadoop/hadoop-2.6.0/logs/yarn--resourcemanager-master.out
slave1: starting nodemanager, logging to /root/soft/apache/hadoop/hadoop-2.6.0/logs/yarn-root-nodemanager-slave1.out
slave2: starting nodemanager, logging to /root/soft/apache/hadoop/hadoop-2.6.0/logs/yarn-root-nodemanager-slave2.out

在個節點上執行jps命令,結果以下:

master節點
root@master:~/soft/apache/hadoop/hadoop-2.6.0/etc/hadoop# jps
1223 Jps
992 SecondaryNameNode
813 NameNode
1140 ResourceManager
slave1節點
root@slave1:~/soft/apache/hadoop/hadoop-2.6.0/etc/hadoop# jps
258 NodeManager
352 Jps
159 DataNode
slave2節點
root@slave2:~/soft/apache/hadoop/hadoop-2.6.0/etc/hadoop# jps
371 Jps
277 NodeManager
178 DataNode

下面,咱們在master節點上經過命令hdfs dfsadmin -report查看DataNode是否正常啓動:

root@master:~/soft/apache/hadoop/hadoop-2.6.0/etc/hadoop# hdfs dfsadmin -report
Configured Capacity: 167782006784 (156.26 GB)
Present Capacity: 58979344384 (54.93 GB)
DFS Remaining: 58979295232 (54.93 GB)
DFS Used: 49152 (48 KB)
DFS Used%: 0.00%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0

-------------------------------------------------
Live datanodes (2):

Name: 10.0.0.7:50010 (slave2)
Hostname: slave2
Decommission Status : Normal
Configured Capacity: 83891003392 (78.13 GB)
DFS Used: 24576 (24 KB)
Non DFS Used: 54401331200 (50.67 GB)
DFS Remaining: 29489647616 (27.46 GB)
DFS Used%: 0.00%
DFS Remaining%: 35.15%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Sat Feb 28 07:27:05 UTC 2015


Name: 10.0.0.6:50010 (slave1)
Hostname: slave1
Decommission Status : Normal
Configured Capacity: 83891003392 (78.13 GB)
DFS Used: 24576 (24 KB)
Non DFS Used: 54401331200 (50.67 GB)
DFS Remaining: 29489647616 (27.46 GB)
DFS Used%: 0.00%
DFS Remaining%: 35.15%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Sat Feb 28 07:27:05 UTC 2015

還能夠經過Web頁面看到查看DataNode和NameNode的狀態:http://10.0.0.5:50070/ (因爲我宿主機器上沒有配置master的hosts解析,因此只能用ip地址訪問,你們將ip改成各自的master節點容器的ip便可):

Hadoop Web管理截面

執行WordCount實例

相關文章
相關標籤/搜索