将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服务器上运行,这样数据处理的时候如果遇到堵塞就不至于整个系统都 ...
随机推荐
- 7月21号day13总结
今天学习过程和小结 学习了hive中的数据类型以及hive的简单查询, 学习了sqoop version用sqoop导入导出数据. 主要用于在Hadoop(Hive)与传统的数据库(mysql.pos ...
- 更改win10和mint双系统默认启动顺序
更改win7 & Linuxmint双系统安装后更改默认启动顺序 1.打开一个term,编辑/etc/default/grub,即sudo nano /etc/default/grub,把se ...
- 获取html元素内容
html: <!DOCTYPE ><html> <head> <meta http-equiv="Content-Type" conten ...
- 前端面试:js闭包,为什么要使用闭包
要理解闭包,首先理解javascript特殊的变量作用域,变量的作用于无非就是两种:全局变量,局部变量. javascript语言的特殊处就是函数内部可以读取全局变量. 1.如何从外部读取局部变量? ...
- 前端面试:什么是css reset
HTML标签在浏览器中都有默认的样式,不同的浏览器的默认样式之间存在差别.例如ul默认带有缩进样式,在IE下,它的缩进是由margin实现的,而在Firefox下却是由padding实现的.开发时浏览 ...
- tr/td
在HTML中,tr代表行,td代表列. 说明: 1.tr与td必须一起使用,并且输入的内容必须在td里面: 2.td必须在tr里面,表示在一行中的列: 3.在一个tr里面,有x个td,就表示在这一行里 ...
- USACO_1.1_Your_Ride_Is_Here_(字符串+水题)
描述 http://train.usaco.org/usacoprob2?a=y0SKxY0Kc2q&S=ride 给出两个由大写字母组成,长度不大于$6$的字符串. 将字符串中的各字母的字典 ...
- python基础===修改idle的输入风格
http://blog.csdn.net/aq_cainiao_aq/article/details/51701861
- 解决:org.apache.tomcat.jni.Error: 70023: This function has not been implemented on this platform
centos7.3 启动tomcat 出现错误: 八月 08, 2017 4:58:47 下午 org.apache.catalina.core.StandardEngine startInterna ...
- [ Openstack ] Openstack-Mitaka 高可用之 Mariadb-Galera集群部署
目录 Openstack-Mitaka 高可用之 概述 Openstack-Mitaka 高可用之 环境初始化 Openstack-Mitaka 高可用之 Mariadb-Galera集群 ...