Changes between Version 2 and Version 3 of waue/2009/0822


Ignore:
Timestamp:
Aug 19, 2009, 12:13:39 PM (15 years ago)
Author:
waue
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • waue/2009/0822

    v2 v3  
    33#!html
    44<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
    199
    2010 == 0.1 環境說明 ==
    2111 * ubuntu 8.10
    2212 * 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
    2520 == 0.2 目錄說明 ==
    26  * 使用者:waue
    27  * 使用者家目錄: /home/waue
    28  * 專案目錄 : /home/waue/workspace
     21
     22 * 使用者:hadoop
     23 * 使用者家目錄: /home/hadooper
     24 * 專案目錄 : /home/hadooper/workspace
    2925 * hadoop目錄: /opt/hadoop
     26
    3027 = 一、安裝 =
    3128
     
    4441 1 將javadoc (jdk-6u10-docs.zip) 下載下來
    4542 [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)]]
    4744 
    4845 2 下載完後將檔案放在 /tmp/ 下
     
    5653 == 1.2. ssh 安裝設定 ==
    5754
    58 {{{
    59 $ apt-get install ssh
    60 $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    61 $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    62 $ ssh localhost
    63 }}}
    64 
    65 執行ssh localhost 沒有出現詢問密碼的訊息則無誤
    6655
    6756 == 1.3. 安裝hadoop ==
    6857
    69 安裝hadoop0.20到/opt/並取目錄名為hadoop
    70 
     58
     59 == 1.4. 安裝eclipse ==
     60 
     61 *
     62
     63
     64 * 取得檔案 eclipse 3.3.2  檔並放家目錄後,執行下面指令:
     65 
    7166{{{
    7267$ 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
    15769$ sudo mv eclipse /opt
    15870$ sudo ln -sf /opt/eclipse/eclipse /usr/local/bin/
    159 
    16071}}}
    16172
    16273 = 二、 建立專案 =
    16374
    164 == 2.1 安裝hadoop 的 eclipse plugin ==
    165 
    166  * 匯入hadoop 0.20.0 eclipse plugin
     75 == 2.1 安裝hadoop 的 eclipse plugin ==
     76
     77 * 匯入hadoop eclipse plugin
    16778 
    16879{{{
    16980$ 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內容(非必要)
    17285
    17386{{{
     
    17588}}}
    17689
    177  * 可斟酌參考eclipse.ini內容(非必要)
    178  
    17990{{{
    18091#!sh
     
    201112
    202113一開始會出現問你要將工作目錄放在哪裡:在這我們用預設值
    203 [[Image(2-1.png)]]
     114[[Image(wiki:waue:2009:0617:2-1.png)]]
    204115-------
    205116
     
    212123|| window -> || open pers.. -> || other.. -> || map/reduce||
    213124
    214 [[Image(win-open-other.png)]]
     125[[Image(wiki:waue:2009:0617:win-open-other.png)]]
    215126
    216127-------
    217128
    218129設定要用 Map/Reduce 的視野
    219 [[Image(2-2.png)]]
     130[[Image(wiki:waue:2009:0617:2-2.png)]]
    220131
    221132---------
    222133
    223134使用 Map/Reduce 的視野後的介面呈現
    224 [[Image(2-3.png)]]
     135[[Image(wiki:waue:2009:0617:2-3.png)]]
    225136
    226137--------
     
    229140
    230141 || 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)]]
    232143
    233144--------
     
    235146建立mapreduce專案(1)
    236147
    237 [[Image(2-4.png)]]
     148[[Image(wiki:waue:2009:0617:2-4.png)]]
    238149
    239150-----------
     
    247158}}}
    248159
    249 [[Image(2-4-2.png)]]
     160[[Image(wiki:waue:2009:0617:2-4-2.png)]]
    250161
    251162
     
    260171 Step1. 右鍵點選project的properties做細部設定
    261172
    262 [[Image(2-5.png)]]
     173[[Image(wiki:waue:2009:0617:2-5.png)]]
    263174
    264175----------
     
    267178
    268179hadoop的javadoc的設定(1)
    269 [[Image(2-5-1.png)]]
    270 
    271  * java Build Path -> Libraries -> hadoop-0.20.0-ant.jar
    272  * java Build Path -> Libraries -> hadoop-0.20.0-core.jar
    273  * java Build Path -> Libraries ->  hadoop-0.20.0-tools.jar
    274    * 以 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 的設定內容如下,其他依此類推
    275186   
    276187{{{
    277188#!sh
    278 source ...-> 輸入:/opt/opt/hadoop-0.20.0/src/core
     189source ...-> 輸入:/opt/opt/hadoop0.18.3/src/core
    279190javadoc ...-> 輸入:file:/opt/hadoop/docs/api/
    280191}}}
     
    282193------------
    283194 Step3. hadoop的javadoc的設定完後(2)
    284 [[Image(2-5-2.png)]]
     195[[Image(wiki:waue:2009:0617:2-5-2.png)]]
    285196
    286197------------
     
    289200 * javadoc location -> 輸入:file:/usr/lib/jvm/java-6-sun/docs/api/
    290201 
    291 [[Image(2-5-3.png)]]
     202[[Image(wiki:waue:2009:0617:2-5-3.png)]]
    292203
    293204-----
     
    299210--------
    300211 Step1. 視窗右下角黃色大象圖示"Map/Reduce Locations tag" -> 點選齒輪右邊的藍色大象圖示:
    301 [[Image(2-6.png)]]
     212[[Image(wiki:waue:2009:0617:2-6.png)]]
    302213
    303214-------------
    304215 Step2. 進行eclipse 與 hadoop 間的設定(2)
    305 [[Image(2-6-1.png)]]
     216[[Image(wiki:waue:2009:0617:2-6-1.png)]]
    306217
    307218{{{
     
    316227
    317228設定完後,可以看到下方多了一隻藍色大象,左方展開資料夾也可以秀出在hdfs內的檔案結構
    318 [[Image(2-6-2.png)]]
     229[[Image(wiki:waue:2009:0617:2-6-2.png)]]
    319230-------------
    320231
     
    322233
    323234 * 之前在eclipse上已經開了個專案icas,因此這個目錄在:
    324    * /home/waue/workspace/icas
     235   * /home/hadooper/workspace/icas
    325236 * 在這個目錄內有兩個資料夾:
    326237   * src : 用來裝程式原始碼
     
    334245 
    335246 || File ->  || new ->  || mapper ||
    336 [[Image(file-new-mapper.png)]]
     247[[Image(wiki:waue:2009:0617:file-new-mapper.png)]]
    337248
    338249-----------
     
    340251 2. create
    341252 
    342 [[Image(3-1.png)]]
     253[[Image(wiki:waue:2009:0617:3-1.png)]]
    343254{{{
    344255#!sh
     
    379290
    380291建立mapper.java後,貼入程式碼
    381 [[Image(3-2.png)]]
     292[[Image(wiki:waue:2009:0617:3-2.png)]]
    382293
    383294------------
     
    388299
    389300 * File -> new -> reducer
    390 [[Image(file-new-reducer.png)]]
     301[[Image(wiki:waue:2009:0617:file-new-reducer.png)]]
    391302
    392303-------
    393304 2. create
    394 [[Image(3-3.png)]]
     305[[Image(wiki:waue:2009:0617:3-3.png)]]
    395306
    396307{{{
     
    431342
    432343 * File -> new -> Map/Reduce Driver
    433 [[Image(file-new-mr-driver.png)]]
     344[[Image(wiki:waue:2009:0617:file-new-mr-driver.png)]]
    434345----------
    435346
     
    439350
    440351建立WordCount.java,此檔用來驅動mapper 與 reducer,因此選擇 Map/Reduce Driver
    441 [[Image(3-4.png)]]
     352[[Image(wiki:waue:2009:0617:3-4.png)]]
    442353------------
    443354
     
    493404
    494405三個檔完成後並存檔後,整個程式建立完成
    495 [[Image(3-5.png)]]
     406[[Image(wiki:waue:2009:0617:3-5.png)]]
    496407
    497408-------
     
    509420 = 四、測試範例程式 =
    510421 
     422 == 4.1 在eclipse上操作 ==
     423 
    511424 * 由於hadoop 0.20 此版本的eclipse-plugin依舊不完整 ,如:
    512    * 右鍵點選WordCount.java -> run as -> run on Hadoop :沒有效果
     425   * 右鍵點選WordCount.java -> run as -> run on Hadoop
    513426   
    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 
     434File -> Export -> java -> JAR file
     435-> next ->
     436--------
     437選擇要匯出的專案 ->
     438jarfile: /home/hadooper/mytest.jar ->
     439next ->
     440--------
     441next ->
     442--------
     443main class: 選擇有Main的class   ->
     444Finish
     445--------
     446
     447 * 以上的步驟就可以在/home/hadooper/ 產生出你的 mytest.jar
     448 * 不過程式常常修改,每次都做這些動作也很累很煩,讓我們來體驗一下'''用指令比用圖形介面操作還方便'''吧
     449 
    530450 === 4.2.1 產生Makefile 檔 ===
    531451{{{
    532452
    533 $ cd /home/waue/workspace/icas/
     453$ cd /home/hadooper/workspace/icas/
    534454$ gedit Makefile
    535455}}}
     
    577497
    578498{{{
    579 $ cd /home/waue/workspace/icas/
     499$ cd /home/hadooper/workspace/icas/
    580500$ make
    581501Usage:
     
    606526}}}
    607527
    608  * make run基本上能正確無誤的運作到結束,因此代表我們在eclipse編譯的程式可以順利在hadoop0.20的平台上運行。
     528 * make run基本上能正確無誤的運作到結束,因此代表我們在eclipse編譯的程式可以順利在hadoop0.18.3的平台上運行。
    609529
    610530 * 而回到eclipse視窗,我們可以看到下方視窗run完的job會呈現出來;左方視窗也多出output資料夾,part-r-00000就是我們的結果檔
    611531 
    612 [[Image(4-1.png)]]
     532[[Image(wiki:waue:2009:0617:4-1.png)]]
    613533------
    614534 * 因為有設定完整的javadoc, 因此可以得到詳細的解說與輔助
    615 [[Image(4-2.png)]]
     535[[Image(wiki:waue:2009:0617:4-2.png)]]
    616536
    617537 === make output ===
     
    632552
    633553 * 搭配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 )]