2010年1月4日 星期一

[Linux] 安裝 Hadoop 0.20.1 Multi-Node Cluster @ Ubuntu 9.10


圖片來源:http://hadoop.apache.org/


今天共用了三台機器,終於真正架了一個 Hadoop Cluster ,在這之前都只是安裝在一台機器上:[Linux] 安裝單機版 Hadoop 0.20.1 Single-Node Cluster (Pseudo-Distributed) @ Ubuntu 9.04。由於想嘗試 HadoopDB
,因此在工作場所裡透過 VMWare Workstation 安裝 Hadoop 0.19.2 版,並且碰到一堆有的沒有的問題,連
Hadoop 的 wordcount 範例都跑不起來!盡管最後有設定成功,但太不熟了,回寢室後再試一次,順便替自己架設個人把玩的開發環境啦!


環境:Windows 7 x64 + VirtualBox
3.12 r56127 ,預計安裝 3 台機器的 Cluster 囉。原本打算使用 ubuntu-9.10-server-amd64.iso
,但 VirtualBox 啟動有些問題,因此改成 ubuntu-9.10-server-i386.iso ,並且在安裝過程中,給予 20
GB 硬碟空間,以及最後建立 hadoop 使用者,接下來的架設方式是設定好一台虛擬機器後,透過複製虛擬機器的方式來新增機器。


