跳到主要內容

在Oracle Enterprise Linux 6.2上安裝Hadoop 1.0.3(Multi-Node Cluster)


Hadoop有下列不同的服務:NameNode、JobTracker、DataNode、TaskTracker、SecondaryNameNode
其中NameNode、JobTracker只能有一台主要的機器來負責


一、測試環境
  1、作業系統:Oracle Linux 6.2 x64
  2、Virual Machine A:192.168.56.201(oel62n1)  --> Master Host
  3、Virual Machine B:192.168.56.202(oel62n2)  --> Slave Host
  4、作業系統只安裝文字介面

二、安裝Hadoop套件(兩台都安裝)
  我是下載rpm:hadoop-1.0.3-1.x86_64.rpm
  也可以下載tar檔,直接解壓就可以了

  [root@oel62n1]# rpm -ivh hadoop-1.0.3-1.x86_64.rpm
  [root@oel62n2]# rpm -ivh hadoop-1.0.3-1.x86_64.rpm

  注意:如果像我前安裝並測試過sigle-node,最好就是把它刪除再重建,
   不然會像我一樣,一直出問題,設定檔怎麼設定都是有錯。
(因為對設定檔還不夠了解啦!)
我刪除的步驟:
        [root@oel62n1]# rpm -e hadoop-1.0.3-1.x86_64.rpm
   [root@oel62n1]# rm -rf /etc/hadoop
[root@oel62n1]# rm -rf /var/log/hadoop

三、設定對應的主機名稱、SSH直接登入
  1、編輯兩台的/etc/hosts
    將兩台的hostname、ip各自填入兩台的hosts內,
oel62n1、oel62n2的/etc/hosts內容如下:

127.0.0.1   localhost localhost.localdomain
    192.168.56.201 oel62n1   oel62n1
    192.168.56.202 oel62n2   oel62n2

  2、設定SSH直接登入,此步驟不要省略,以免後面啟動服務時要一直輸入密碼。

    [root@oel62n1]# ssh-keygen -d
    --所有選項都直接按下Enter鍵就好

    [root@oel62n1]# ssh-copy-id -i ~/.ssh/id_dsa.pub root@oel62n2

自己本身也要免密碼登入:
[root@oel62n1]# ssh-copy-id -i ~/.ssh/id_dsa.pub root@oel62n1

    測試看看是否直接進入oel62n2
    [root@oel62n1 .ssh]# ssh oel62n2

測試看看是否直接進入oel62n1
    [root@oel62n1 .ssh]# ssh oel62n1

四、兩台都要安裝JAVA(JDK)

  [root@oel62n1]# rpm -ivh jdk-7u5-linux-x64.rpm
  [root@oel62n2]# rpm -ivh jdk-7u5-linux-x64.rpm

五、設定Hadoop的masters、slaves參數檔(只有當master的host才需要)
  我是以oel62n1為master:
 
  [root@oel62n1]# vi /etc/hadoop/hadoop-env.sh

  修改JAVA_HOME的位置如下:
  export JAVA_HOME=/usr/java/jdk1.7.0_05

  [root@oel62n1]# vi /etc/hadoop/masters

  此參數檔是指定SecondaryNameNode的host,填入:
  oel62n1

  [root@oel62n1]# vi /etc/hadoop/slaves

  此參數檔是指定其他當為node的host,填入:
  oel62n1
  oel62n2

六、設定Hadoop的參數檔(所有的host都要,內容都是指向master)

  [root@oel62n1]# vi /etc/hadoop/core-site.xml

  增加的內容如下:
 
    fs.default.name
    hdfs://oel62n1:54310
    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.
 


  [root@oel62n1]# vi /etc/hadoop/mapred-site.xml

  增加的內容如下:
 
    mapred.job.tracker
    master:54311
    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.
   
 

  [root@oel62n1]# vi /etc/hadoop/hdfs-site.xml

  增加的內容如下(每一份在HDFS上面的資料會有幾份的複製):
 
    dfs.replication
    2
    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.
   
 

  以上是較簡單、快速的設定,其實hadoop還有許多的設定可以變化,有時間再測試看看。

七、格式化Namecode的HDFS filesystem

  [root@oel62n1]# hadoop namenode -format

八、啟用/關閉Hadoop Cluster
  只要在master host上執行:

  開啟script
  [root@oel62n1]# start-all.sh

  關閉script
  [root@oel62n1]# stop-all.sh

  也可以依daemons開啟
  [root@oel62n1]# start-mapred.sh
  [root@oel62n1]# start-dfs.sh

  也可以依daemons關閉
  [root@oel62n1]# stop-mapred.sh
  [root@oel62n1]# stop-dfs.sh

  可以下jps的指令來觀察各daemons的狀態:

  Master Host:
    [root@oel62n1]# cd $JAVA_HOME/bin
    [root@oel62n1]# ./jps
    20853 DataNode
    20463 NameNode
    21200 Jps
    20966 SecondaryNameNode
    21156 TaskTracker
    21036 JobTracker

  Slave Host:
    [root@oel62n2]# cd $JAVA_HOME/bin
    [root@oel62n2]# ./jps
    4356 TaskTracker
    4431 Jps
    4191 DataNode

  也可以開啟網頁來檢視:
  JobTracker:http://192.168.56.201:50030/
  NameCode:http://192.168.56.201:50070/
  Tasktracker:http://192.168.56.201:50060/

