背景
由于Hadoop项目多数是比较大的项目,因此我们选择使用构建工具来构建Hadoop项目,这里我们使用的是maven。当然也可以使用Gradle等比较流行的构建工具
构建过程
这里总结一下我使用Intellij idea开发maven项目的过程。
创建maven工程
首先新建一个maven项目
不需要勾选Create from archetype,根据项目填写GroupId和ArtifactId,然后填写工程名及工程路径。
Finish之后我们就创建出了一个maven项目
配置pom.xml
接下来添加依赖,我使用的是最新的稳定版本Hadoop 2.7.4
需要添加以下依赖:
- hadoop-common
- hadoop-hdfs
- hadoop-mapreduce-client-core
- hadoop-mapreduce-client-jobclient
- log4j
修改后的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>mavenHadoop</groupId>
<artifactId>mavenHadoop</artifactId>
<version>1.0-SNAPSHOT</version>
<repositories>
<repository>
<id>apache</id>
<url>http://maven.apache.org</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.4</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.7.4</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-core</artifactId>
<version>2.7.4</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-jobclient</artifactId>
<version>2.7.4</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
</project>
配置log4j
配置log4j,用于打印日志,方便调试
log4j.rootLogger = debug,stdout
### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
配置好之后,如果没有启动Hadoop,需要先启动Hadoop。
配置 Run/Debug Configurations
启动Hadoop后,配置运行参数。选择main函数所在类,填写输入文件和输出路径。(详细见上一篇文章:java程序员的大数据之路(2):创建第一个Hadoop程序)
可以现在本地运行WordCount,运行前要保证输出路径不存在,为避免每次都要删除输出路径,可以在代码中实现。
import java.io.File;
public class FileUtil {
public static boolean deleteDir(String path) {
File dir = new File(path);
if(dir.exists()) {
for(File f:dir.listFiles()) {
if(f.isDirectory()) {
deleteDir(f.getName());
}else {
f.delete();
}
}
dir.delete();
return true;
}else {
System.out.printf("file do not exist");
return false;
}
}
}
读取HDFS文件
如果上一步中输入路径配置为HDFS的文件路径,就可以直接读取HDFS中的文件,但是FileUtil类不会起作用。编码调用HDFS的过程我会在之后进行分享。