开头对这边博客的内容做个概述,首先是定义了一个DoubleArrayWritable的类,用于存放矩阵的列向量,然后将其作为value写入SequenceFile中,key就是对应的矩阵的列号,最后(key,value)从SequenceFile中读出,与另一矩阵做乘法。完全通过IDEA在本地调试程序,并未提交集群。一般来说是将hadoop-core-1.2.1.jar和lib目录下的commons-cli-1.2.jar两个包加入到工程的classpath中就可以了,不过仅仅添加这两个包,调试的时候会提示找不到某些类的定义,所以索性将hadoop-core-1.2.1.jar和lib目录下的所有jar包均添加到工程的classpath中,这样完全不必提交到集群就可以在本地调试程序。
1)首先是定义DoubleArrayWritable类,这个类继承与ArrayWritable。
1 importorg.apache.hadoop.io.IntWritable;2 importorg.apache.hadoop.io.ArrayWritable;3 public class IntArrayWritable extendsArrayWritable {4 publicIntArrayWritable(){5 super(IntWritable.class);6 }7 }
因为要读取SequenceFile中的(key,value)传给map,所以需要以4-6的形式显示定义构造函数。
2)然后是将DoubleArrayWritable类型的对象作为value写入SequenceFile,使用SequenceFile.writer
/*** Created with IntelliJ IDEA.
* User: hadoop
* Date: 16-3-4
* Time: 上午10:36
* To change this template use File | Settings | File Templates.*/
importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;importjava.io.IOException;importjava.net.URI;importorg.apache.hadoop.io.IntWritable;importorg.apache.hadoop.io.SequenceFile;importorg.apache.hadoop.io.ArrayWritable;public classSequenceFileWriterDemo {public static void main(String[] args) throwsIOException {
String uri="/home/hadoop/2016Test/SeqTest/10IntAr