手把手教hadoop2.5.1+eclipse開發調試環境搭建(2)

來源:互聯網
上載者:User

標籤:hadoop   mapreduce   debug   調試   hdfs   

前一篇博文我們搭建了好了運行環境,這篇小文我們開始搭建開發調試環境。這才是真正的精華,是無數血淚鑄就的!


4、eclipse,又見eclipse

這個我想只要是做java的沒有不熟悉,因此我就不再多說了,一切向http://www.eclipse.org索取。

注意,這裡的eclipse環境安裝在虛擬機器中哦,別裝錯地方了!


5、安裝maven環境

去maven.apache.org上下載maven3,解壓到/home(因為/home一般是資料盤,裝在這裡不佔系統硬碟的空間)。配置~/.bash_profile,修改PATH

PATH=$PATH:/home/maven3/bin/

然後 source ~/.bash_profile,使環境變數生效。

執行mvn -version,看看是否配置成功了。

因為repo.maven.org/maven2在國外訪問太慢,最後設定一個本地鏡像,我使用的是oschina的鏡像,請參考:http://maven.oschina.net/help.html


二、調試mapreduce代碼

1、搞一個簡單的Hadoop MapReduce例子

首先我們在eclipse中建立一個maven工程,直接用簡單模板就可以,修改pom.xml添加依賴:

<dependency>    <groupId>org.apache.hadoop</groupId>    <artifactId>hadoop-client</artifactId>    <version>2.5.1</version></dependency>


然後參考:http://www.cnblogs.com/xia520pi/archive/2012/06/04/2534533.html來寫一個簡單的mapreduce程式。當然,他用了hadoop-eclipse-plugin,這個東東配置起來狂複雜,不建議大家使用,直接使用命令列方式,不但可以鍛煉對hadoop命令的熟練度,而且還會省很多事情。我是為了省事,直接使用了他的第一個Dedup例子,兩個輸入檔案樣本和一個Dedup類。

先用bin/hadoop fs -mkdir /user/root/dedup_in 建立HDFS上的目錄。

兩個樣本資料可以放在兩個txt檔案中,比如in.txt和in1.txt,名字隨意,放在/home/temp/目錄中,然後用bin/hadoop dfs -copyFromLocal /home/temp /user/root/dedup_in上傳到HDFS中,資料準備完成。

在命令列執行mvn install 編譯打包這個程式到jar,然後在命令列輸入:

bin/hadoop jar 工程目錄/target/xxx.jar [package].Dedup

就可以運行一個mapreduce了,當然,你要先用sbin/start-all.sh啟動hadoop才行。

2、修改Dedup類

為了本地追蹤調試mapreduce,我們還需要改造一下Dedup類,主要是修改main函數,在Configuration conf = new Configuration()之後增加幾行代碼:

Configuration conf = new Configuration();conf.addResource("classpath:mapred-site.xml");conf.set("fs.defaultFS", "hdfs://虛擬機器IP:8020");conf.set("mapreduce.framework.name", "yarn");conf.set("yarn.resourcemanager.address", "虛擬機器IP:8032");conf.set("mapred.remote.os", "Linux");conf.set("hadoop.job.ugi", "hadoop,hadoop");


3、創造一個本地運行時配置

在src/main/resources下增加一個mapred-site.xml檔案,用於配置運行時的hadoop參數:

<configuration>    <property>        <name>mapreduce.framework.name</name>        <value>yarn</value>    </property>    <property>        <name>mapred.child.java.opts</name>        <value>-Xmx800m -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000</value>    </property>    <property>        <name>mapreduce.jobtracker.staging.root.dir</name>        <value>/tmp</value>    </property>    <property>        <name>yarn.app.mapreduce.am.staging-dir</name>        <value>/tmp</value>    </property>    <property>        <name>mapreduce.framework.name</name>        <value>local</value>    </property>    <property>        <name>mapreduce.jobtracker.address</name>        <value>local</value>    </property>    <property>        <name>mapred.job.tracker</name>        <value>local</value>    </property></configuration>


注意:-Xmx800m -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000中的address=8000可以配置一個不被佔用的連接埠號碼,以防此連接埠已被佔用。

4、增加一個LocalJob類

這個類是為了在本地模式下,協助hadoop-mapreduce-client發布jar用的,代碼如下:

import java.io.IOException;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.mapred.JobConf;import org.apache.hadoop.mapreduce.Job;/** * @author root * */public class LocalJob extends Job {public LocalJob() throws IOException {super();}public LocalJob(Configuration conf, String jobName) throws IOException {super(conf, jobName);}public LocalJob(Configuration conf) throws IOException {super(conf);}public static LocalJob getInstance(Configuration conf, String jobName) throws IOException{JobConf jobConf = new JobConf(conf);LocalJob job=new LocalJob(jobConf);return job;}public void setJarByClass(Class<?> clazz){super.setJarByClass(clazz);conf.setJar("file:///工程目錄/target/xxx.jar");}}

修改Dedup類main函數Job job=new Job(conf,"Data Deduplication")這一行為:

Job job = LocalJob.getInstance(conf, "Data Deduplication");

5、在eclipse的Debug配置中增加一個Remote Java Application執行個體debug8000,遠程連接埠號碼設為8000,這就是我們前面在mapred-site.xml中配置那個。然後再在命令列中執行一次mvn install,用於編譯jar檔案。

6、在Dedup類的map或reduce代碼中設定斷點,以application形式runDedup類,注意不是Debug方式,而是Run方式。如果這時報dedup_out目錄已經存在,就用 bin/hadoop fs -rm -r /user/root/dedup_out刪除輸出目錄

7、如果看到Dedup類正常啟動了,沒有報錯,但停止不動了,這時不要奇怪,因為你剛才設定的那個斷點生效了。這時,你要在運行debug8000這個Remote Java Application,在Eclipse Debug透視圖中就能看到我們剛才設定的斷點,並且直接跳到我們設定的那一行!


如果你一步一步都完成了,祝賀你!你已經開啟了Hadoop開發的大門了!




手把手教hadoop2.5.1+eclipse開發調試環境搭建(2)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.