分享

求住写个seqfile 范例 出现奇怪运行BUG!

dsy198816 发表于 2017-1-9 16:09:21 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 2 5329
[hadoop@namenode SeqFileText]$ java SeqMain
17/01/09 16:06:29 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
java.io.FileNotFoundException: /samba/anonymous/hadoop-test/SeqFileText/.user.sequence.crc (权限不够)
        at java.io.FileOutputStream.open0(Native Method)
        at java.io.FileOutputStream.open(FileOutputStream.java:270)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
        at org.apache.hadoop.fs.RawLocalFileSystem$LocalFSFileOutputStream.<init>(RawLocalFileSystem.java:211)
        at org.apache.hadoop.fs.RawLocalFileSystem$LocalFSFileOutputStream.<init>(RawLocalFileSystem.java:207)
        at org.apache.hadoop.fs.RawLocalFileSystem.createOutputStream(RawLocalFileSystem.java:276)
        at org.apache.hadoop.fs.RawLocalFileSystem.create(RawLocalFileSystem.java:270)
        at org.apache.hadoop.fs.RawLocalFileSystem.create(RawLocalFileSystem.java:257)
        at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:889)
        at org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSOutputSummer.<init>(ChecksumFileSystem.java:390)
        at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:449)
        at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:428)
        at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:908)
        at org.apache.hadoop.io.SequenceFile$Writer.<init>(SequenceFile.java:1072)
        at org.apache.hadoop.io.SequenceFile$RecordCompressWriter.<init>(SequenceFile.java:1372)
        at org.apache.hadoop.io.SequenceFile.createWriter(SequenceFile.java:273)
        at org.apache.hadoop.io.SequenceFile.createWriter(SequenceFile.java:295)
        at SeqMain.main(SeqMain.java:38)






下面是代码
import java.io.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.lang.*;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.SequenceFile;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.util.ReflectionUtils;
public class SeqMain{
public static void main(String[] args){

        TextWritable udata;
        int data_length;
        byte byte_buff[] = new byte[2000];
        Configuration conf = new Configuration();

        conf.set("mapreduce.jobtracker.address", "local");
        conf.set("fs.defaultFS", "file:///");
        
        try{
               File readfile = new File("./url");
               DataInputStream in = new DataInputStream(new FileInputStream(readfile));
               FileSystem fs=null;
               SequenceFile.Writer writer=null;
               LongWritable idKey=new LongWritable(0);
                     
               String writefile = "./user.sequence";
               Path path=new Path(writefile);
               fs = FileSystem.get(conf);
               writer = SequenceFile.createWriter(fs, conf, path, LongWritable.class, TextWritable.class);            
               long pos = 0;
               int i = 0;
               long end = readfile.length();
               while(pos < end - 1)
               {
                   data_length = in.readInt();                                
                   in.read(byte_buff, 0, data_length-4);
                   pos += data_length;
                   udata = new TextWritable(data_length, byte_buff);
                   i++;
                   idKey.set(i);
                   writer.append(idKey, udata);
               }              
               writer.close();
           } catch(IOException e){
               e.printStackTrace();
           }
                             
    }
}








import java.io.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.lang.*;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.SequenceFile;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.util.ReflectionUtils;


public  class TextWritable implements Writable{

        byte[] data_buff;
        int length;

        public TextWritable(int total_leng, byte[] buff){

            super();
            this.data_buff = new byte[total_leng-4];
            length = total_leng-4;
            System.arraycopy(buff, 0, this.data_buff, 0, total_leng-4);
        }

        public void write(DataOutput out) throws IOException {

             out.write(this.data_buff, 0, this.length);

        }

        public void readFields(DataInput in) throws IOException {

        }


}





已有(2)人评论

跳转到指定楼层
nextuser 发表于 2017-1-9 16:31:30
楼主这个不对吧,上面报错权限不够
conf.set("fs.defaultFS", "file:///");
存在以下问题
1.集群运行在什么地方
2.hdfs为何为本地的,没讲过这种形式。
即使有这种形式,可能也是造成上述没有权限的原因


回复

使用道具 举报

dsy198816 发表于 2017-1-10 11:24:59
具体原因我没查出来,文件名改成,user就好了不知道为啥。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条