Changes between Version 1 and Version 2 of NCHCCloudCourse100802/Lab5


Ignore:
Timestamp:
Aug 8, 2010, 3:30:37 PM (14 years ago)
Author:
jazz
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • NCHCCloudCourse100802/Lab5

    v1 v2  
    22#!html
    33<div style="text-align: center;"><big
    4  style="font-weight: bold;"><big><big>實作五: Hadoop 叢集安裝</big></big></big><br/><big>Lab 5 : Hadoop Installation: Fully Distributed Mode<big></big></big></div>
     4 style="font-weight: bold;"><big><big>實作五: Hadoop 叢集安裝</big></big></big><br/><big>Lab5 : Hadoop Installation: Fully Distributed Mode<big></big></big></div>
    55}}}
    66[[PageOutline]]
    77
    8 == 前言 ==
    9 
    10  * 您手邊有兩台電腦,假設剛剛操作的電腦為"主機一" ,另一台則為"主機二" 。則稍後的環境如下
    11  
    12  || || '''管理Data的身份''' || '''管理Job的身份''' ||
    13  || '''"主機一" ''' || namenode + datanode || jobtracker + tasktracker||
    14  || '''"主機二" ''' || datanode|| tasktracker ||
    15  
    16  * 這個實做會架設運作在叢集環境上的Hadoop,因此若是你的電腦還存在著之前的實做一的環境,請先作step 0,以移除掉之前的設定。
    17 
    18  * 確認您"主機一"的 hostname 與 "主機二" 的 hostname,並將下面指令有 主機一與主機二 的地方作正確的取代
    19 
    20  * 維持好習慣,請幫你待會要操作的主機設root密碼
     8== 前言 Preface ==
     9
     10 * 您手邊有兩台電腦,假設剛剛操作的電腦為"主機一" ,另一台則為"主機二" 。則稍後的環境如下[[BR]]Now, You have two computer. Assume that you're in front of '''"node1"''' and the other computer is '''"node2"'''
     11 
     12 || || '''管理Data的身份'''[[BR]]for HDFS || '''管理Job的身份'''[[BR]]for MapReduce ||
     13 || '''"主機一" '''[[BR]]'''"node1"''' || namenode + datanode || jobtracker + tasktracker||
     14 || '''"主機二" '''[[BR]]'''"node2"''' || datanode|| tasktracker ||
     15 
     16 * 這個實作會架設運作在叢集環境上的Hadoop,因此若是你的電腦還存在著之前的實作一的環境,請先作step 0,以移除掉之前的設定。[[BR]]Following steps will go through the setup of cluster setup. If you kept the environment of Lab1, please erase that by instruction listed in '''Step 0'''.
     17
     18 * 確認您"主機一"的 hostname 與 "主機二" 的 hostname,並將下面指令有 主機一與主機二 的地方作正確的取代[[BR]]Please replace "node1" and "node2" with the hostname of your computers.
     19
     20 * 維持好習慣,請幫你待會要操作的主機設 root 密碼[[BR]]Since Ubuntu does not configure super user (root) password for you, please set your own super user (root) password.
    2121{{{
    2222~$ sudo passwd
    2323}}}
    2424
    25 === 清除所有在實做一作過的環境 ===
    26 
    27  * 在 "主機一"  (有操作過 實做一 的電腦)上操作
     25== Step 0: 清除所有在實作一作過的環境 ==
     26== Step 0: Erase installed Hadoop of Lab1 ==
     27
     28 * 在 "主機一"  (有操作過 實作一 的電腦)上操作[[BR]]On "node1", please remove the folder of /opt/hadoop and /var/hadoop created in Lab1
    2829{{{
    2930~$ cd ~
     
    3334~$ rm -rf ~/.ssh
    3435}}}
    35  == step 0. 設定機器的ip & hostname 資訊 ==
    36 
    37 
    38 
    39  == step 1. 設定兩台機器登入免密碼 ==
    40 
    41  * 請注意我們實驗環境已經把 /etc/ssh/ssh_config裡的StrictHostKeyChecking改成no,下面的指令可以檢查,如果你的設定不同的話,請修改此檔會比較順。
     36
     37== Step 1: 設定兩台機器登入免密碼 ==
     38== Step 1: Setup SSH key exchange ==
     39
     40 * 請注意我們實驗環境已經把 /etc/ssh/ssh_config裡的StrictHostKeyChecking改成no,下面的指令可以檢查,如果你的設定不同的話,請修改此檔會比較順。[[BR]]Please check your /etc/ssh/ssh_config configurations. It should had been change the setting of "StrictHostKeyChecking" to "no". If not, please modified it by editor.
    4241{{{
    4342$ cat /etc/ssh/ssh_config |grep StrictHostKeyChecking
     
    4544}}}
    4645
    47  * 在"主機一" 上操作
    48  * 接著將key產生並複製到其他node上
     46 * 在"主機一" 上操作,並將 key 產生並複製到其他節點上[[br]]On "node1", generate SSH key and copy these keys to "node2".
    4947{{{
    5048~$ ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ""
    5149~$ cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
    52 ~$ scp -r ~/.ssh 主機二:~/
    53 }}}
    54  * 測試看看是否登入免密碼
    55 {{{
    56 ~$ ssh 主機二
    57 ~$ ssh 主機一
     50~$ scp -r ~/.ssh 主機二(node2):~/
     51}}}
     52 * 測試看看是否登入免密碼[[BR]]To make sure that you've configure it correct, you could try following commands.
     53{{{
     54~$ ssh 主機二(node2)
     55~$ ssh 主機一(node1)
    5856~$ exit
    5957~$ exit
     
    6159}}}
    6260
    63  * 完成後請登入確認不用輸入密碼,(第一次登入需按 yes ,第二次就可以直接登入到系統),以免日後輸入密碼不隻手軟而已....
    64 
    65  == step 2. 安裝java ==
    66 
    67  * 為兩台電腦安裝java
    68    * "主機一"  & "主機二"  都要操作以下指令
     61== Step 2: 安裝 Java ==
     62== Step 2: Install Java ==
     63
     64 * 為兩台電腦安裝 Java[[BR]]Install Java Runtime for both computer.
    6965{{{
    7066~$ sudo apt-get purge java-gcj-compat
    7167~$ sudo apt-get install sun-java6-bin  sun-java6-jdk sun-java6-jre
    72 ~$ ssh 主機二
     68~$ ssh 主機二(node2)
    7369~$ sudo apt-get purge java-gcj-compat
    7470~$ sudo apt-get install sun-java6-bin  sun-java6-jdk sun-java6-jre
    7571~$ exit
    7672}}}
    77    
    78 
    79  == step 3. 下載安裝Hadoop到"主機一" ==
    80 
    81  * 先在"主機一" 上安裝,其他node的安裝等設定好之後在一起作
     73
     74== Step 3: 下載安裝 Hadoop 到"主機一"  ==
     75== Step 3: Download Hadoop Source Package to Node 1 ==
     76
     77 * 先在"主機一" 上安裝,其他node的安裝等設定好之後在一起作[[BR]]We'll first install at '''node1''', then copy the entire folder including settings to '''node2''' later.
    8278
    8379{{{
     
    9187}}}
    9288
    93  == step 4. 設定 hadoop-env.sh ==
    94  
    95  * "主機一" 上用gedit 編輯 conf/hadoop-env.sh
     89== Step 4: 設定 hadoop-env.sh ==
     90== Step 4: Configure hadoop-env.sh ==
     91 
     92 * "主機一" 上用 gedit 編輯 conf/hadoop-env.sh [[BR]] Use gedit to configure conf/hadoop-env.sh
    9693
    9794{{{
     
    10097}}}
    10198
    102  將以下資訊貼入 conf/hadoop-env.sh 檔內
     99 將以下資訊貼入 conf/hadoop-env.sh 檔內[[BR]]Paste following information to conf/hadoop-env.sh
    103100
    104101{{{
     
    110107export HADOOP_PID_DIR=/tmp/hadoop/pids
    111108}}}
    112    * 注意,在此實做中,我們多設定了HADOOP_PID_DIR及HADOOP_LOG_DIR的參數,並且把值寫入到我們hadooper的家目錄中,此舉並非完全必要,但一個目的是介紹更多hadoop-env.sh內的參數,另一目的為讓log,pid等常變資料與hadoop家目錄分離
    113  
    114  == step 5. 設定 hadoop-site.xml ==
    115  
    116  * 第二個設定檔是 '''hadoop-site.xml''',由於官方所提供的範例並無法直接執行,因此我們參考[http://hadoop.apache.org/core/docs/r0.20.2/quickstart.html 線上文件],做了以下的修改。
     109   * 注意,在此實作中,我們多設定了HADOOP_PID_DIR及HADOOP_LOG_DIR的參數,並且把值寫入到我們hadooper的家目錄中,此舉並非完全必要,但一個目的是介紹更多hadoop-env.sh內的參數,另一目的為讓log,pid等常變資料與hadoop家目錄分離[[BR]]Note: in Lab5, we also configure two new variables '''HADOOP_PID_DIR''' and '''HADOOP_LOG_DIR'''. This is just to introduce that you can change the location to store logs and PIDs.
     110 
     111== Step 5: 設定 *-site.xml ==
     112== Step 5: Configure *-site.xml ==
     113
     114 * 接下來的設定檔共有3個 core-site.xml, hdfs-site.xml, mapred-site.xml,由於官方所提供的範例並無法直接執行,因此我們參考[http://hadoop.apache.org/core/docs/current/quickstart.html 線上文件],做了以下的修改。[[BR]]Next, let's configure three configuration files including core-site.xml, hdfs-site.xml, mapred-site.xml. Reference from "[http://hadoop.apache.org/core/docs/current/quickstart.html Hadoop Quick Start]", please copy and paste the command:
    117115 
    118116{{{
     
    120118}}}
    121119
    122  將以下資料取代掉原本的內容
     120 將以下資料取代掉原本的內容[[BR]]Then paste following settings in gedit.
    123121
    124122{{{
     
    127125  <property>
    128126    <name>fs.default.name</name>
    129     <value>hdfs://主機一:9000</value>
     127    <value>hdfs://主機一(node1):9000</value>
    130128  </property>
    131129  <property>
     
    141139}}}
    142140
    143  將以下資料取代掉原本的內容
     141 將以下資料取代掉原本的內容[[BR]]Then paste following settings in gedit.
    144142
    145143{{{
     
    158156}}}
    159157
    160  將以下資料取代掉原本的內容
     158 將以下資料取代掉原本的內容[[BR]]Then paste following settings in gedit.
    161159
    162160{{{
     
    165163  <property>
    166164    <name>mapred.job.tracker</name>
    167     <value>主機一:9001</value>
     165    <value>主機一(node1):9001</value>
    168166  </property>
    169167</configuration>
     
    171169}}}
    172170
    173    * 注意!fs.default.name = hdfs://主機一:9000/ ;而mapred.job.tracker = 主機一:9001,看出差異了嗎!一個有指hdfs://,一個沒有,重要!易混淆。
    174    
    175  == step 6. 設定masters及slaves ==
    176  
    177  * 接著我們要編輯哪個主機當namenode, 若有其他主機則為datanodes
    178    * 編輯 conf/slaves
     171   * 注意!fs.default.name = hdfs://主機一:9000/ ;而mapred.job.tracker = 主機一:9001,看出差異了嗎!一個有指hdfs://,一個沒有,重要!易混淆。[[BR]]Note: you will see that the parameter have little difference:
     172     * fs.default.name = hdfs://node1:9000/
     173     * mapred.job.tracker = node1:9001
     174   
     175== Step 6: 設定 masters 及 slaves ==
     176== Step 6: Configure masters and slaves ==
     177 
     178 * 接著我們要編輯哪個主機當 namenode, 若有其他主機則為 datanodes [[BR]] Next, we need to configure which node to be namenode and others to be datanodes.
     179   * 編輯 conf/slaves [[BR]] edit conf/slaves
    179180{{{
    180181/opt/hadoop$ gedit conf/slaves
    181182}}}
    182  原本內容只有localhost一行,請刪除此行並換上"主機一" 及"主機二" 的ip
     183 原本內容只有localhost一行,請刪除此行並換上"主機一" 及"主機二" 的ip [[BR]] replace with IP address of "node1" and "node2"
    183184{{{
    184185#!sh
     
    187188}}}
    188189
    189 == step 7. Hadoop_Home內的資料複製到其他主機上 ==
    190 
    191  * 在"主機一" 上對遠端"主機二" 作開資料夾/opt/hadoop及權限設定
    192 {{{
    193 /opt/hadoop$ ssh 主機二 "sudo mkdir /opt/hadoop"
    194 /opt/hadoop$ ssh 主機二 "sudo chown -R hadooper:hadooper /opt/hadoop"
    195 /opt/hadoop$ ssh 主機二 "sudo mkdir /var/hadoop"
    196 /opt/hadoop$ ssh 主機二 "sudo chown -R hadooper:hadooper /var/hadoop"
    197 }}}
    198 
    199  * 複製"主機一" 的hadoop資料夾到"主機二" 上
    200 {{{
    201 /opt/hadoop$ scp -r /opt/hadoop/* 主機二:/opt/hadoop/
    202 }}}
    203 
    204 == step 8. 格式化HDFS ==
    205 
    206 
    207  * 以上我們已經安裝及設定好 Hadoop 的叢集環境,接著讓我們來啟動 Hadoop ,首先還是先格式化hdfs,在"主機一"  上操作
    208  
    209 {{{
    210 /opt/hadoop$ bin/hadoop namenode -format
    211 }}}
    212 
    213 執行畫面如:
     190== Step 7: HADOOP_HOME 內的資料複製到其他主機上 ==
     191== Step 7: Copy entire HADOOP_HOME to other computers ==
     192
     193 * 連線到"主機二" 作開資料夾/opt/hadoop及權限設定 [[BR]] SSH to node2 and create related folder for Hadoop and change permissions.
     194{{{
     195hadooper@node1:/opt/hadoop$ ssh 主機二(node2)
     196hadooper@node2:/opt/hadoop$ sudo mkdir /opt/hadoop
     197hadooper@node2:/opt/hadoop$ sudo chown -R hadooper:hadooper /opt/hadoop
     198hadooper@node2:/opt/hadoop$ sudo mkdir /var/hadoop
     199hadooper@node2:/opt/hadoop$ sudo chown -R hadooper:hadooper /var/hadoop
     200}}}
     201
     202 * 複製"主機一" 的hadoop資料夾到"主機二" 上 [[BR]]
     203{{{
     204hadooper@node2:/opt/hadoop$ scp -r node1:/opt/hadoop/* /opt/hadoop/
     205hadooper@node2:/opt/hadoop$ exit
     206hadooper@node1:/opt/hadoop$
     207}}}
     208
     209== Step 8: 格式化 HDFS ==
     210== Step 8: Format HDFS ==
     211
     212 * 以上我們已經安裝及設定好 Hadoop 的叢集環境,接著讓我們來啟動 Hadoop ,首先還是先格式化hdfs,在"主機一"  上操作 [[BR]] Now, we have configured the fully distributed mode of Hadoop Cluster. Before we start Hadoop related services, we need to format NameNode on node1.
     213 
     214{{{
     215hadooper@node1:/opt/hadoop$ bin/hadoop namenode -format
     216}}}
     217
     218執行畫面如:[[BR]]You should see results like this:
    214219{{{
    21522009/03/23 20:19:47 INFO dfs.NameNode: STARTUP_MSG:
     
    234239}}}
    235240
    236 == step 9. 啟動Hadoop ==
    237 
    238  * bin/start-dfs.sh腳本會參照namenode上${HADOOP_CONF_DIR}/slaves文件的內容,在所有列出的slave上啟動datanode。
    239  
    240    * 在"主機一" 上,執行下面的命令啟動HDFS:
     241== Step 9: 啟動Hadoop ==
     242== Step 9: Start Hadoop ==
     243
     244 * bin/start-dfs.sh腳本會參照namenode上${HADOOP_CONF_DIR}/slaves文件的內容,在所有列出的slave上啟動datanode。[[BR]] The bash script "bin/start-dfs.sh" will ssh to all computers listed in ${HADOOP_CONF_DIR}/slaves to start DataNodes.
     245 
     246   * 在"主機一" 上,執行下面的命令啟動HDFS:[[BR]] On node1, you can use start-dfs.sh to start HDFS related services.
    241247   
    242248{{{
     
    246252
    247253------
    248    * http://主機一:50070/ - Hadoop DFS 狀態
     254   * http://主機一(node1):50070/ - Hadoop DFS 狀態
    249255   * [[Image(wiki:0428Hadoop_Lab3:datanode.png)]]
    250256------
    251257   
    252    * ps: 然而JobTracker還沒啟動,因此 http://主機一:50030/ 網頁無法顯示
    253 
    254  * bin/start-mapred.sh腳本會參照jobtracker上${HADOOP_CONF_DIR}/slaves文件的內容,在所有列出的slave上啟動tasktracker。
    255 
    256    * 在"主機一"執行下面的命令啟動Map/Reduce:
     258   * ps: 然而JobTracker還沒啟動,因此 http://主機一:50030/ 網頁無法顯示[[BR]]Since JobTracker is not yet running, you can't see http://node1:50030/
     259
     260 * bin/start-mapred.sh腳本會參照jobtracker上${HADOOP_CONF_DIR}/slaves文件的內容,在所有列出的slave上啟動tasktracker。[[BR]] The bash script "bin/start-mapred.sh" will ssh to all computers listed in ${HADOOP_CONF_DIR}/slaves to start TaskTracker.
     261
     262   * 在"主機一"執行下面的命令啟動Map/Reduce:[[BR]] You can use start-mapred.sh to start MapReduce related services.
     263   
    257264   
    258265{{{
     
    260267}}}
    261268
    262  * 啟動之後, jobtracker也正常運作囉!
     269 * 啟動之後, jobtracker也正常運作囉![[BR]]Now, you have JobTracker and TaskTracker running.
    263270------
    264271   * http://主機一:50030/ - Hadoop 管理介面
     
    266273------
    267274
    268 == step 10. 停止hadoop ==
    269 
    270  * 在"主機一" 上,執行下面的命令停止HDFS:
     275== Note: 停止 Hadoop ==
     276== Note: Stoping Hadoop ==
     277
     278 * 在"主機一" 上,執行下面的命令停止HDFS:[[BR]] You can use stop-dfs.sh to stop HDFS related services.
    271279{{{
    272280/opt/hadoop$ bin/stop-dfs.sh
    273281}}}
    274    * bin/stop-dfs.sh腳本會參照namenode上${HADOOP_CONF_DIR}/slaves文件的內容,在所有列出的slave上停止namenode
    275 
    276  * 在"主機一" 上,執行下面的命令停止Map/Reduce:
     282
     283 * 在"主機一" 上,執行下面的命令停止Map/Reduce:[[BR]] You can use stop-mapred.sh to stop MapReduce related services.
    277284{{{
    278285/opt/hadoop$ bin/stop-mapred.sh
    279286}}}
    280    * bin/stop-mapred.sh腳本會參照jobtracker上${HADOOP_CONF_DIR}/slaves文件的內容,在所有列出的slave上停止tasktracker。
    281 
    282 == 練習 ==
    283  * 看 conf/hadoop-default.xml 的更多內容
    284  * 和別人組隊,組成4台node的cluster,其中"主機一"  只當 namenode ,"主機二"  只當 jobtracker,而node3, node4 兩台電腦則身兼 datanode及tasktracker的工作。