mapreduce 프로 그래 밍 SequenceFile 클래스 사용

1. 특정한 응용 에 있어 특별한 데이터 구조 로 자신의 데 이 터 를 저장 해 야 한다.MapReduce 기반 데이터 처리 에 대해 바 이 너 리 데이터 의 큰 대상 을 자신의 파일 에 융합 시 키 는 것 은 높 은 확장 성 을 실현 하지 못 한다. 상기 상황 에 대해 Hadoop 은 더욱 높 은 차원 의 용기 SequenceFile 을 개발 했다.
     2. 로그 파일 을 고려 합 니 다. 로그 기록 은 한 줄 의 텍스트 입 니 다.바 이 너 리 형식 을 기록 하려 면 일반 텍스트 가 적합 하지 않 습 니 다.이 경우 Hadoop 의 SequenceFile 류 는 바 이 너 리 키 / 값 이 영구적 으로 저 장 된 데이터 구 조 를 제공 하기 때문에 매우 적합 합 니 다.로그 파일 의 저장 형식 으로 키 를 선택 할 수 있 습 니 다. 예 를 들 어 LongWritable 형식 으로 표 시 된 시간 스탬프 와 값 은 Writable 형식 으로 로그 기록 의 수량 을 표시 할 수 있 습 니 다.SequenceFile 역시 작은 파일 로 사용 할 수 있 는 용기 입 니 다.HDFS 와 MapReduce 는 큰 파일 에 최 적 화 된 것 이기 때문에 SequenceFile 형식 을 통 해 작은 파일 을 포장 하면 더욱 효율 적 인 저장 과 처 리 를 얻 을 수 있다.
     3. SequenceFile 클래스 내부 에 두 가지 주요 한 내부 클래스 가 있 는데 그것 이 바로 SequenceFile. Reader 와 SequenceFile. Writer 이다.
      SequenceFile.Reader
      createWriter () 정적 방법 을 통 해 SequenceFile 대상 을 만 들 고 SequenceFile. Writer 인 스 턴 스 를 되 돌려 줍 니 다.이 정적 방법 은 여러 개의 리 셋 버 전이 있 지만, 기록 할 데이터 흐름 (FSDataOutput Stream 또는 FileSystem 대상 과 Path 대상), Configuration 대상, 키 와 값 의 유형 을 지정 해 야 합 니 다.또한 선택 할 수 있 는 매개 변 수 는 압축 형식 과 해당 하 는 codec, Progressable 리 셋 함수 가 기록 진 도 를 알 리 는 데 사용 되 며, SequenceFile 헤더 파일 에 저 장 된 Metadata 인 스 턴 스 를 포함 합 니 다.SequenceFile 에 저 장 된 키 와 값 이 반드시 Writable 형식 은 아 닙 니 다.Serialization 클래스 를 통 해 서열 화 와 반 서열 화 를 실현 할 수 있 는 유형 은 모두 사용 할 수 있다.Sequence File. Writer 인 스 턴 스 가 있 으 면 append () 방법 으로 파일 끝 에 첨부 키 / 값 을 맞 출 수 있 습 니 다.
    SequenceFile.Writer
    SequenceFile. Writer 를 만 들 면 자체 의 구조 함수 SequenceFile. Reader (FileSystem fs, Path file, Configuration conf) 를 호출 하여 인 스 턴 스 대상 을 구성 할 수 있 습 니 다. 순서 파일 을 처음부터 끝까지 읽 는 과정 은 SequenceFile. Reader 인 스 턴 스 를 만 든 후 next () 방법 을 반복 적 으로 호출 하여 기록 을 반복 적 으로 읽 는 과정 입 니 다.읽 은 기록 이 사용 하 는 직렬 화 프레임 워 크 와 관련 이 있 습 니까?Writable 형식 을 사용 하면 키 와 값 을 매개 변수 로 하 는 Next () 방법 으로 데이터 흐름 의 다음 키 값 을 읽 을 수 있 습 니 다.
     public boolean next (Writable key, Writable val) 는 키 값 이 성공 적 으로 읽 히 면 true 로 돌아 가 고 파일 끝 에 읽 혔 으 면 false 로 돌아 갑 니 다.
다음은 내 가 연습 할 때 디 버 깅 한 코드 이다.
import java.io.IOException;
import java.net.URI;
import java.util.Random;



import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.SequenceFile;
import org.apache.hadoop.io.Text;


public class sequence {

    /**
     * @param args
     */
    public static  FileSystem fs;
    public static final String Output_path="/home/hadoop/test/A.txt";
    public static Random random=new Random();
    private static final String[] DATA={
          "One,two,buckle my shoe",
          "Three,four,shut the door",
          "Five,six,pick up sticks",
          "Seven,eight,lay them straight",
          "Nine,ten,a big fat hen"
         };
    public static Configuration conf=new Configuration();
    public static void write(String pathStr) throws IOException{
        Path path=new Path(pathStr);
        FileSystem fs=FileSystem.get(URI.create(pathStr), conf);
        SequenceFile.Writer writer=SequenceFile.createWriter(fs, conf, path, Text.class, IntWritable.class);
        Text key=new Text();
        IntWritable value=new IntWritable();
        for(int i=0;i<DATA.length;i++){
            key.set(DATA[i]);
            value.set(random.nextInt(10));
            System.out.println(key);
            System.out.println(value);
           
            System.out.println(writer.getLength());
            writer.append(key, value);
           
        }
        writer.close();
       
    }
    public static void read(String pathStr) throws IOException{
        FileSystem fs=FileSystem.get(URI.create(pathStr), conf);
        SequenceFile.Reader reader=new SequenceFile.Reader(fs, new Path(pathStr), conf);
        Text key=new Text();
        IntWritable value=new IntWritable();
        while(reader.next(key, value)){
            System.out.println(key);
            System.out.println(value);
        }
       
    }
   
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        write(Output_path);
        read(Output_path);
    }   

}

좋은 웹페이지 즐겨찾기