hadoop示例中的WordCount程序,很多教程上都是推荐以下二种运行方式:

1.将生成的jar包,复制到hadoop集群中的节点,然后运行

$HADOOP_HOME/bin/hadoop xxx.jar xxx.WordCount /input/xxx.txt /output

2.或者直接在IDE环境中调试(参见eclipse/intellij idea 远程调试hadoop 2.6.0)

 

但是生产环境中,更多的情况是:没有ide环境,且各应用最终生成的jar包部署在应用服务器上(应用服务器并非hadoop集群中的服务器节点),所以需要jar能独立运行并能连接到hadoop环境,以下是关键点:

1. pom.xml中将WordCount所依赖的jar包依赖项,全添加进来(这样最终运行时,这些jar包就不用依赖ide或hadoop运行环境)

2. 参考maven: 打包可运行的jar包(java application)及依赖项处理 一文将依赖的jar包导出,且通过maven插件自动修改MANIFEST.MF中的Main-Class信息

3. core-site.xml要复制到maven项目的resources目录下(这样打包后,xml会复制到classpath下,运行时,根据这个配置文件,WordCount就能知道去连哪里的hadoop)

4. 部署时,将最终生成的WordCount jar包及依赖的lib包,全上传到应用服务器

然后就能直接以类似

java -jar hadoop-helloworld.jar /jimmy/input/README.txt /jimmy/output 运行

 

最后附几个关键文件内容:

a. pom.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6 
 7     <groupId>cn.cnblogs.yjmyzz</groupId>
 8     <artifactId>hadoop-helloworld</artifactId>
 9     <version>1.0</version>
10 
11     <dependencies>
12         <dependency>
13             <groupId>org.apache.hadoop</groupId>
14             <artifactId>hadoop-common</artifactId>
15             <version>2.6.0</version>
16         </dependency>
17         <dependency>
18             <groupId>org.apache.hadoop</groupId>
19             <artifactId>hadoop-hdfs</artifactId>
20             <version>2.6.0</version>
21         </dependency>
22         <dependency>
23             <groupId>org.apache.hadoop</groupId>
24             <artifactId>hadoop-mapreduce-client-jobclient</artifactId>
25             <version>2.6.0</version>
26         </dependency>
27         <dependency>
28             <groupId>commons-cli</groupId>
29             <artifactId>commons-cli</artifactId>
30             <version>1.2</version>
31         </dependency>
32     </dependencies>
33 
34     <build>
35         <finalName>${project.artifactId}</finalName>
36 
37         <plugins>
38             <plugin>
39                 <groupId>org.apache.maven.plugins</groupId>
40                 <artifactId>maven-jar-plugin</artifactId>
41                 <configuration>
42                     <archive>
43                         <manifest>
44                             <mainClass>cn.cnblogs.yjmyzz.WordCount</mainClass>
45                             <addClasspath>true</addClasspath>
46                             <classpathPrefix>lib/</classpathPrefix>
47                         </manifest>
48                     </archive>
49                     <classesDirectory>
50                     </classesDirectory>
51                 </configuration>
52             </plugin>
53         </plugins>
54     </build>
55 
56     <!--mvn dependency:copy-dependencies -DoutputDirectory=target/lib-->
57 
58 </project>
View Code

相关文章: