close
Warning:
Can't synchronize with repository "(default)" (Unsupported version control system "svn": /usr/lib/python2.7/dist-packages/libsvn/_delta.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 (16 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的工作。 |