hadoop:将WordCount打包成独立运行的jar包

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

b.\META-INF\MANIFEST.MF内容

Manifest-Version: 1.0
Built-By: jimmy
Build-Jdk: 1.7.0_09
Class-Path: lib/hadoop-common-2.6.0.jar lib/hadoop-annotations-2.6.0.j
 ar lib/guava-11.0.2.jar lib/commons-math3-3.1.1.jar lib/xmlenc-0.52.j
 ar lib/commons-httpclient-3.1.jar lib/commons-codec-1.4.jar lib/commo
 ns-io-2.4.jar lib/commons-net-3.1.jar lib/commons-collections-3.2.1.j
 ar lib/servlet-api-2.5.jar lib/jetty-6.1.26.jar lib/jetty-util-6.1.26
 .jar lib/jersey-core-1.9.jar lib/jersey-json-1.9.jar lib/jettison-1.1
 .jar lib/jaxb-impl-2.2.3-1.jar lib/jaxb-api-2.2.2.jar lib/stax-api-1.
 0-2.jar lib/activation-1.1.jar lib/jackson-jaxrs-1.8.3.jar lib/jackso
 n-xc-1.8.3.jar lib/jersey-server-1.9.jar lib/asm-3.1.jar lib/jasper-c
 ompiler-5.5.23.jar lib/jasper-runtime-5.5.23.jar lib/jsp-api-2.1.jar
 lib/commons-el-1.0.jar lib/commons-logging-1.1.3.jar lib/log4j-1.2.17
 .jar lib/jets3t-0.9.0.jar lib/httpclient-4.1.2.jar lib/httpcore-4.1.2
 .jar lib/java-xmlbuilder-0.4.jar lib/commons-lang-2.6.jar lib/commons
 -configuration-1.6.jar lib/commons-digester-1.8.jar lib/commons-beanu
 tils-1.7.0.jar lib/commons-beanutils-core-1.8.0.jar lib/slf4j-api-1.7
 .5.jar lib/slf4j-log4j12-1.7.5.jar lib/jackson-core-asl-1.9.13.jar li
 b/jackson-mapper-asl-1.9.13.jar lib/avro-1.7.4.jar lib/paranamer-2.3.
 jar lib/snappy-java-1.0.4.1.jar lib/protobuf-java-2.5.0.jar lib/gson-
 2.2.4.jar lib/hadoop-auth-2.6.0.jar lib/apacheds-kerberos-codec-2.0.0
 -M15.jar lib/apacheds-i18n-2.0.0-M15.jar lib/api-asn1-api-1.0.0-M20.j
 ar lib/api-util-1.0.0-M20.jar lib/curator-framework-2.6.0.jar lib/jsc
 h-0.1.42.jar lib/curator-client-2.6.0.jar lib/curator-recipes-2.6.0.j
 ar lib/jsr305-1.3.9.jar lib/htrace-core-3.0.4.jar lib/zookeeper-3.4.6
 .jar lib/commons-compress-1.4.1.jar lib/xz-1.0.jar lib/hadoop-hdfs-2.
 6.0.jar lib/commons-daemon-1.0.13.jar lib/netty-3.6.2.Final.jar lib/x
 ercesImpl-2.9.1.jar lib/xml-apis-1.3.04.jar lib/hadoop-mapreduce-clie
 nt-jobclient-2.6.0.jar lib/hadoop-mapreduce-client-common-2.6.0.jar l
 ib/hadoop-yarn-common-2.6.0.jar lib/hadoop-yarn-api-2.6.0.jar lib/jer
 sey-client-1.9.jar lib/jersey-guice-1.9.jar lib/hadoop-yarn-client-2.
 6.0.jar lib/hadoop-mapreduce-client-core-2.6.0.jar lib/hadoop-yarn-se
 rver-common-2.6.0.jar lib/hadoop-mapreduce-client-shuffle-2.6.0.jar l
 ib/hadoop-yarn-server-nodemanager-2.6.0.jar lib/leveldbjni-all-1.8.ja
 r lib/guice-servlet-3.0.jar lib/guice-3.0.jar lib/javax.inject-1.jar
 lib/aopalliance-1.0.jar lib/commons-cli-1.2.jar
Created-By: Apache Maven 3.2.3
Main-Class: cn.cnblogs.yjmyzz.WordCount
Archiver-Version: Plexus Archiver

View Code

运行截图:

时间: 2024-08-17 14:00:53

hadoop:将WordCount打包成独立运行的jar包的相关文章

java web start 运行的jar包可以接受键盘输入和用户交互吗

