[HADOOP] .txt 파일을 Hadoop의 시퀀스 파일 형식으로 변환하는 방법
HADOOP.txt 파일을 Hadoop의 시퀀스 파일 형식으로 변환하는 방법
Hadoop에서 map-reduce 작업을 효과적으로 활용하려면 데이터가 hadoop의 시퀀스 파일 형식으로 저장되어야합니다. 그러나 현재 데이터는 플랫 .txt 형식으로되어 있습니다. 누구든지 .txt 파일을 시퀀스 파일로 변환 할 수있는 방법을 제안 할 수 있습니까?
해결법
-
==============================
1.그래서 더 간단한 대답은 SequenceFile 출력을 가진 "신원"작업 일뿐입니다. 자바에서는 다음과 같이 보입니다.
그래서 더 간단한 대답은 SequenceFile 출력을 가진 "신원"작업 일뿐입니다. 자바에서는 다음과 같이 보입니다.
public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException { Configuration conf = new Configuration(); Job job = new Job(conf); job.setJobName("Convert Text"); job.setJarByClass(Mapper.class); job.setMapperClass(Mapper.class); job.setReducerClass(Reducer.class); // increase if you need sorting or a special number of files job.setNumReduceTasks(0); job.setOutputKeyClass(LongWritable.class); job.setOutputValueClass(Text.class); job.setOutputFormatClass(SequenceFileOutputFormat.class); job.setInputFormatClass(TextInputFormat.class); TextInputFormat.addInputPath(job, new Path("/lol")); SequenceFileOutputFormat.setOutputPath(job, new Path("/lolz")); // submit and wait for completion job.waitForCompletion(true); }
-
==============================
2.
import java.io.IOException; import java.net.URI; 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.IntWritable; import org.apache.hadoop.io.SequenceFile; import org.apache.hadoop.io.Text; //White, Tom (2012-05-10). Hadoop: The Definitive Guide (Kindle Locations 5375-5384). OReilly Media - A. Kindle Edition. public class SequenceFileWriteDemo { 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 void main( String[] args) throws IOException { String uri = args[ 0]; Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(URI.create( uri), conf); Path path = new Path( uri); IntWritable key = new IntWritable(); Text value = new Text(); SequenceFile.Writer writer = null; try { writer = SequenceFile.createWriter( fs, conf, path, key.getClass(), value.getClass()); for (int i = 0; i < 100; i ++) { key.set( 100 - i); value.set( DATA[ i % DATA.length]); System.out.printf("[% s]\t% s\t% s\n", writer.getLength(), key, value); writer.append( key, value); } } finally { IOUtils.closeStream( writer); } } }
-
==============================
3.TXT 파일의 형식이 무엇인지에 따라 다릅니다. 레코드 당 한 줄입니까? 그렇다면 각 행에 대해 하나의 레코드를 만드는 TextInputFormat을 간단히 사용할 수 있습니다. 당신의 매퍼 (mapper)에서 당신은 그 라인을 파싱하고 당신이 선택한 방식으로 그것을 사용할 수 있습니다.
TXT 파일의 형식이 무엇인지에 따라 다릅니다. 레코드 당 한 줄입니까? 그렇다면 각 행에 대해 하나의 레코드를 만드는 TextInputFormat을 간단히 사용할 수 있습니다. 당신의 매퍼 (mapper)에서 당신은 그 라인을 파싱하고 당신이 선택한 방식으로 그것을 사용할 수 있습니다.
레코드 당 하나의 행이 아니라면, 독자적인 InputFormat 구현을 작성해야 할 수도 있습니다. 자세한 내용은이 자습서를 살펴보십시오.
-
==============================
4.중간 테이블을 작성하고, CSD 내용을 그대로 LOAD DATA로 작성한 다음 두 번째 테이블을 sequencefile (분할, 클러스터 등)으로 작성하고 중간 테이블에서 select에 삽입 할 수 있습니다. 압축 옵션을 설정할 수도 있습니다 (예 :
중간 테이블을 작성하고, CSD 내용을 그대로 LOAD DATA로 작성한 다음 두 번째 테이블을 sequencefile (분할, 클러스터 등)으로 작성하고 중간 테이블에서 select에 삽입 할 수 있습니다. 압축 옵션을 설정할 수도 있습니다 (예 :
set hive.exec.compress.output = true; set io.seqfile.compression.type = BLOCK; set mapred.output.compression.codec = org.apache.hadoop.io.compress.SnappyCodec; create table... stored as sequencefile; insert overwrite table ... select * from ...;
그러면 MR 프레임 워크가 사용자를 위해 무겁게 처리하여 Java 코드를 작성해야하는 번거 로움을 덜어줍니다.
-
==============================
5.형식 지정자와 조심하십시오 :.
형식 지정자와 조심하십시오 :.
예를 들어, System.out.printf ( "[% s] \ t % s \ t % s \ n", writer.getLength (), key, value); 우리에게 java.util.FormatFlagsConversionMismatchException을 줄 것이다 : Conversion = s, Flags =
대신 다음을 사용해야합니다.
System.out.printf("[%s]\t%s\t%s\n", writer.getLength(), key, value);
-
==============================
6.데이터가 HDFS에 없으면 HDFS에 업로드해야합니다. 두 가지 옵션 :
데이터가 HDFS에 없으면 HDFS에 업로드해야합니다. 두 가지 옵션 :
i) .txt 파일에 hdfs -put을 입력하고 HDFS로 가져 오면 seq 파일로 변환 할 수 있습니다.
ii) HDFS Client 상자에서 텍스트 파일을 입력으로 가져 와서 Sequence File API를 사용하여 SeqFile로 변환하고 SequenceFile.Writer를 작성하고 (key, values)를 추가합니다.
열쇠에 신경 쓰지 않는다면, 줄 번호를 키로 만들고 텍스트를 값으로 완성 할 수 있습니다.
-
==============================
7.Mahout이 설치되어 있다면 - seqdirectory라고 불리는 것이있다 - 할 수있다.
Mahout이 설치되어 있다면 - seqdirectory라고 불리는 것이있다 - 할 수있다.
from https://stackoverflow.com/questions/5377118/how-to-convert-txt-file-to-hadoops-sequence-file-format by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] hadoop의 MultipleOutputFormat (0) | 2019.05.29 |
---|---|
[HADOOP] 로컬 Hadoop 2.6 설치에서 S3 / S3n에 어떻게 액세스합니까? (0) | 2019.05.29 |
[HADOOP] 원사 개념 이해에 촉발 (0) | 2019.05.29 |
[HADOOP] Apache Spark에서 s3a : // 파일에 액세스하는 방법? (0) | 2019.05.29 |
[HADOOP] HDFS 오류 : 1 대신에 0 노드로만 복제 할 수있었습니다. (0) | 2019.05.29 |