MapReduce調(diào)試常見情況
Idea是一款很贊的IDE导饲,結合Hadoop可以做本地測試+遠程調(diào)試捞高。
首先氯材,我們知道針對MapReduce有以下2種情況。
- 使用本地Hadoop執(zhí)行任務棠枉,前提是數(shù)據(jù)量要小浓体,否則,速度會很慢辈讶。
- 使用服務器上的Hadoop集群執(zhí)行任務命浴,但因為調(diào)試階段,不知道代碼邏輯是否ok贱除,故不確定長時間跑出來的結果是否符合要求生闲。
我的調(diào)試方法
根據(jù)以上兩種情況,我的方法是
- 首先月幌,在編寫MapReduce階段碍讯,使用少量的數(shù)據(jù)樣本做輸入,用本地Hadoop快速跑任務扯躺,以此檢驗MapReduce的邏輯是否正確捉兴。
- 其次,檢驗成功后录语,生成jar包倍啥,提交到Hadoop集群,使用中小數(shù)據(jù)再次進行驗證澎埠,最后使用于生產(chǎn)環(huán)境虽缕。
步驟1很好操作,本地安裝好Idea和Hadoop蒲稳,指定輸入即可氮趋。
步驟2如果按照從上傳到執(zhí)行,一路手動操作江耀,會有一系列重復的工作剩胁,很是麻煩。這里推薦借助maven的verify方法祥国,使該過程自動化執(zhí)行昵观。參考做法
首先編寫兩個shell文件。
deplay.sh
#!/bin/sh
echo "deploy jar"
scp ../target/test-1.0-SNAPSHOT.jar hadoop@121.42.36.80:~/test/
echo "deploy run.sh"
scp run.sh hadoop@xxx.xxx.xxx.80:~/test/
echo "start run.sh"
ssh hadoop@xxx.xxx.xxx.80 "~/test/run.sh"
run.sh
echo "run hadoop task"
/usr/local/hadoop/hadoop-2.7.3/bin/hadoop jar /home/hadoop/test/test-1.0-SNAPSHOT.jar WordCount /input/* /output/
然后修改pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com</groupId>
<artifactId>test</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-core</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-jobclient</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-common</artifactId>
<version>2.7.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<id>hadoop remote run</id>
<phase>verify</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target name="test">
<exec dir="${basedir}/shell" executable="bash">
<arg value="deploy.sh"></arg>
</exec>
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
目前假設MapReduce已寫好系宫,但還沒生成jar包索昂。從命令界面(win用戶推薦cmder)進入項目目錄,使用mvn verify命令扩借,此時椒惨,在target目錄下會生成jar包,并按照shell文件中命令進行操作潮罪,在命令界面可以看到執(zhí)行結果康谆,這樣我們就完成了調(diào)試自動化過程领斥。
小結
本人雖不是數(shù)據(jù)工程師,但本著一切從簡的原則沃暗,參考前輩的經(jīng)驗月洛,使重復性的工作能夠自動化,提高自身的工作效率孽锥。