十、錯誤修改

  第一次在開啟start-all.sh時並沒有成功,所以我查了一下log:
  [root@oel62n1]#  cat /var/log/hadoop/root/hadoop-root-datanode-oel62n1.log
  [root@oel62n2]#  cat /var/log/hadoop/root/hadoop-root-datanode-oel62n2.log

  錯誤訊息大致如下,意指我的檔案權限不對:
  2012-08-01 13:20:56,287 WARN org.apache.hadoop.hdfs.server.datanode.DataNode:
  Invalid directory in dfs.data.dir: Incorrect permission for /tmp/hadoop-root/dfs/data,
  expected: rwxr-xr-x, while actual: rwx------

  修改檔案權限,兩台都要:
  [root@oel62n1]#  chmod 755 /tmp/hadoop-root/dfs/data
  [root@oel62n2]#  chmod 755 /tmp/hadoop-root/dfs/data

  重新啟動後,又出現另一個錯誤,大致說我的namenode的id與記錄不符:
  ... ERROR org.apache.hadoop.dfs.DataNode: java.io.IOException:
  Incompatible namespaceIDs in /app/hadoop/tmp/dfs/data: namenode namespaceID = 308967713;
  datanode namespaceID = 113030094

  修改namenode的id:
  [root@oel62n1]# vi /tmp/hadoop-root/dfs/data/current/VERSION
  --將namespaceID改為與log一樣
  [root@oel62n2]# vi /tmp/hadoop-root/dfs/data/current/VERSION
  --將namespaceID改為與log一樣

  重新啟動後成功了。

留言

這個網誌中的熱門文章

Line如何換行

在電腦版的Line輸入文字時,遇到需要換行的情形時,我都是用記事本先寫好再複製上去,這樣就可以有換行的效果,可是這樣的做法好像失去Line的便利性。 於是查了一下,原來有一個設定可以指定Enter換行,而不是發訊息出去。 完成設定之後,要發送訊息就改用Alt+Enter,而Enter就可以換行了。

在Windows下,利用tasklist與taskkill來刪除Process

Windows7 / Windows8 kill process Linux下要刪除某個程序通常會使用 ps 配合 kill 來刪除程序。 例如:ps -ef |grep [PROCESS NAME]       kill -9 [PID] 在Windows下,通常是開啟工作管理員來強制結束應用程式,但是如果要寫成Script,就必須改為命令式。 TASKLIST [/S system [/U username [/P [password]]]]          [/M [module] | /SVC | /V] [/FI filter] [/FO format] [/NH]           TASKKILL [/S system [/U username [/P [password]]]]          { [/FI filter] [/PID processid | /IM imagename] } [/T] [/F]           (Tasklist:查詢Process ; Taskkill:刪除Process)           例如要刪除已開啟的記事本(notepad): 1、查詢記事本的Process訊息     C:\> tasklist |find /i "notepad.exe"     notepad.exe      6092 Console     1     5,832 K 2、由上得知記事本的PID為6092     C:\> taskkill /f /PID 6092     成功:處理程序 PID 6092 已經終止了。     taskkill使用的參數     /f:指定此參數可強制終止處理程序     /PID:指定要終止之處理程序的 PID      3、也可以直接以程式名稱刪除     C:\ taskkill /f /im notepad.exe     成功:處理程序 "notepad.exe" <PID 6092> 已經終止了      下面是我自己測試的Script,可以刪除多個相同的程式,例如同時開啟了三個記事本: @echo off for /f &quo

Win 10 工作排程無法執行bat批次檔

利用Win 10的工作排程器來設定每日自動執行的批次檔,單獨執行批次檔沒問題,但是放在排程上就是無法執行。 後來試了幾種網路上提供的方式,其注意的事項如下: 1、在「安全性選項」選擇「只有使用者登入時才執行」並取消「以最高權限執行」。 2、在「設定」中選擇「Windows 10」 3、批次檔內的執行檔需以完整的路徑執行,或設定PATH路徑。 3、批次檔中如果帶有中文的路徑,則文字編碼類型必需是ANSI碼,       我的批次檔一開始就是UTF-8碼,但是單獨執行沒有問題,排程上就是有問題,       最後在批次檔中加入暫停指令pause才發現的。 4、如果想選擇「不論使用者登入與否均執行」,則在「設定」必須選擇「Windows Server 2003、Windows XP或Windows 2000」,    但是上述的選項只有在新增工作程程時才會出現,原有的工作排程是不會有此選項