安裝好一台虛擬機器後,緊接著進行更新與軟體的安裝



  • VirtualBox 環境設定

    • 新增網卡

      • 預設只有一張網卡,代號應該是 eth0 ,通常會用它來連外,常用的設置是 NAT 方式

      • 建議再加一張網卡,用來讓自己的電腦(Host OS)能連進虛擬機器(Guest OS),詳情可參考這篇 讓本機可連虛擬機器,虛擬機器可連外 - VirtualBox 網路設定,雖然這並非需要,但有這個就可以透過 ssh client (Putty)連進去,而不需要透過 VirualBox 的介面。

      • 接下來還需要建立一個固定的 IP ,而第二張 eth1 網卡採用 VirtualBox 之 「僅限主機」介面卡 (Host-Only)
        即可,它提供 DHCP 服務,而 eth1 除了可以用來與自己的電腦溝通,還可以另外再對 eth1 多設定一個 Static IP 供
        Cluster 內部溝通



    • 在 Linux or Ubuntu 的機器上,若設定完網卡後,或是使用複製的虛擬機器時,透過 $ ifconfig 卻看不到網路卡,可以使用以下方式試試

      • $ sudo rm /etc/udev/rules.d/70-persistent-net.rules
        $ sudo reboot



    • 透過 $ ifconfig 可以看到 eth1 網卡後,接著使用 $ sudo dhclient eth1 更新來獲得一組 IP ,而 Host-Only 本來就有提供 DHCP 服務,此時主要用來測試網路的設定是否正常

    • 如果都沒問題,那就可以設定讓它開機就自動弄好,並且將 eth1:0 設定成 Static IP

      • $ sudo vim /etc/network/interfaces
        # The loopback network interface
        auto lo
        iface lo inet loopback

        # The primary network interface
        auto eth0
        iface eth0 inet dhcp

        # Host-Only
        auto eth1
        iface eth1 inet dhcp

        auto eth1:0
                iface eth1:0 inet static
                address 192.168.56.168
                netmask 255.255.0.0

        • 之所以設定成 192.168.56.168 是因為預設的 Host-Only 是 192.168.56.x 網域的,用同網域的另一個好處是自己的電腦 (Host OS)可以用這個固定 IP 來連線,不需每次要用就得查詢一次,但實際使用上此 DHCP 都分配 192.168.56.101 之後的 IP ,因此也需要小心設定,以免衝 IP 囉。





    • 設定完後,除了可以透過 $ sudo reboot 啟用 IP ,也可以透過指令更新 $ sudo /etc/init.d/network restart



  • 更新系統

    • $ sudo apt-get update
      $ sudo apt-get dist-upgrade
      $ sudo apt-get upgrade

    • 另外還有個東西叫做 aptitude 對我而言也挺新鮮的,詳情請逛逛 Aptitude - Ubuntu 正體中文 Wiki


      • $ sudo aptitude safe-upgrade
        $ sudo aptitude full-upgrade
        $ sudo aptitude dist-upgrade





  • 安裝軟體或相關準備

    • 建立暫放軟體的地方 /home/tmp

      • $ sudo mkdir /home/tmp ; sudo chown -R hadoop:hadoop /home/tmp ;



    • $ sudo apt-get install ssh rsync 

      • 有些東西已有安裝,執行上道指令只試再次確認囉,像是 openssh-server 等。安裝完 openssh-server 後,建議可以透過 Putty 登入,接下來的操作會比較方便。



    • 安裝 Java 環境

      • 第一種方式:$ sudo apt-get install sun-java6-sdk

      • 第二種方式:為了方便製作成 Portable 環境,採用類似 Tarball 的安裝方式,請至 Java SE Downloads - Sun Developer Network (SDN) 下載 Linux 的 SDK6 (Ex: jdk-6u17-linux-i586.bin),目前打算用 Java 1.6 的開發環境。如果使用 64-Bit 環境,下載時可以選擇 Linux x64 。

        • 將下載得來的 jdk-6u17-linux-i586.bin 擺在 /home/tmp (可以用sftp傳進去)。





    • 下載 Hadoop

      • $ cd /home/tmp ;
        $ wget http://ftp.mirror.tw/pub/apache/hadoop/core/hadoop-0.20.1/hadoop-0.20.1.tar.gz

      • 以下是我自己額外的使用

        • $ wget http://ftp.mirror.tw/pub/apache/hadoop/core/hadoop-0.19.2/hadoop-0.19.2.tar.gz

        • $ wget 'http://downloads.sourceforge.net/project/hadoopdb/hadoopdb/0.1.1/hadoopdb-all-0.1.1.0.tar.gz?use_mirror=nchc'

        • $ wget http://jdbc.postgresql.org/download/postgresql-8.4-701.jdbc4.jar

        • 好用的 screen

          • $ vim ~/.screenrc

            • caption always "%{bw}%M/%d %c %{wb} %-w%{c}%n %t%{w}%+w%{k} %=%{G}[%H] %l%"











  • 經過上述的軟體設定後,再接著做事之前,可以考慮先備份一下目前的虛擬環境,以方便往後取出備份

    • "c:\Program Files\Sun\VirtualBox\VBoxManage.exe" clonevdi Cluster01.vdi Cluster_backup.vdi

    • 由於 VirtualBox 的 *.vdi 有一些硬體資訊載裡頭(EX:UUID),所以無法像 VMWare 那樣可以選 I copy it 的選項來自動幫你處理,因此就需要透過上述的指令來複製虛擬機器。



  • 設置統一的 Hadoop 環境

    • 選擇你想要安裝的版本進行設定,此例以 hadoop 0.20.1

    • $ cd /home/tmp ;
      $ tar -xvf hadoop-0.20.1.tar.gz;
      $ sh jdk-6u17-linux-i586.bin ;

    • 接著把 hadoop-0.20.1 和 jdk1.6.0_17 搬到家目錄吧!

      • $ cp -r hadoop-0.20.1/* ~/
        $ mv jdk1.6.0_17 ~/



    • 設定 Java 環境

      • $ vim conf/hadoop-env.sh

        • export JAVA_HOME=/home/hadoop/jdk1.6.0_17





    • 設定停用 IPv6

      • $ vim conf/hadoop-env.sh



        • HADOOP_OPTS=-Djava.net.preferIPv4Stack=true



      • 可能是因為 Hadoop 對 IPv6 網路支援不穩,常常會莫名連不到其他機器,設定這個至少在此刻還滿重要的!



    • 設定 /etc/hosts 與 /etc/hostname ,以三台電腦為例,目前這台當作 Cluster01 ,假設之後還會有 Cluster02 和 Cluster03 ( elalic 網友提醒!請勿使用底線"_"來描述電腦,有連不到機器的現象發生)


      • $ sudo vim /etc/hostname
        Cluster01

      • $ sudo vim /etc/hosts
        #127.0.1.1      Cluster01   (此行代表註解)
        192.168.56.168  Cluster01
        192.168.56.169  Cluster02
        192.168.56.170  Cluster03



    • 設定 conf/core-site.xml 、 conf/mapred-site.xml


      • $ vim ~/conf/core-site.xml

        •         <property>
                          <name>fs.default.name</name>
                          <value>hdfs://Cluster01:9000</value>
                          <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>



      • $ vim ~/conf/mapred-site.xml

        •         <property>
                          <name>mapred.job.tracker</name>
                          <value>Cluster01: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>





    • 再啟動 Hadoop 前,將另外兩台電腦備妥,使用複製虛擬機器的方式新增,並且使用 VirtualBox 開啟它們,使得同一時間有三台虛擬機器


      • "c:\Program Files\Sun\VirtualBox\VBoxManage.exe" clonevdi Cluster01.vdi Cluster02.vdi
        "c:\Program Files\Sun\VirtualBox\VBoxManage.exe" clonevdi Cluster01.vdi Cluster03.vdi

      • 接著在 VirutalBox [檔案]->[虛擬媒體管理員]->[硬碟]->[加入] ,將上述
        Cluster02.vdi 和 Cluster03.vdi 加入,接著回到 VirtualBox
        主畫面點選[新增]機器,設定好你要的名稱(Ex: Cluster02 和 Cluster03)以及 Linux/Ubuntu
        後,有個地方是要新增"虛擬硬碟",請選用"使用現有硬碟",依序分別挑選 Cluster02.vdi 和 Cluster03.vdi
        以開啟兩台虛擬機器。

      • 請幫它們加上二張網路卡 - 選擇 「僅限主機」介面卡 (VirtualBox Host-Only)

      • 開機後請先更新 /etc/hostname 及 /etc/network/interfaces

        • $ sudo vim /etc/hostname

          • 修改成 Cluster02 或 Cluster03



        • $ sudo vim /etc/network/interfaces

          • auto eth1:0
                    iface eth1:0 inet static
                    address 192.168.56.169 # or address 192.168.56.170
                    netmask 255.255.0.0





      • 機器啟動後,會發現無法連線以及看不到網路卡 ( $ ifconfig ) ,請執行以下動作即可解決

        • $ sudo rm /etc/udev/rules.d/70-persistent-net.rules
          $ sudo reboot





    • 以下在 Cluster01 操作


      • 設定 SSH 登入免密碼

        • $ ssh-keygen -t rsa -P ''
          $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys


          • 可以用 ssh localhost 測試是否成功,若能不輸入密碼登入則代表成功



        • 將 Cluster 01 上的 authorized_keys 複製給 Cluster02 和 Cluster03

          • $ scp ~/.ssh/authorized_keys hadoop@Cluster02:~/.ssh/authorized_keys
            $ scp ~/.ssh/authorized_keys hadoop@Cluster03:~/.ssh/

            • 若出現 scp: /home/hadoop/.ssh/: Is a directory 這類訊息,則先去該台機器使用 ssh 囉,例如連去其他台機器等



          • 分別執行 $ ssh Cluster01 、 $ ssh Cluster02 和 $ssh Cluster03 試試,若可以免密碼登入即沒問題







      • 設定 conf/masters 和 conf/slaves

        • $ vim conf/masters

          • Cluster01



        • $ vim conf/slaves

          • Cluster02

            Cluster03





      • 初始化 NameNode

        • $ ~/bin/hadoop namenode -format





      • 啟動 Hadoop

        • $ ~/bin/start-all.sh


          • 應該會看到類似的訊息:
            hadoop@Cluster01:~$ ~/bin/start-all.sh
            starting namenode, logging to /home/hadoop/bin/../logs/hadoop-hadoop-namenode-Cluster01.out
            Cluster02: starting datanode, logging to /home/hadoop/bin/../logs/hadoop-hadoop-datanode-Cluster02.out
            Cluster03: starting datanode, logging to /home/hadoop/bin/../logs/hadoop-hadoop-datanode-Cluster03.out
            Cluster01: starting secondarynamenode, logging to /home/hadoop/bin/../logs/hadoop-hadoop-secondarynamenode-Cluster01.out
            starting jobtracker, logging to /home/hadoop/bin/../logs/hadoop-hadoop-jobtracker-Cluster01.out
            Cluster02: starting tasktracker, logging to /home/hadoop/bin/../logs/hadoop-hadoop-tasktracker-Cluster02.out
            Cluster03: starting tasktracker, logging to /home/hadoop/bin/../logs/hadoop-hadoop-tasktracker-Cluster03.out



        • $ ~/jdk1.6.0_17/bin/jps

          • 應該會看到類似的訊息:
            hadoop@Cluster01:~$ jdk1.6.0_17/bin/jps
            1783 Jps
            1631 SecondaryNameNode
            1693 JobTracker
            1470 NameNode



        • $ ~/bin/hadoop dfsadmin -report

          • 應該會看到類似的訊息:
            hadoop@Cluster01:~$ ~/bin/hadoop dfsadmin -report
            Configured Capacity: 39905583104 (37.16 GB)
            Present Capacity: 34398027776 (32.04 GB)
            DFS Remaining: 34397978624 (32.04 GB)
            DFS Used: 49152 (48 KB)
            DFS Used%: 0%
            Under replicated blocks: 0
            Blocks with corrupt replicas: 0
            Missing blocks: 0

            -------------------------------------------------
            Datanodes available: 2 (2 total, 0 dead)

            Name: 192.168.56.103:50010
            Decommission Status : Normal
            Configured Capacity: 19952791552 (18.58 GB)
            DFS Used: 24576 (24 KB)
            Non DFS Used: 2753777664 (2.56 GB)
            DFS Remaining: 17198989312(16.02 GB)
            DFS Used%: 0%
            DFS Remaining%: 86.2%
            Last contact: Mon Jan 04 22:59:29 CST 2010


            Name: 192.168.56.102:50010
            Decommission Status : Normal
            Configured Capacity: 19952791552 (18.58 GB)
            DFS Used: 24576 (24 KB)
            Non DFS Used: 2753777664 (2.56 GB)
            DFS Remaining: 17198989312(16.02 GB)
            DFS Used%: 0%
            DFS Remaining%: 86.2%
            Last contact: Mon Jan 04 22:59:28 CST 2010





        • 以 WordCount 測試 Hadoop 看看

          • $ ~/bin/hadoop fs -mkdir input

          • $ ~/bin/hadoop fs -put README.txt input/

          • $ ~/bin/hadoop jar hadoop-0.20.1-examples.jar wordcount input output
            10/01/04 23:01:44 INFO input.FileInputFormat: Total input paths to process : 1
            10/01/04 23:01:44 INFO mapred.JobClient: Running job: job_201001042257_0001
            10/01/04 23:01:45 INFO mapred.JobClient:  map 0% reduce 0%
            10/01/04 23:01:54 INFO mapred.JobClient:  map 100% reduce 0%
            10/01/04 23:02:06 INFO mapred.JobClient:  map 100% reduce 100%
            10/01/04 23:02:08 INFO mapred.JobClient: Job complete: job_201001042257_0001
            10/01/04 23:02:08 INFO mapred.JobClient: Counters: 17
            10/01/04 23:02:08 INFO mapred.JobClient:   Job Counters
            10/01/04 23:02:08 INFO mapred.JobClient:     Launched reduce tasks=1
            10/01/04 23:02:08 INFO mapred.JobClient:     Launched map tasks=1
            10/01/04 23:02:08 INFO mapred.JobClient:     Data-local map tasks=1
            10/01/04 23:02:08 INFO mapred.JobClient:   FileSystemCounters
            10/01/04 23:02:08 INFO mapred.JobClient:     FILE_BYTES_READ=1836
            10/01/04 23:02:08 INFO mapred.JobClient:     HDFS_BYTES_READ=1366
            10/01/04 23:02:08 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=3704
            10/01/04 23:02:08 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=1306
            10/01/04 23:02:08 INFO mapred.JobClient:   Map-Reduce Framework
            10/01/04 23:02:08 INFO mapred.JobClient:     Reduce input groups=0
            10/01/04 23:02:08 INFO mapred.JobClient:     Combine output records=131
            10/01/04 23:02:08 INFO mapred.JobClient:     Map input records=31
            10/01/04 23:02:08 INFO mapred.JobClient:     Reduce shuffle bytes=1836
            10/01/04 23:02:08 INFO mapred.JobClient:     Reduce output records=0
            10/01/04 23:02:08 INFO mapred.JobClient:     Spilled Records=262
            10/01/04 23:02:08 INFO mapred.JobClient:     Map output bytes=2055
            10/01/04 23:02:08 INFO mapred.JobClient:     Combine input records=179
            10/01/04 23:02:08 INFO mapred.JobClient:     Map output records=179
            10/01/04 23:02:08 INFO mapred.JobClient:     Reduce input records=131

          • $ ~/bin/hadoop dfs -cat output/p*



        • 關掉 hadoop


          • $ ./bin/stop-all.sh
            stopping jobtracker
            Cluster02: stopping tasktracker
            Cluster03: stopping tasktracker
            stopping namenode
            Cluster02: stopping datanode
            Cluster03: stopping datanode
            Cluster01: stopping secondarynamenode







    • 整體上就這樣,果然回家做一次就非常順,一次就成功啊!收工!




以下是一些參考資料



除此之外,在公司安裝 Hadoop 0.19.2 時,碰到了以下問題



但真正發現,出問題的是因為 datanode 有一台的 /etc/hosts 設定有問題,修正後就沒問題啦。


其他在 hadoop 0.20.1 碰到的問題



  • hdfs.DFSClient: DataStreamer Exception:
    org.apache.hadoop.ipc.RemoteException: java.io.IOException: File
    /path/file could only be replicated to 0 nodes, instead of 1

    • $ hadoop fs -mkdir in

      $ hadoop fs -put README.txt in

      10/01/19 08:35:13 WARN hdfs.DFSClient: DataStreamer Exception:
      org.apache.hadoop.ipc.RemoteException: java.io.IOException: File
      /user/hadoop/in/README.txt co

      uld only be replicated to 0 nodes, instead of 1

              at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1267)

              at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:422)

              at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

              at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

              at java.lang.reflect.Method.invoke(Method.java:597)

              at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:508)

              at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:959)

              at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:955)

              at java.security.AccessController.doPrivileged(Native Method)

              at javax.security.auth.Subject.doAs(Subject.java:396)

              at org.apache.hadoop.ipc.Server$Handler.run(Server.java:953)



              at org.apache.hadoop.ipc.Client.call(Client.java:739)

              at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:220)

              at $Proxy0.addBlock(Unknown Source)

              at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

              at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

              at java.lang.reflect.Method.invoke(Method.java:597)

              at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:82)

              at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:59)

              at $Proxy0.addBlock(Unknown Source)

              at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.locateFollowingBlock(DFSClient.java:2904)

              at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.nextBlockOutputStream(DFSClient.java:2786)

              at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.access$2000(DFSClient.java:2076)

              at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$DataStreamer.run(DFSClient.java:2262)



      10/01/19 08:35:13 WARN hdfs.DFSClient: Error Recovery for block null bad datanode[0] nodes == null

      10/01/19 08:35:13 WARN hdfs.DFSClient: Could not get block locations. Source file "/user/hadoop/in/README.txt" - Aborting...

      put: java.io.IOException: File /user/hadoop/in/README.txt could only be replicated to 0 nodes, instead of 1

    • 解法:請再三確認各台機器的 /etc/hosts 與 IP 狀況(ifconfig),如果都沒有問題,那等一陣子才試試,有時候環境剛初始化完會有這個現象,過一陣子之後就好了,另外可用 hadoop dfsadmin -report 來確認 datanode 是否正常跑起來,以及到各台機器用 jdk1.6.0_17/bin/jps 來查看 slaves ,正常要會有 TaskTracker 和 DataNode 。




17 則留言:

  1. 你好. 我最近也再架設hadoop cluster
    我在namenode 裡的 core-site.xml dfs.default.name 裏面, 只要打的是dns 別的datanode就會連不到(etc/hosts設定是ok的,ping 該dns 也完全沒問題)
    打ip datanode就連的到 (dfsnodelist.jsp裡看的到datanode) 但只要跑job(word count 或 sort) 就會出現 IllegalArgumentException: Wrong FS
    的錯誤 ,不知道您有沒有遇到這樣的問題呢 感謝

    版主回覆:(02/27/2010 01:43:50 PM)


    我使用上的確碰過很多奇怪的問題 XDD 但沒有碰過你說的問題, 關於你的部分, 我不確定真正的解法, 若只是網路連線部分, 建議試試停用 IPv6 的部分吧!因為我的網路連線有時也會怪怪的, 直到停用 IPv6 才穩定下來

    在 conf/hadoop-env.sh 增加 HADOOP_OPTS=-Djava.net.preferIPv4Stack=true

    除此之外, 我暫時想不到其他解法, 有一陣子沒用 Hadoop 了 orz

    回覆刪除
  2. 你好
    關於大大在設定ssh登入免密碼那部份,鍵入 ssh 127.0.0.1後,出現以下訊息:
    The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.

    請問是哪一步沒做到嗎?
    以下是執行過程
    user@Cluster01:~$ ssh-keygen -t rsa -P ''
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/user/.ssh/id_rsa): /home/user/.ssh/id_rsa
    Your identification has been saved in /home/user/.ssh/id_rsa.
    Your public key has been saved in /home/user/.ssh/id_rsa.pub.
    The key fingerprint is:
    1f:bc:88:f8:ff:e8:1d:38:cd:52:d9:8d:2e:28:fb:83 user@Cluster01
    csce511@Cluster01:~$ ssh 127.0.0.1
    The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
    RSA key fingerprint is a2:ae:cb:f7:13:38:8e:07:b0:13:b5:ae:6f:95:02:ff.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '127.0.0.1' (RSA) to the list of known hosts.
    Linux Cluster01 2.6.31-20-generic-pae #57-Ubuntu SMP Mon Feb 8 10:23:59 UTC 2010 i686

    To access official Ubuntu documentation, please visit:
    http://help.ubuntu.com/

    0 packages can be updated.
    0 updates are security updates.


    The programs included with the Ubuntu system are free software;
    the exact distribution terms for each program are described in the
    individual files in /usr/share/doc/*/copyright.

    Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
    applicable law.


    版主回覆:(03/02/2010 04:30:25 PM)


    那句話只是第一次對某台機器建立 SSH 連線時, 才會蹦出來的訊息而已啦, 看訊息已經正常可以使用, 你可以再嘗試 $ ssh 127.0.0.1 , 之後應該就只會詢問 Password 而已 :>

    回覆刪除
  3. 上一個問題已經解決了,感謝大大!
    那接下來複製authorized_keys的問題,我使用大大所教的那行指令
    $ scp ~/.ssh/authorized_keys hadoop@Cluster02:~/.ssh/authorized_keys
    複製於其他機器,但出現要我輸入密碼
    但輸入該機器密碼都 failed, 那我可以直接在該機器上設定無SSH 密碼而不使用負制的方式登入嗎?

    以下為執行過程
    user@Cluster01:~$ scp ~/.ssh/authorized_keys Cluster02:~/.ssh/authorized_keys

    user2@Cluster02's password:
    Permission denied, please try again.
    user2@Cluster02's password:
    Permission denied, please try again.
    user2@Cluster02's password:
    Permission denied, please try again.
    lost connection

    再次麻煩大大了..感恩

    版主回覆:(03/05/2010 03:37:50 PM)


    看起來有點怪, 為什麼登入 Cluster02 時是用 user2 的帳號?! (user2@Cluster02's password:...)
    另外可以改用附上完整的帳號方式

    user@Cluster01:~$ scp ~/.ssh/authorized_keys user@Cluster02:~/.ssh/authorized_keys
    其中問你的就是 user@Cluster02 這台機器上的密碼

    這樣的架構是 Cluster01 跟 Cluster02 都有一個相同的帳號可以登入, 以我的例子是用 hadoop 這個帳號, 感覺你的例子是要用 "user" 這個帳號名稱嗎? 這樣是 Cluster02 上也有一個 user (名稱)帳號時, 透過上述指令設定後, 從 user@Cluster02 連去 user@Cluster01 時可以不用輸入密碼

    最後, 補充一下, 我用的例子是 hadoop 帳號名稱, 並且在各台機器上 (Cluster01~03) 密碼都是一樣的, 做 scp 詢問密碼時, 若你機器上的密碼不一樣, 你需要留意一下囉, scp 只是用來做檔案複製, 把某個一台機器的檔案複製到另一台機器上

    回覆刪除
  4. 感謝版大! 因我機器不同,帳號密碼也都不同,因此而弄錯!

    現在測試ok囉~ 非常謝謝大大精闢的教學及講解 :)

    版主回覆:(03/06/2010 07:03:58 AM)


    祝你一切順利啦 :D

    回覆刪除
  5. 板大不好意思我又來叨擾了~
    我在裝好之後有個疑問~
    看官方文件說是有誇平台的功能啦
    若我一台機器為 windows 環境、 一台為Linux環境 那在連接上會有問題嗎?

    版主回覆:(03/07/2010 03:53:57 AM)


    我也沒試過啊, 大部分都嘛用 Linux 的環境 :D

    回覆刪除
  6. 板大您好
    感謝上次的回應
    我已經找到問題點
    順便回再這裡 給大家參考XD
    其實我的問題很單純 也很詭異
    那就是 node的名字有底線!!!(ex: 我的master叫作:x_hdp_master)
    就是那個底線.....改成dash之後(x-hdp-master) 就完全沒問題了~
    大家也要注意喔 謝謝收看

    版主回覆:(03/11/2010 11:10:58 AM)


    關於你說的,也讓我突然想起來,我有同學也碰到耶!只是不是自己碰到的,印象就會很淺!我那同學也花了十多小時在這上面 orz 下次若有人還有一樣的問題,我會記住這個來提供對方資訊的!感謝你的分享 :D

    回覆刪除
  7. 大大你好
    我是剛接觸的新手
    我按照這邊文章作設定後來下jps都只有出現xxxxjps沒有出現其他的訊息
    且下bin/hadoop dfsadmin -report
    都會出現連接 127.0.0.1的訊息,連十次後就會自己abort
    想請問是哪裡有問題,java環境要怎樣設定我適用jdk1.6.0_20

    版主回覆:(03/15/2010 08:50:40 AM)


    設定 Java 環境
    * $ vim conf/hadoop-env.sh
    o export JAVA_HOME=/home/hadoop/jdk1.6.0_17

    至於沒有出現其他訊息, 這個沒環境很難 debug, 你得自行去找找資料囉 :>

    回覆刪除
  8. 你好 我在初始化namenode時 出現錯誤
    /home/yabeorz/bin/hadoop: line 258: /home/hadoop/jdk1.6.0_21/bin/java: 沒有此一檔案或目錄
    /home/yabeorz/bin/hadoop: line 289: /home/hadoop/jdk1.6.0_21/bin/java: 沒有此一檔案或目錄
    /home/yabeorz/bin/hadoop: line 289: exec: /home/hadoop/jdk1.6.0_21/bin/java: cannot execute: 沒有此一檔案或目錄
    請問是我沒設定到甚摩嗎?
    謝謝

    版主回覆:(04/18/2010 11:26:32 PM)


    請確認你的系統有沒安裝 Java, 或是更新 conf/hadoop-env.sh 裡 JAVA_HOME 的位置

    回覆刪除
  9. 謝謝
    已經可以完整跑完
    請問可以再Cluster2 3上看到執行的樣子嗎?
    謝謝

    版主回覆:(08/05/2010 09:32:07 AM)


    我看不太懂你的意思, 你可以在 Cluster2 或 Cluster3 去執行看看

    回覆刪除
  10. 謝謝分享 !
    我沒有 3 台 PC , 所以在 一台 PC 上 用 VirtualBox 模擬 , 也 OK 了.

    回覆刪除
  11. 你好
    我是用一台PC(WIN7)+virtualbox模擬3台PC是OK的

    那現在我用實體電腦PA模擬一台虛擬機器VA
    實體電腦PB模擬一台虛擬機器VB
    那VA和VA要怎麼把它設成同個CLUSTER

    回覆刪除
  12. 抱歉 不是同個CLUSTER
    是讓VA和VB能夠分別為cluster01和cluster02
    謝謝

    版主回覆:(08/10/2010 10:56:46 AM)


    你的意思是說, 現在有兩台機器(PA和PB), 要如何連到對方嗎?

    那你只要看他們各拿到哪個IP, 之後在設定一下 /etc/hosts 就行了, 但別忘了要確定 PA 跟 PB 能夠互連到

    回覆刪除
  13. 不是PA和PB互連

    是VA和VB互連

    要VA和VB變成cluster01和cluster02

    謝謝

    版主回覆:(09/01/2010 08:16:20 AM)


    一樣的道理, 讓 VA 可以連線到 VB 囉(例如在 VA 用 ssh VB_IP 可以連進去 VB), 搞定這個在將 VA 和 VB 兩台機器的 /etc/hosts 更新好 IP 應該就行了

    至於 VA 要怎樣連到 VB, 這部份你要自己去設定囉, 已不是架設 hadoop 的問題, 而是虛擬機器使用上的問題

    回覆刪除
  14. 謝謝你
    再請問你一下
    底層OS可以直接利用XenServer取代掉WIN7+VirtualBox嗎?
    謝謝



    版主回覆:(09/01/2010 08:23:02 AM)


    我對 XenServer 不熟, 還沒使用過囉

    印象中 Xen 也是用來管理虛擬機器用的, 但我不太記得 Xen 是一套底層的 OS ?! 印象中是建立在 Linux 作業系統上, 與 kernel 綁得更緊密的一套虛擬機器的管理系統(或許這樣也叫做OS吧XD)

    以上印象可能有誤, 你在自己找點資料

    回覆刪除
  15. 請問啟動後,我用jps查,沒有看到datanode
    這是正常的嗎?



    版主回覆:(09/01/2010 08:45:07 AM)


    你要查看執行 jps 的機器是不是做 datanode,若是的話才會顯示 datanode 囉,例如有的機器只做 namenode ,所以看不到 datanode,但也有人設定都有做namenode跟datanode囉,請自行留意。

    回覆刪除
  16. 找到問題了
    不隻道為什麼重開VM conf/masters conf/slaves的設定跑掉

    重作後,正常

    之後,要測試
    bin/hadoop dfs –mkdir input
    bin/hadoop dfs –ls
    bin/hadoop dfs –put /usr/local/hadoop/conf/core-site.xml input/

    作到這裡,也是出現跟你一樣的IOException

    等一下在下指令也是一樣
    需要關機嗎?

    版主回覆:(02/15/2011 02:20:42 PM)


    ㄟ,很難看這樣就知道該怎樣解 XD 我有一陣子沒用了
    你可能要確認 dfs 裡頭 input 目錄是否已存在,存在要記得先刪啊 bin/hadoop dfs -rmr input 等
    不然還要確認 datanode 有沒有跑起來等等
    要細細品味 XD

    祝你好運

    回覆刪除
  17. Hi Sir,
    If I built a cluster by Hadoop,
    can i run every application on it as a normal desktop machine?

    版主回覆:(02/15/2011 02:36:02 PM)


    Hi,
    I think Hadoop is not designed for desktop usage.
    The application should be re-designed in map-reduce structure.

    回覆刪除