mapreduce 프로 그래 밍 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);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MongoDB mapreduce 인스턴스var action_count_map = function(){ var action_count_reduce = function(key, values){ db.log.mapReduce(action_count_map, a...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.