问题描述 java web start 运行的jar包可以接受键盘输入和用户交互吗 做了一个jar包,是基于cmd的一个小程序,需要根据用户不同的输入显示不同的界面,jar包 本身可以运行,但是通过java web start 下载运行后,不会等待用户输入,直接报错,也就是说当执行到读取键盘输入的时候没有阻塞,直接运行了

java打包成可执行的jar或者exe的详细步骤_java

下面介绍过程: 第一步:完成Java GUI程序在Eclipse下,程序能够正常运行. 第二步:准备清单文件(MANIFEST.MF) 方法1:直接拷贝其它能运行的JAR文件中的MANIFEST.MF进行修改方法2:利用IDE工具,如Eclipse在生成JAR文件时自动生成MANIFEST.MF内容如下: 复制代码 代码如下: Manifest-Version: 1.0Main-Class: manager.ui.MainFrameClass-Path: ./lib/spring.jar ./l

maven: 打包可运行的jar包(java application)及依赖项处理

IDE环境中,可以直接用exec-maven-plugin插件来运行java application,类似下面这样: 1 <plugin> 2 <groupId>org.codehaus.mojo</groupId> 3 <artifactId>exec-maven-plugin</artifactId> 4 <version>1.2.1</version> 5 <executions> 6 <execu

打包-使用fatjar制作的jar包如何调用?

问题描述 使用fatjar制作的jar包如何调用? 之前制作了一个jar包,中间不包含其他的jar文件,经大神指教,使用fatjar打包可以将里面的jar文件一并存入. 具体情况如下: 制作的jar文件是这样的:

java 做的桌面程序可以打包成EXE,但能打包成MSI安装吗?

问题描述 java 做的桌面程序可以打包成EXE,但能打包成MSI安装吗?如果可以,要怎么做,有没有什么好的免费的工具使用?我自己知道可以先打包成EXE,然后再用工具转换成MSI,但不知道JAVA桌面程序能不能打包成MSI来安装呢? 问题补充:liveHappy 写道 解决方案 我只找到一个.使用一个开源的组件(jdic)的包装器组件 ,把JNLP(Java Web Start)应用转换成本地安装程序,那么如果是windows系统的话包装成的就是msi,它仅仅为Web Start应用提供点击安装

java web-Java Web项目如何打包成安装文件

问题描述 Java Web项目如何打包成安装文件 开发完一个JavaWe项目,怎么把它打包成可运行文件,像安装文件一样!使程序能在其他地方运行,能退出! 解决方案 java项目打包成exe文件asp.net 开发的WEB项目和数据库打包成exe安装文件asp.net 开发的WEB项目和数据库怎样打包成exe安装文件 解决方案二: web 项目运行 需要web服务器 不是么 和 windows程序开发不一样.如果你是写的java 程序 可以打包成war包 在tomcat中以war包的方式运行

关于当程序打包成jar包后.spring资源文件未读取到的问题

问题描述 功能描述:现在我开发的一个服务端的程序,开启一个Socket监听,接受客户端的Socket连接,并将传入的信息存入数据库系统采用框架:Spring+Hibernate其中Spring的主要配置文件为ApplicationContext.xml然后每个模块中也一个spring的xml配置文件,这些配置文件是通过ApplicationContext.xml通过<importresource="classpath*:com/xxx/**/*.xml"/>标签导入进来的.

可运行jar包的几种打包/部署方式

java项目开发中,最终生成的jar,大概可分为二类,一类是一些通用的工具类(不包含main入口方法),另一类是可直接运行的jar包(有main入口方法),下面主要讲的是后者,要让一个jar文件可直接运行,通常有几下三种方式: 动工之前,先搭一个项目架子便于后面分析: 项目结构图:  这是一个gradle项目(当然,也可以换成ant项目或maven项目,这不重要),里面有二个模块,my-jar的DemoApp里提供了main入口方法,通常一个可运行的java项目,都会依赖其它一些jar包,所以另

二种jar包制作方法讲解(dos打包jar eclipse打包jar文件)_java

1.在dos下面打包jar文件 复制代码 代码如下: D:\jdk1.5.0_07\bin> jar  /help 用法:jar  {ctxu}[vfm0Mi]  [jar-文件]  [manifest-文件]  [-C  目录]  文件名  ... 选项: -c  创建新的存档 -t  列出存档内容的列表 -x  展开存档中的命名的(或所有的]文件 -u  更新已存在的存档 -v  生成详细输出到标准输出上 -f  指定存档文件名 -m  包含来自标明文件的标明信息 -0  只存储方式:未用Z