close
Warning:
Can't synchronize with repository "(default)" (Unsupported version control system "svn": /usr/lib/python2.7/dist-packages/libsvn/_fs.so: failed to map segment from shared object: Cannot allocate memory). Look in the Trac log for more information.
- Timestamp:
-
Aug 21, 2009, 1:57:04 PM (17 years ago)
- Author:
-
waue
- Comment:
-
--
Legend:
- Unmodified
- Added
- Removed
- Modified
-
|
v7
|
v8
|
|
| 8 | 8 | == 前言 == |
| 9 | 9 | |
| 10 | | * 您手邊有兩台電腦,假設剛剛操作的電腦為Node 1 ,另一台則為Node 2 。則稍後的環境如下 |
| | 10 | * 您手邊有兩台電腦,假設剛剛操作的電腦為"主機一" ,另一台則為"主機二" 。則稍後的環境如下 |
| 11 | 11 | |
| 12 | 12 | || || '''管理Data的身份''' || '''管理Job的身份''' || |
| 13 | | || '''Node 1 ''' || namenode(master)& datanode || tasktracker(slave)|| |
| 14 | | || '''Node 2 ''' || jobtracker(master)& datanode|| tasktracker(slave) || |
| | 13 | || '''"主機一" ''' || namenode(master)& datanode || tasktracker(slave)|| |
| | 14 | || '''"主機二" ''' || jobtracker(master)& datanode|| tasktracker(slave) || |
| 15 | 15 | |
| 16 | 16 | * 這個實做會架設運作在叢集環境上的Hadoop,因此若是你的電腦還存在著之前的實做一的環境,請先作step 0,以移除掉之前的設定。 |
| 17 | 17 | |
| 18 | | * 以下node01代表你Node 1 的ip位址,node02為你Node 2 的ip位址,請查清楚之後作設定 |
| 19 | | |
| 20 | | * 確認您Node 1的 hostname 與 Node 2 的 hostname,並將下面指令有 node01與node02 的地方作正確的取代 |
| 21 | | |
| 22 | | * 為了簡化操作步驟,'''大部分的指令在Node 1 執行即可,不過step2 的安裝java則需要在Node 2 上實機操作喔!''' |
| | 18 | * 確認您"主機一"的 hostname 與 "主機二" 的 hostname,並將下面指令有 主機一與主機二 的地方作正確的取代 |
| 23 | 19 | |
| 24 | 20 | * 維持好習慣,請幫你待會要操作的主機設root密碼 |
| … |
… |
|
| 29 | 25 | === 清除所有在實做一作過的環境 === |
| 30 | 26 | |
| 31 | | * 在 Node 1 (有操作過 實做一 的電腦)上操作 |
| | 27 | * 在 "主機一" (有操作過 實做一 的電腦)上操作 |
| 32 | 28 | {{{ |
| 33 | 29 | ~$ cd ~ |
| … |
… |
|
| 42 | 38 | {{{ |
| 43 | 39 | $ sudo su - |
| 44 | | # echo "node01" > /etc/hostname |
| | 40 | # echo "主機一" > /etc/hostname |
| 45 | 41 | # hostname -F /etc/hostname |
| 46 | 42 | }}} |
| … |
… |
|
| 49 | 45 | # cat >> /etc/hosts << EOF |
| 50 | 46 | }}} |
| 51 | | 如:192.168.xx.xx 是指你手邊電腦的ip,192.168.oo.oo則是Node 2的ip |
| 52 | | {{{ |
| 53 | | #!sh |
| 54 | | 192.168.xx.xx node01 |
| 55 | | 192.168.oo.oo node02 |
| | 47 | 如:192.168.xx.xx 是指你手邊電腦的ip,192.168.oo.oo則是"主機二"的ip |
| | 48 | {{{ |
| | 49 | #!sh |
| | 50 | 192.168.xx.xx 主機一 |
| | 51 | 192.168.oo.oo 主機二 |
| 56 | 52 | 127.0.0.1 localhost |
| 57 | 53 | EOF |
| … |
… |
|
| 71 | 67 | }}} |
| 72 | 68 | |
| 73 | | * 在Node 1 上操作 |
| | 69 | * 在"主機一" 上操作 |
| 74 | 70 | * 接著將key產生並複製到其他node上 |
| 75 | 71 | {{{ |
| 76 | 72 | ~$ ssh-keygen -t rsa -f ~/.ssh/id_rsa -P "" |
| 77 | 73 | ~$ cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys |
| 78 | | ~$ scp -r ~/.ssh node02:~/ |
| | 74 | ~$ scp -r ~/.ssh 主機二:~/ |
| 79 | 75 | }}} |
| 80 | 76 | * 測試看看是否登入免密碼 |
| 81 | 77 | {{{ |
| 82 | | ~$ ssh node02 |
| 83 | | ~$ ssh node01 |
| | 78 | ~$ ssh 主機二 |
| | 79 | ~$ ssh 主機一 |
| 84 | 80 | ~$ exit |
| 85 | 81 | ~$ exit |
| … |
… |
|
| 92 | 88 | |
| 93 | 89 | * 為兩台電腦安裝java |
| 94 | | * Node 1 & Node 2 都要操作以下指令 |
| | 90 | * "主機一" & "主機二" 都要操作以下指令 |
| 95 | 91 | {{{ |
| 96 | 92 | ~$ sudo apt-get purge java-gcj-compat |
| 97 | 93 | ~$ sudo apt-get install sun-java6-bin sun-java6-jdk sun-java6-jre |
| 98 | | ~$ ssh node02 |
| | 94 | ~$ ssh 主機二 |
| 99 | 95 | ~$ sudo apt-get purge java-gcj-compat |
| 100 | 96 | ~$ sudo apt-get install sun-java6-bin sun-java6-jdk sun-java6-jre |
| … |
… |
|
| 103 | 99 | |
| 104 | 100 | |
| 105 | | == step 3. 下載安裝Hadoop到Node 1 == |
| 106 | | |
| 107 | | * 先在Node 1 上安裝,其他node的安裝等設定好之後在一起作 |
| | 101 | == step 3. 下載安裝Hadoop到"主機一" == |
| | 102 | |
| | 103 | * 先在"主機一" 上安裝,其他node的安裝等設定好之後在一起作 |
| 108 | 104 | |
| 109 | 105 | {{{ |
| … |
… |
|
| 117 | 113 | == step 4. 設定 hadoop-env.sh == |
| 118 | 114 | |
| 119 | | * Node 1 上用gedit 編輯 conf/hadoop-env.sh |
| | 115 | * "主機一" 上用gedit 編輯 conf/hadoop-env.sh |
| 120 | 116 | |
| 121 | 117 | {{{ |
| … |
… |
|
| 151 | 147 | <property> |
| 152 | 148 | <name>fs.default.name</name> |
| 153 | | <value>hdfs://node01:9000/</value> |
| | 149 | <value>hdfs://主機一:9000/</value> |
| 154 | 150 | <description> </description> |
| 155 | 151 | </property> |
| 156 | 152 | <property> |
| 157 | 153 | <name>mapred.job.tracker</name> |
| 158 | | <value>node01:9001</value> |
| | 154 | <value>主機一:9001</value> |
| 159 | 155 | <description> </description> |
| 160 | 156 | </property> |
| … |
… |
|
| 167 | 163 | }}} |
| 168 | 164 | * 注意! 我們多加了一個參數hadoop.tmp.dir,讓預設的中介資料存放在/tmp/hadoop/ 而不是/tmp/ 下,更多內容可以看conf/hadoop-default.xml |
| 169 | | * 注意!fs.default.name = hdfs://node01:9000/ ;而mapred.job.tracker = node01:9001,看出差異了嗎!一個有指hdfs://,一個沒有,重要!易混淆。 |
| | 165 | * 注意!fs.default.name = hdfs://主機一:9000/ ;而mapred.job.tracker = 主機一:9001,看出差異了嗎!一個有指hdfs://,一個沒有,重要!易混淆。 |
| 170 | 166 | |
| 171 | 167 | == step 6. 設定masters及slaves == |
| … |
… |
|
| 176 | 172 | /opt/hadoop$ gedit conf/slaves |
| 177 | 173 | }}} |
| 178 | | 原本內容只有localhost一行,請刪除此行並換上Node 1 及Node 2 的ip |
| 179 | | {{{ |
| 180 | | #!sh |
| 181 | | node01 |
| 182 | | node02 |
| | 174 | 原本內容只有localhost一行,請刪除此行並換上"主機一" 及"主機二" 的ip |
| | 175 | {{{ |
| | 176 | #!sh |
| | 177 | 主機一 |
| | 178 | 主機二 |
| 183 | 179 | }}} |
| 184 | 180 | |
| 185 | 181 | == step 7. Hadoop_Home內的資料複製到其他主機上 == |
| 186 | 182 | |
| 187 | | * 在Node 1 上對遠端Node 2 作開資料夾/opt/hadoop及權限設定 |
| 188 | | {{{ |
| 189 | | /opt/hadoop$ ssh node02 "sudo mkdir /opt/hadoop" |
| 190 | | /opt/hadoop$ ssh node02 "sudo chown -R hadooper:hadooper /opt/hadoop" |
| 191 | | }}} |
| 192 | | |
| 193 | | * 複製Node 1 的hadoop資料夾到Node 2 上 |
| 194 | | {{{ |
| 195 | | /opt/hadoop$ scp -r /opt/hadoop/* node02:/opt/hadoop/ |
| | 183 | * 在"主機一" 上對遠端"主機二" 作開資料夾/opt/hadoop及權限設定 |
| | 184 | {{{ |
| | 185 | /opt/hadoop$ ssh 主機二 "sudo mkdir /opt/hadoop" |
| | 186 | /opt/hadoop$ ssh 主機二 "sudo chown -R hadooper:hadooper /opt/hadoop" |
| | 187 | }}} |
| | 188 | |
| | 189 | * 複製"主機一" 的hadoop資料夾到"主機二" 上 |
| | 190 | {{{ |
| | 191 | /opt/hadoop$ scp -r /opt/hadoop/* 主機二:/opt/hadoop/ |
| 196 | 192 | }}} |
| 197 | 193 | |
| … |
… |
|
| 199 | 195 | |
| 200 | 196 | |
| 201 | | * 以上我們已經安裝及設定好 Hadoop 的叢集環境,接著讓我們來啟動 Hadoop ,首先還是先格式化hdfs,在Node 1 上操作 |
| | 197 | * 以上我們已經安裝及設定好 Hadoop 的叢集環境,接著讓我們來啟動 Hadoop ,首先還是先格式化hdfs,在"主機一" 上操作 |
| 202 | 198 | |
| 203 | 199 | {{{ |
| … |
… |
|
| 210 | 206 | /************************************************************ |
| 211 | 207 | STARTUP_MSG: Starting NameNode |
| 212 | | STARTUP_MSG: host = node01 |
| | 208 | STARTUP_MSG: host = 主機一 |
| 213 | 209 | STARTUP_MSG: args = [-format] |
| 214 | 210 | |
| … |
… |
|
| 224 | 220 | 09/03/23 20:19:47 INFO dfs.NameNode: SHUTDOWN_MSG: |
| 225 | 221 | /************************************************************ |
| 226 | | SHUTDOWN_MSG: Shutting down NameNode at node01 |
| | 222 | SHUTDOWN_MSG: Shutting down NameNode at 主機一 |
| 227 | 223 | ************************************************************/ |
| 228 | 224 | }}} |
| … |
… |
|
| 232 | 228 | * bin/start-dfs.sh腳本會參照namenode上${HADOOP_CONF_DIR}/slaves文件的內容,在所有列出的slave上啟動datanode。 |
| 233 | 229 | |
| 234 | | * 在Node 1 上,執行下面的命令啟動HDFS: |
| | 230 | * 在"主機一" 上,執行下面的命令啟動HDFS: |
| 235 | 231 | |
| 236 | 232 | {{{ |
| … |
… |
|
| 240 | 236 | |
| 241 | 237 | ------ |
| 242 | | * http://node01:50070/ - Hadoop DFS 狀態 |
| | 238 | * http://主機一:50070/ - Hadoop DFS 狀態 |
| 243 | 239 | * [[Image(datanode.png)]] |
| 244 | 240 | ------ |
| 245 | 241 | |
| 246 | | * ps: 然而JobTracker還沒啟動,因此 http://node01:50030/ 網頁無法顯示 |
| | 242 | * ps: 然而JobTracker還沒啟動,因此 http://主機一:50030/ 網頁無法顯示 |
| 247 | 243 | |
| 248 | 244 | * bin/start-mapred.sh腳本會參照jobtracker上${HADOOP_CONF_DIR}/slaves文件的內容,在所有列出的slave上啟動tasktracker。 |
| 249 | 245 | |
| 250 | | * 在Node 1執行下面的命令啟動Map/Reduce: |
| | 246 | * 在"主機一"執行下面的命令啟動Map/Reduce: |
| 251 | 247 | |
| 252 | 248 | {{{ |
| … |
… |
|
| 256 | 252 | * 啟動之後, jobtracker也正常運作囉! |
| 257 | 253 | ------ |
| 258 | | * http://node01:50030/ - Hadoop 管理介面 |
| | 254 | * http://主機一:50030/ - Hadoop 管理介面 |
| 259 | 255 | * [[Image(job.png)]] |
| 260 | 256 | ------ |
| … |
… |
|
| 262 | 258 | == step 10. 停止hadoop == |
| 263 | 259 | |
| 264 | | * 在Node 1 上,執行下面的命令停止HDFS: |
| | 260 | * 在"主機一" 上,執行下面的命令停止HDFS: |
| 265 | 261 | {{{ |
| 266 | 262 | /opt/hadoop$ bin/stop-dfs.sh |
| … |
… |
|
| 268 | 264 | * bin/stop-dfs.sh腳本會參照namenode上${HADOOP_CONF_DIR}/slaves文件的內容,在所有列出的slave上停止namenode |
| 269 | 265 | |
| 270 | | * 在Node 1 上,執行下面的命令停止Map/Reduce: |
| | 266 | * 在"主機一" 上,執行下面的命令停止Map/Reduce: |
| 271 | 267 | {{{ |
| 272 | 268 | /opt/hadoop$ bin/stop-mapred.sh |
| … |
… |
|
| 276 | 272 | == 練習 == |
| 277 | 273 | * 看 conf/hadoop-default.xml 的更多內容 |
| 278 | | * 和別人組隊,組成4台node的cluster,其中Node 1 只當 namenode ,Node 2 只當 jobtracker,而node3, node4 兩台電腦則身兼 datanode及tasktracker的工作。 |
| | 274 | * 和別人組隊,組成4台node的cluster,其中"主機一" 只當 namenode ,"主機二" 只當 jobtracker,而node3, node4 兩台電腦則身兼 datanode及tasktracker的工作。 |