Changes between Version 2 and Version 3 of waue/2009/0822
- Timestamp:
- Aug 19, 2009, 12:13:39 PM (16 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
waue/2009/0822
v2 v3 3 3 #!html 4 4 <div style="text-align: center;"><big 5 style="font-weight: bold;"><big><big> hadoop 0.20 程式開發 </big></big></big></div> 6 <div style="text-align: center;"> <big>eclipse plugin + Makefile</big> </div> 7 }}} 8 = 零. 前言 = 9 * 開發hadoop 需要用到許多的物件導向語法,包括繼承關係、介面類別,而且需要匯入正確的classpath,否則寫hadoop程式只是打字練習... 10 * 用類 vim 來處理這種複雜的程式,有可能會變成一場惡夢,因此用eclipse開發,搭配mapreduce-plugin會事半功倍。 11 * 早在hadoop 0.19~0.16之間的版本,筆者就試過各個plugin,每個版本的plugin都確實有大大小小的問題,如:hadoop plugin 無法正確使用、無法run as mapreduce。hadoop0.16搭配IBM的hadoop_plugin 可以提供完整的功能,但是,老兵不死,只是凋零... 12 * 子曰:"逝者如斯夫,不捨晝夜",以前寫的文件也落伍了,要跟上潮流,因此此篇的重點在:'''用eclipse 3.4.2 開發hadoop 0.20程式,並且測試撰寫的程式運作在hadoop平台上''' 13 * 以下是我的作法,如果你有更好的作法,或有需要更正的地方,請與我聯絡 14 15 || 單位 || 作者 || Mail || 16 || 國家高速網路中心-格網技術組 || Wei-Yu Chen || waue @ nchc.org.tw || 17 18 * Last Update: 2009/06/25 5 style="font-weight: bold;"><big><big> hadoop 程式開發 (eclipse plugin) </big></big></big></div> 6 }}} 7 = 零. 環境配置 = 8 19 9 20 10 == 0.1 環境說明 == 21 11 * ubuntu 8.10 22 12 * sun-java-6 23 * eclipse 3.4.2 24 * hadoop 0.20.0 13 * [http://www.java.com/zh_TW/download/linux_manual.jsp?locale=zh_TW&host=www.java.com:80 java 下載處] 14 * [https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=jdk-6u10-docs-oth-JPR@CDS-CDS_Developer JavaDoc ] 15 * eclipse 3.3.2 16 * eclipse 各版本下載點 [http://archive.eclipse.org/eclipse/downloads/] 17 * hadoop 0.18.3 18 * hadoop 各版本下載點 [http://ftp.twaren.net/Unix/Web/apache/hadoop/core/] 19 25 20 == 0.2 目錄說明 == 26 * 使用者:waue 27 * 使用者家目錄: /home/waue 28 * 專案目錄 : /home/waue/workspace 21 22 * 使用者:hadoop 23 * 使用者家目錄: /home/hadooper 24 * 專案目錄 : /home/hadooper/workspace 29 25 * hadoop目錄: /opt/hadoop 26 30 27 = 一、安裝 = 31 28 … … 44 41 1 將javadoc (jdk-6u10-docs.zip) 下載下來 45 42 [https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=jdk-6u10-docs-oth-JPR@CDS-CDS_Developer 下載點] 46 [[Image( 1-1.png)]]43 [[Image(wiki:waue:2009:0617:1-1.png)]] 47 44 48 45 2 下載完後將檔案放在 /tmp/ 下 … … 56 53 == 1.2. ssh 安裝設定 == 57 54 58 {{{59 $ apt-get install ssh60 $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa61 $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys62 $ ssh localhost63 }}}64 65 執行ssh localhost 沒有出現詢問密碼的訊息則無誤66 55 67 56 == 1.3. 安裝hadoop == 68 57 69 安裝hadoop0.20到/opt/並取目錄名為hadoop 70 58 59 == 1.4. 安裝eclipse == 60 61 * 62 63 64 * 取得檔案 eclipse 3.3.2 檔並放家目錄後,執行下面指令: 65 71 66 {{{ 72 67 $ cd ~ 73 $ wget http://apache.ntu.edu.tw/hadoop/core/hadoop-0.20.0/hadoop-0.20.0.tar.gz 74 $ tar zxvf hadoop-0.20.0.tar.gz 75 $ sudo mv hadoop-0.20.0 /opt/ 76 $ sudo chown -R waue:waue /opt/hadoop-0.20.0 77 $ sudo ln -sf /opt/hadoop-0.20.0 /opt/hadoop 78 }}} 79 80 * 編輯 /opt/hadoop/conf/hadoop-env.sh 81 82 {{{ 83 #!sh 84 export JAVA_HOME=/usr/lib/jvm/java-6-sun 85 export HADOOP_HOME=/opt/hadoop 86 export PATH=$PATH:/opt/hadoop/bin 87 }}} 88 89 * 編輯 /opt/hadoop/conf/core-site.xml 90 91 {{{ 92 #!sh 93 <configuration> 94 <property> 95 <name>fs.default.name</name> 96 <value>hdfs://localhost:9000</value> 97 </property> 98 <property> 99 <name>hadoop.tmp.dir</name> 100 <value>/tmp/hadoop/hadoop-${user.name}</value> 101 </property> 102 </configuration> 103 104 }}} 105 106 * 編輯 /opt/hadoop/conf/hdfs-site.xml 107 108 {{{ 109 #!sh 110 <configuration> 111 <property> 112 <name>dfs.replication</name> 113 <value>1</value> 114 </property> 115 </configuration> 116 }}} 117 118 * 編輯 /opt/hadoop/conf/mapred-site.xml 119 120 {{{ 121 #!sh 122 <configuration> 123 <property> 124 <name>mapred.job.tracker</name> 125 <value>localhost:9001</value> 126 </property> 127 </configuration> 128 }}} 129 130 * 啟動 131 {{{ 132 $ cd /opt/hadoop 133 $ source /opt/hadoop/conf/hadoop-env.sh 134 $ hadoop namenode -format 135 $ start-all.sh 136 $ hadoop fs -put conf input 137 $ hadoop fs -ls 138 }}} 139 140 * 沒有錯誤訊息則代表無誤 141 142 == 1.4. 安裝eclipse == 143 144 * 在此提供兩個方法來下載檔案 145 * 方法一:下載 [http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/R-3.4.2-200902111700/eclipse-SDK-3.4.2-linux-gtk.tar.gz eclipse SDK 3.4.2 Classic],並且放這檔案到家目錄 146 * 方法二:貼上指令 147 {{{ 148 $ cd ~ 149 $ wget http://ftp.cs.pu.edu.tw/pub/eclipse/eclipse/downloads/drops/R-3.4.2-200902111700/eclipse-SDK-3.4.2-linux-gtk.tar.gz 150 }}} 151 152 * eclipse 檔已下載到家目錄後,執行下面指令: 153 154 {{{ 155 $ cd ~ 156 $ tar -zxvf eclipse-SDK-3.4.2-linux-gtk.tar.gz 68 $ tar -zxvf eclipse-SDK-3.3.2-linux-gtk.tar.gz 157 69 $ sudo mv eclipse /opt 158 70 $ sudo ln -sf /opt/eclipse/eclipse /usr/local/bin/ 159 160 71 }}} 161 72 162 73 = 二、 建立專案 = 163 74 164 == 2.1 安裝hadoop 的 eclipse plugin ==165 166 * 匯入hadoop 0.20.0eclipse plugin75 == 2.1 安裝hadoop 的 eclipse plugin == 76 77 * 匯入hadoop eclipse plugin 167 78 168 79 {{{ 169 80 $ cd /opt/hadoop 170 $ sudo cp /opt/hadoop/contrib/eclipse-plugin/hadoop-0.20.0-eclipse-plugin.jar /opt/eclipse/plugins 171 }}} 81 $ sudo cp /opt/hadoop/contrib/eclipse-plugin/hadoop-0.18.3-eclipse-plugin.jar /opt/eclipse/plugins 82 }}} 83 84 補充: 可斟酌參考eclipse.ini內容(非必要) 172 85 173 86 {{{ … … 175 88 }}} 176 89 177 * 可斟酌參考eclipse.ini內容(非必要)178 179 90 {{{ 180 91 #!sh … … 201 112 202 113 一開始會出現問你要將工作目錄放在哪裡:在這我們用預設值 203 [[Image( 2-1.png)]]114 [[Image(wiki:waue:2009:0617:2-1.png)]] 204 115 ------- 205 116 … … 212 123 || window -> || open pers.. -> || other.. -> || map/reduce|| 213 124 214 [[Image(wi n-open-other.png)]]125 [[Image(wiki:waue:2009:0617:win-open-other.png)]] 215 126 216 127 ------- 217 128 218 129 設定要用 Map/Reduce 的視野 219 [[Image( 2-2.png)]]130 [[Image(wiki:waue:2009:0617:2-2.png)]] 220 131 221 132 --------- 222 133 223 134 使用 Map/Reduce 的視野後的介面呈現 224 [[Image( 2-3.png)]]135 [[Image(wiki:waue:2009:0617:2-3.png)]] 225 136 226 137 -------- … … 229 140 230 141 || file -> || new -> || project -> || Map/Reduce -> || Map/Reduce Project -> || next || 231 [[Image( file-new-project.png)]]142 [[Image(wiki:waue:2009:0617:file-new-project.png)]] 232 143 233 144 -------- … … 235 146 建立mapreduce專案(1) 236 147 237 [[Image( 2-4.png)]]148 [[Image(wiki:waue:2009:0617:2-4.png)]] 238 149 239 150 ----------- … … 247 158 }}} 248 159 249 [[Image( 2-4-2.png)]]160 [[Image(wiki:waue:2009:0617:2-4-2.png)]] 250 161 251 162 … … 260 171 Step1. 右鍵點選project的properties做細部設定 261 172 262 [[Image( 2-5.png)]]173 [[Image(wiki:waue:2009:0617:2-5.png)]] 263 174 264 175 ---------- … … 267 178 268 179 hadoop的javadoc的設定(1) 269 [[Image( 2-5-1.png)]]270 271 * java Build Path -> Libraries -> hadoop -0.20.0-ant.jar272 * java Build Path -> Libraries -> hadoop -0.20.0-core.jar273 * java Build Path -> Libraries -> hadoop -0.20.0-tools.jar274 * 以 hadoop -0.20.0-core.jar 的設定內容如下,其他依此類推180 [[Image(wiki:waue:2009:0617:2-5-1.png)]] 181 182 * java Build Path -> Libraries -> hadoop0.18.3-ant.jar 183 * java Build Path -> Libraries -> hadoop0.18.3-core.jar 184 * java Build Path -> Libraries -> hadoop0.18.3-tools.jar 185 * 以 hadoop0.18.3-core.jar 的設定內容如下,其他依此類推 275 186 276 187 {{{ 277 188 #!sh 278 source ...-> 輸入:/opt/opt/hadoop -0.20.0/src/core189 source ...-> 輸入:/opt/opt/hadoop0.18.3/src/core 279 190 javadoc ...-> 輸入:file:/opt/hadoop/docs/api/ 280 191 }}} … … 282 193 ------------ 283 194 Step3. hadoop的javadoc的設定完後(2) 284 [[Image( 2-5-2.png)]]195 [[Image(wiki:waue:2009:0617:2-5-2.png)]] 285 196 286 197 ------------ … … 289 200 * javadoc location -> 輸入:file:/usr/lib/jvm/java-6-sun/docs/api/ 290 201 291 [[Image( 2-5-3.png)]]202 [[Image(wiki:waue:2009:0617:2-5-3.png)]] 292 203 293 204 ----- … … 299 210 -------- 300 211 Step1. 視窗右下角黃色大象圖示"Map/Reduce Locations tag" -> 點選齒輪右邊的藍色大象圖示: 301 [[Image( 2-6.png)]]212 [[Image(wiki:waue:2009:0617:2-6.png)]] 302 213 303 214 ------------- 304 215 Step2. 進行eclipse 與 hadoop 間的設定(2) 305 [[Image( 2-6-1.png)]]216 [[Image(wiki:waue:2009:0617:2-6-1.png)]] 306 217 307 218 {{{ … … 316 227 317 228 設定完後,可以看到下方多了一隻藍色大象,左方展開資料夾也可以秀出在hdfs內的檔案結構 318 [[Image( 2-6-2.png)]]229 [[Image(wiki:waue:2009:0617:2-6-2.png)]] 319 230 ------------- 320 231 … … 322 233 323 234 * 之前在eclipse上已經開了個專案icas,因此這個目錄在: 324 * /home/ waue/workspace/icas235 * /home/hadooper/workspace/icas 325 236 * 在這個目錄內有兩個資料夾: 326 237 * src : 用來裝程式原始碼 … … 334 245 335 246 || File -> || new -> || mapper || 336 [[Image( file-new-mapper.png)]]247 [[Image(wiki:waue:2009:0617:file-new-mapper.png)]] 337 248 338 249 ----------- … … 340 251 2. create 341 252 342 [[Image( 3-1.png)]]253 [[Image(wiki:waue:2009:0617:3-1.png)]] 343 254 {{{ 344 255 #!sh … … 379 290 380 291 建立mapper.java後,貼入程式碼 381 [[Image( 3-2.png)]]292 [[Image(wiki:waue:2009:0617:3-2.png)]] 382 293 383 294 ------------ … … 388 299 389 300 * File -> new -> reducer 390 [[Image( file-new-reducer.png)]]301 [[Image(wiki:waue:2009:0617:file-new-reducer.png)]] 391 302 392 303 ------- 393 304 2. create 394 [[Image( 3-3.png)]]305 [[Image(wiki:waue:2009:0617:3-3.png)]] 395 306 396 307 {{{ … … 431 342 432 343 * File -> new -> Map/Reduce Driver 433 [[Image( file-new-mr-driver.png)]]344 [[Image(wiki:waue:2009:0617:file-new-mr-driver.png)]] 434 345 ---------- 435 346 … … 439 350 440 351 建立WordCount.java,此檔用來驅動mapper 與 reducer,因此選擇 Map/Reduce Driver 441 [[Image( 3-4.png)]]352 [[Image(wiki:waue:2009:0617:3-4.png)]] 442 353 ------------ 443 354 … … 493 404 494 405 三個檔完成後並存檔後,整個程式建立完成 495 [[Image( 3-5.png)]]406 [[Image(wiki:waue:2009:0617:3-5.png)]] 496 407 497 408 ------- … … 509 420 = 四、測試範例程式 = 510 421 422 == 4.1 在eclipse上操作 == 423 511 424 * 由於hadoop 0.20 此版本的eclipse-plugin依舊不完整 ,如: 512 * 右鍵點選WordCount.java -> run as -> run on Hadoop :沒有效果425 * 右鍵點選WordCount.java -> run as -> run on Hadoop 513 426 514 [[Image(run-on-hadoop.png)]] 515 516 * 因此,4.1 提供一個eclipse 上解除 run-on-hadoop 封印的方法。而4.2 則是避開run-on-hadoop 這個功能,用command mode端指令的方法執行。 517 518 519 == 4.1 解除run-on-hadoop封印 == 520 521 有一熱心的hadoop使用者提供一個能讓 run-on-hadoop 這個功能恢復的方法。 522 523 原因是hadoop 的 eclipse-plugin 也許是用eclipse europa 這個版本開發的,而eclipse 的各版本 3.2 , 3.3, 3.4 間也都有或多或少的差異性存在。 524 525 因此如果先用eclipse europa 來建立一個新專案,之後把europa的eclipse這個版本關掉,換用eclipse 3.4開啟,之後這個專案就能用run-on-mapreduce 這個功能囉! 526 527 有興趣的話可以試試!(感謝逢甲資工所謝同學) 528 529 == 4.2 運用終端指令 == 427 [[Image(wiki:waue:2009:0617:run-on-hadoop.png)]] 428 429 430 == 4.2 產生專屬於自己的jar檔 == 431 432 * eclipse 可以產生出jar檔 : 433 434 File -> Export -> java -> JAR file 435 -> next -> 436 -------- 437 選擇要匯出的專案 -> 438 jarfile: /home/hadooper/mytest.jar -> 439 next -> 440 -------- 441 next -> 442 -------- 443 main class: 選擇有Main的class -> 444 Finish 445 -------- 446 447 * 以上的步驟就可以在/home/hadooper/ 產生出你的 mytest.jar 448 * 不過程式常常修改,每次都做這些動作也很累很煩,讓我們來體驗一下'''用指令比用圖形介面操作還方便'''吧 449 530 450 === 4.2.1 產生Makefile 檔 === 531 451 {{{ 532 452 533 $ cd /home/ waue/workspace/icas/453 $ cd /home/hadooper/workspace/icas/ 534 454 $ gedit Makefile 535 455 }}} … … 577 497 578 498 {{{ 579 $ cd /home/ waue/workspace/icas/499 $ cd /home/hadooper/workspace/icas/ 580 500 $ make 581 501 Usage: … … 606 526 }}} 607 527 608 * make run基本上能正確無誤的運作到結束,因此代表我們在eclipse編譯的程式可以順利在hadoop0. 20的平台上運行。528 * make run基本上能正確無誤的運作到結束,因此代表我們在eclipse編譯的程式可以順利在hadoop0.18.3的平台上運行。 609 529 610 530 * 而回到eclipse視窗,我們可以看到下方視窗run完的job會呈現出來;左方視窗也多出output資料夾,part-r-00000就是我們的結果檔 611 531 612 [[Image( 4-1.png)]]532 [[Image(wiki:waue:2009:0617:4-1.png)]] 613 533 ------ 614 534 * 因為有設定完整的javadoc, 因此可以得到詳細的解說與輔助 615 [[Image( 4-2.png)]]535 [[Image(wiki:waue:2009:0617:4-2.png)]] 616 536 617 537 === make output === … … 632 552 633 553 * 搭配eclipse ,我們可以更有效率的開發hadoop 634 * hadoop 0.20 與之前的版本api以及設定都有些改變,可以看 [wiki: waue/2009/0617 hadoop 0.20 coding (eclipse )]554 * hadoop 0.20 與之前的版本api以及設定都有些改變,可以看 [wiki:hadooper/2009/0617 hadoop 0.20 coding (eclipse )]