将SeqReader打包成可执行的jar包
SeqReader是我定义的一个读取SequenceFile文件,并将部分(key,value)打印到控制台窗口的类,其完整代码如下:
/**
* Created with IntelliJ IDEA.
* User: hadoop
* Date: 16-3-14
* Time: 上午9:57
* To change this template use File | Settings | File Templates.
*/
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.SequenceFile;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.DoubleWritable;
import org.apache.hadoop.io.ArrayWritable;
import org.apache.hadoop.util.ReflectionUtils; import java.io.IOException;
import java.net.URI; public class SeqReader {
public static void main(String[] args) throws IOException {
String uri=args[0];
//String uri="/home/hadoop/2016Test/SeqTest/10IntArray";
Configuration conf=new Configuration();
FileSystem fs =FileSystem.get(URI.create(uri),conf);
Path path=new Path(uri);
SequenceFile.Reader reader=null;
//DoubleWritable[] doubleWritableArray=new DoubleWritable[Integer.parseInt(args[1])]; /* for (int i=0;i<doubleWritableArray.length;++i){
doubleWritableArray[i]=new DoubleWritable(0.0);
}
*/
try {
reader=new SequenceFile.Reader(fs,path,conf);
IntWritable key =(IntWritable) ReflectionUtils.newInstance(reader.getKeyClass(), conf);
DoubleArrayWritable value=(DoubleArrayWritable)ReflectionUtils.newInstance(reader.getValueClass(),conf);
long position=reader.getPosition();
String[] sValue=null;
int index;
int counter=0;
StringBuilder sb=new StringBuilder();
while(reader.next(key,value)){
if(key.get()%Integer.parseInt(args[1])==0){
System.out.println("key:"+key.get());
index=-1;
for (Writable val:value.get()){
//doubleWritableArray[++index].set(((DoubleWritable)val).get());
if (counter>10){
break;
}
counter++;
sb.append(((DoubleWritable)val).get()).append(",");
}
System.out.println("value:"+sb.toString()); } }
}
finally {
//IOUtils.closeStream(reader);
}
} }
class DoubleArrayWritable extends ArrayWritable {
public DoubleArrayWritable(){
super(DoubleWritable.class);
}
/*
public String toString(){
StringBuilder sb=new StringBuilder();
for (Writable val:get()){
DoubleWritable doubleWritable=(DoubleWritable)val;
sb.append(doubleWritable.get());
sb.append(",");
}
sb.deleteCharAt(sb.length()-1);
return sb.toString();
}
*/
}
关于生成可执行jar包,这里只说几点需要注意的地方,详细信息可以参考:http://www.cnblogs.com/lz3018/p/5228639.html
1)首先就是MANIFEST.MF文件的配置,应该保证配置完成之后,文件有一个空白行,使用gedit编辑此文件,打开“显示行号”功能。

前4行是我们配置的有效内容,第5行就是我们文件需要的空白行,第6行是目前准备写入字符的行,此时我们就保存文件,那我们文件内容就是包含有字符的前四行,外加一个空白行,也就是我们文件总共有5行。
2)对于Main-Class,当我们的类中没有定义包名的话,那么只需要写主类名称就可以了。(只有eclipse中采用默认包名就是类名这一说法吧)
3)当我们使用jar cfm SeqWriter.jar MANIFEST.MF *.class重新打jar包之后,使用命令java -jar SeqWriter.jar part-r-00000 1000运行jar包时,提示"NoClassDefFoundError":

也就是找不到类 /org/apache/commons/logging/LogFactorty,这个类是在commons-logging-1.1.1中,我们只需要添加这个jar包就可以了,怎么添加了,就是在MANIFEST.MF文件在添加Class-Path属性,给属性配置这个jar包的路径就可以了(多个jar包用空格分隔),完成上述操作之后,使用jar命令重新生成jar包,再使用java -jar执行jar包,然后又出现如下提示:

还是找不到类,仍然是按照上述方法将commons-configuration-1.6.jar的路径添加到Class-Path中,再重新打包、运行·,如下:

