MapReduce調試常見情況
Idea是一款很贊的IDE,結合Hadoop可以做本地測試+遠程調試。
首先,我們知道針對MapReduce有以下2種情況。
- 使用本地Hadoop執行任務,前提是數據量要小,否則,速度會很慢。
- 使用服務器上的Hadoop集群執行任務,但因為調試階段,不知道代碼邏輯是否ok,故不確定長時間跑出來的結果是否符合要求。
我的調試方法
根據以上兩種情況,我的方法是
- 首先,在編寫MapReduce階段,使用少量的數據樣本做輸入,用本地Hadoop快速跑任務,以此檢驗MapReduce的邏輯是否正確。
- 其次,檢驗成功后,生成jar包,提交到Hadoop集群,使用中小數據再次進行驗證,最后使用于生產環境。
步驟1很好操作,本地安裝好Idea和Hadoop,指定輸入即可。
步驟2如果按照從上傳到執行,一路手動操作,會有一系列重復的工作,很是麻煩。這里推薦借助maven的verify方法,使該過程自動化執行。參考做法
首先編寫兩個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文件中命令進行操作,在命令界面可以看到執行結果,這樣我們就完成了調試自動化過程。
小結
本人雖不是數據工程師,但本著一切從簡的原則,參考前輩的經驗,使重復性的工作能夠自動化,提高自身的工作效率。