Changes between Version 1 and Version 2 of NCHCCloudCourse100802/Lab5
- Timestamp:
- Aug 8, 2010, 3:30:37 PM (14 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
NCHCCloudCourse100802/Lab5
v1 v2 2 2 #!html 3 3 <div style="text-align: center;"><big 4 style="font-weight: bold;"><big><big>實作五: Hadoop 叢集安裝</big></big></big><br/><big>Lab 4 style="font-weight: bold;"><big><big>實作五: Hadoop 叢集安裝</big></big></big><br/><big>Lab5 : Hadoop Installation: Fully Distributed Mode<big></big></big></div> 5 5 }}} 6 6 [[PageOutline]] 7 7 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. 21 21 {{{ 22 22 ~$ sudo passwd 23 23 }}} 24 24 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 28 29 {{{ 29 30 ~$ cd ~ … … 33 34 ~$ rm -rf ~/.ssh 34 35 }}} 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. 42 41 {{{ 43 42 $ cat /etc/ssh/ssh_config |grep StrictHostKeyChecking … … 45 44 }}} 46 45 47 * 在"主機一" 上操作 48 * 接著將key產生並複製到其他node上 46 * 在"主機一" 上操作,並將 key 產生並複製到其他節點上[[br]]On "node1", generate SSH key and copy these keys to "node2". 49 47 {{{ 50 48 ~$ ssh-keygen -t rsa -f ~/.ssh/id_rsa -P "" 51 49 ~$ 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) 58 56 ~$ exit 59 57 ~$ exit … … 61 59 }}} 62 60 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. 69 65 {{{ 70 66 ~$ sudo apt-get purge java-gcj-compat 71 67 ~$ sudo apt-get install sun-java6-bin sun-java6-jdk sun-java6-jre 72 ~$ ssh 主機二 68 ~$ ssh 主機二(node2) 73 69 ~$ sudo apt-get purge java-gcj-compat 74 70 ~$ sudo apt-get install sun-java6-bin sun-java6-jdk sun-java6-jre 75 71 ~$ exit 76 72 }}} 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. 82 78 83 79 {{{ … … 91 87 }}} 92 88 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 96 93 97 94 {{{ … … 100 97 }}} 101 98 102 將以下資訊貼入 conf/hadoop-env.sh 檔內 99 將以下資訊貼入 conf/hadoop-env.sh 檔內[[BR]]Paste following information to conf/hadoop-env.sh 103 100 104 101 {{{ … … 110 107 export HADOOP_PID_DIR=/tmp/hadoop/pids 111 108 }}} 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: 117 115 118 116 {{{ … … 120 118 }}} 121 119 122 將以下資料取代掉原本的內容 120 將以下資料取代掉原本的內容[[BR]]Then paste following settings in gedit. 123 121 124 122 {{{ … … 127 125 <property> 128 126 <name>fs.default.name</name> 129 <value>hdfs://主機一 :9000</value>127 <value>hdfs://主機一(node1):9000</value> 130 128 </property> 131 129 <property> … … 141 139 }}} 142 140 143 將以下資料取代掉原本的內容 141 將以下資料取代掉原本的內容[[BR]]Then paste following settings in gedit. 144 142 145 143 {{{ … … 158 156 }}} 159 157 160 將以下資料取代掉原本的內容 158 將以下資料取代掉原本的內容[[BR]]Then paste following settings in gedit. 161 159 162 160 {{{ … … 165 163 <property> 166 164 <name>mapred.job.tracker</name> 167 <value>主機一 :9001</value>165 <value>主機一(node1):9001</value> 168 166 </property> 169 167 </configuration> … … 171 169 }}} 172 170 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 179 180 {{{ 180 181 /opt/hadoop$ gedit conf/slaves 181 182 }}} 182 原本內容只有localhost一行,請刪除此行並換上"主機一" 及"主機二" 的ip 183 原本內容只有localhost一行,請刪除此行並換上"主機一" 及"主機二" 的ip [[BR]] replace with IP address of "node1" and "node2" 183 184 {{{ 184 185 #!sh … … 187 188 }}} 188 189 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 {{{ 195 hadooper@node1:/opt/hadoop$ ssh 主機二(node2) 196 hadooper@node2:/opt/hadoop$ sudo mkdir /opt/hadoop 197 hadooper@node2:/opt/hadoop$ sudo chown -R hadooper:hadooper /opt/hadoop 198 hadooper@node2:/opt/hadoop$ sudo mkdir /var/hadoop 199 hadooper@node2:/opt/hadoop$ sudo chown -R hadooper:hadooper /var/hadoop 200 }}} 201 202 * 複製"主機一" 的hadoop資料夾到"主機二" 上 [[BR]] 203 {{{ 204 hadooper@node2:/opt/hadoop$ scp -r node1:/opt/hadoop/* /opt/hadoop/ 205 hadooper@node2:/opt/hadoop$ exit 206 hadooper@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 {{{ 215 hadooper@node1:/opt/hadoop$ bin/hadoop namenode -format 216 }}} 217 218 執行畫面如:[[BR]]You should see results like this: 214 219 {{{ 215 220 09/03/23 20:19:47 INFO dfs.NameNode: STARTUP_MSG: … … 234 239 }}} 235 240 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. 241 247 242 248 {{{ … … 246 252 247 253 ------ 248 * http://主機一 :50070/ - Hadoop DFS 狀態254 * http://主機一(node1):50070/ - Hadoop DFS 狀態 249 255 * [[Image(wiki:0428Hadoop_Lab3:datanode.png)]] 250 256 ------ 251 257 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 257 264 258 265 {{{ … … 260 267 }}} 261 268 262 * 啟動之後, jobtracker也正常運作囉! 269 * 啟動之後, jobtracker也正常運作囉![[BR]]Now, you have JobTracker and TaskTracker running. 263 270 ------ 264 271 * http://主機一:50030/ - Hadoop 管理介面 … … 266 273 ------ 267 274 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. 271 279 {{{ 272 280 /opt/hadoop$ bin/stop-dfs.sh 273 281 }}} 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. 277 284 {{{ 278 285 /opt/hadoop$ bin/stop-mapred.sh 279 286 }}} 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的工作。