[HADOOP] 빈 출력 파일은 하둡 작업을 실행 한 후 생성
HADOOP빈 출력 파일은 하둡 작업을 실행 한 후 생성
나는 아래와 같이 맵리 듀스 프로그램이
import java.io.IOException;
import java.util.Iterator;
import java.util.StringTokenizer;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.FileInputFormat;
import org.apache.hadoop.mapred.FileOutputFormat;
import org.apache.hadoop.mapred.JobClient;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.KeyValueTextInputFormat;
import org.apache.hadoop.mapred.MapReduceBase;
import org.apache.hadoop.mapred.Mapper;
import org.apache.hadoop.mapred.OutputCollector;
import org.apache.hadoop.mapred.Reducer;
import org.apache.hadoop.mapred.Reporter;
import org.apache.hadoop.mapred.TextOutputFormat;
public class Sample {
public static class SampleMapper extends MapReduceBase implements
Mapper<Text, Text, Text, Text> {
private Text word = new Text();
@Override
public void map(Text key, Text value,
OutputCollector<Text, Text> output, Reporter reporter)
throws IOException {
StringTokenizer itr = new StringTokenizer(value.toString(),",");
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
output.collect(key, word);
}
}
}
public static class SampleReducer extends MapReduceBase implements
Reducer<Text, Text, Text, Text> {
private Text result = new Text();
@Override
public void reduce(Text key, Iterator<Text> values,
OutputCollector<Text, Text> output, Reporter reporter)
throws IOException {
StringBuffer aggregation = new StringBuffer();
while (values.hasNext()) {
aggregation.append("|" + values.next().toString());
}
result.set(aggregation.toString());
output.collect(key, result);
}
}
public static void main(String args[]) throws IOException {
JobConf conf = new JobConf(Sample.class);
conf.setJobName("Sample");
conf.setMapperClass(SampleMapper.class);
conf.setReducerClass(SampleReducer.class);
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(Text.class);
conf.setInputFormat(KeyValueTextInputFormat.class);
conf.setOutputFormat(TextOutputFormat.class);
FileInputFormat.setInputPaths(conf, new Path(args[0]));
FileOutputFormat.setOutputPath(conf, new Path(args[1]));
JobClient.runJob(conf);
}
}
나는 항아리를했습니다 나는 출력을 얻으려고 간 적이 있었다. 그러나 생성되는 출력 파일이 비어 있습니다.
나는 작업을 실행하려면 다음 명령을 사용하고 있습니다
hadoop jar mapreduce.jar Sample /tmp/input tmp/output
mapreduce.jar 내가 포장 한 단지이며, 내 입력 파일은 같다
1 a,b,c
2 e,f
1 x,y,z
2 g
예상 출력
1 a|b|c|x|y|z
2 e|f|g
해결법
-
==============================
1.난 당신이이 separater 바이트를 찾지 못하는 것 때문에 키로 전체 라인 값을 사용하고 입력 형식으로 KeyValueTextInputFormat을 사용하고 있기 때문에 (값하는 ""입니다) 같은데요. 즉, 매퍼에 반복이 어떤 루프를 통과하지 않으며 아무것도 기입하지 않습니다 것을 의미합니다. 분리 바이트로 "」를 개최하기 위해 설정에서 속성 이름 mapreduce.input.keyvaluelinerecordreader.key.value.separator을 사용합니다.
난 당신이이 separater 바이트를 찾지 못하는 것 때문에 키로 전체 라인 값을 사용하고 입력 형식으로 KeyValueTextInputFormat을 사용하고 있기 때문에 (값하는 ""입니다) 같은데요. 즉, 매퍼에 반복이 어떤 루프를 통과하지 않으며 아무것도 기입하지 않습니다 것을 의미합니다. 분리 바이트로 "」를 개최하기 위해 설정에서 속성 이름 mapreduce.input.keyvaluelinerecordreader.key.value.separator을 사용합니다.
-
==============================
2.JobConf에 구성 개체를 전달하려고, 나는 당신의 JobConf는 하둡 / HDFS 구성을 얻을 수없는 것 같아요.
JobConf에 구성 개체를 전달하려고, 나는 당신의 JobConf는 하둡 / HDFS 구성을 얻을 수없는 것 같아요.
Configuration configuration=new Configuration(); JobConf jobconf=new JobConf(configuration, exampleClass.class); conf2.setJarByClass(cls); .......
from https://stackoverflow.com/questions/12780407/empty-output-file-generated-after-running-hadoop-job by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 지도 출력 파일을 줄이기 : 파트 R- * 및 파트 - * (0) | 2019.10.07 |
---|---|
[HADOOP] 실행 하둡은 브라우저에서 명령 (0) | 2019.10.07 |
[HADOOP] 어떻게 java.lang.IllegalArgumentException가 문제를 해결할 수 : 인식 할 수없는 하둡 주 버전 번호를 : 3.1.0은? (0) | 2019.10.07 |
[HADOOP] 컴파일 오류 WordCount.java를 컴파일하는 동안 (0) | 2019.10.07 |
[HADOOP] 하이브 테이블 쿼리를 선택에 응답하지 않습니다. ACID 활성화 (0) | 2019.10.07 |