同样的,将comons.lang-2.4.jar的路径添加到Class-Path中,然后重新打包、运行,结果如下所示:
成功运行。
将SeqReader打包成可执行的jar包的更多相关文章
- 将Java应用程序打包成可执行的Jar包
可以将多个class文件打包为jar包,在指定程序入口点情况下,可以用 java –jar jar包名称 的方式调用jar包内主类的main函数. 程序源代码如下: //Math.java publi ...
- 在IDEA中如何将Spring boot项目打包成可执行的jar包并发布到linux服务
这两年微服务很流行,这里简单介绍一下如何将自己使用idea写的微服务打包成一个可执行的jar包,并发布到linux服务器的步骤.因为spring boot有内置的tomcat所以一般使用内置的tomc ...
- 构建Springboot项目、实现简单的输出功能、将项目打包成可以执行的JAR包(详细图解过程)
1.构建SpringBoot项目 大致流程 1.新建工程 2.选择环境配置.jdk版本 3.选择 依赖(可省略.后续要手动在pom文件写) 4.项目名 1.1 图解建立过程 1.2 项目结构 友情提示 ...
- 如何将maven项目打包成可执行的jar
如何将maven项目打包成可执行的jar 分类: maven2010-12-17 10:18 10411人阅读 评论(2) 收藏 举报 jarmavenassemblyjava 方法一:将项目及所依赖 ...
- maven项目打包成可执行的jar
编写功能类: package com.hpay.FileToZkUtil; import java.io.File; import java.io.FileInputStream; import ja ...
- java打包成可执行的jar或者exe的详细步骤
Java程序完成以后,对于Windows操作系统,习惯总是想双击某个exe文件就可以直接运行程序,现我将一步一步的实现该过程.最终结果是:不用安装JRE环境,不用安装数据库,直接双击一个exe文件,就 ...
- SpringBoot打包成可执行的Jar文件
需要时SpringBoot项目 通过创建可以在生产环境中运行的完全独立的可执行jar文件来结束示例.可执行jar(有时称为"胖jar")是包含您的已编译类以及代码需要运行的所有ja ...
- 将 java 项目打包成可运行的 jar 包(main 函数带参数),并上传到 linux 服务器上运行
一.概述 java项目有两种架构,一种是 B/S 架构的,一种是 C/S 架构的. 对于 B/S 架构来说,我们常见的 java ee 即是 B/S 架构,通常,开发人员会在本地进行开发,然后将项目打 ...
- 使用命令把SpringBoot项目打包成可运行的jar包(简洁,操作性强)
前几天接到一个需求,要把原系统中一个数据处理小功能搬出原系统,拉出来单独做一个SpringBoot项目,然后打成jar包扔到Windows服务器上运行,这样数据处理的时候如果遇到堵塞就不至于整个系统都 ...
随机推荐
- 解决在极光推送的时候会出现一个 JPush提示:缺少统计代码
<span style="font-size:14px;"> @Override protected void onResume(){ super.onResume() ...
- Spring - IoC(4): p-namespace & c-namespace
p 命名空间 p 命名空间允许你使用 bean 元素的属性而不是 <property/>子元素来描述 Bean 实例的属性值.从 Spring2.0 开始,Spring 支持基于 XML ...
- 用 letsencrypt 生成 SSL 证书
letsencrypt 生成 SSL 证书 事先配置好访问域名解析 在nginx 对应虚拟主机添加一个验证区域: 配置 nginx server { listen 80; ... location ~ ...
- jupyter、flask、tornado、djiango安装
安装了pip包的话直接使用: 1.安装jupyter:pip install jupyter 2.安装flask: pip install flask 3.安装tornado:pip install ...
- MongoDB安装成为Windows服务
使用以下命令将MongoDB安装成为Windows服务.笔者的MongoDB目录为C:\Program Files\MongoDB\Server\3.6\bin 切换到C:\Program Files ...
- POJ2186 (强连通分量缩点后出度为0的分量内点个数)
Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 27820 Accepted: 11208 De ...
- Makefile PHONY
case 1: Makefile clean: rm a environment_1 : There is only file a $ make clean clean a environment_2 ...
- Java坦克大战 (一) 之产生一个窗口
本文来自:小易博客专栏.转载请注明出处:http://blog.csdn.net/oldinaction 在此小易将坦克大战这个项目分为几个版本,以此对J2SE的知识进行回顾和总结,希望这样也能给刚学 ...
- docker常用命令,安装常用实例,一步式安装mysql
刚来公司,跟公司测试环境项目的服务器,环境是linux Centos7.2 所有的tomcat都挂载在docker容器下,所以也就学习了一些简单的docker指令(学习之前请了解什么是docker, ...
- 【 Keepalived 】Nginx or Http 主-备模式
一.主-备模式: 操作系统:centos 6.4 x64 ka1: 192.168.2.10 ka2: 192.168.2.11 vip: 192.168.2.200 ka1-master服务器配置 ...