[HADOOP] Partitoner를 JobConf 오브젝트로 설정할 수 없습니다
HADOOPPartitoner를 JobConf 오브젝트로 설정할 수 없습니다
사용자 정의 파티 셔 너를 작성했지만 기본 클래스의 JobConf 객체로 설정할 수 없습니다.
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Partitioner;
public class FirstCharTextPartitioner extends Partitioner<Text, Text> {
@Override
public int getPartition(Text key, Text value, int numReduceTasks) {
return (key.toString().charAt(0)) % numReduceTasks;
}
}
그러나 이것을 JobConf 객체로 설정하려고하면 다음 오류가 발생합니다. JobConf 유형의 setPartitionerClass (Class) 메소드는 인수 (Class)에 적용 할 수 없습니다.
public class WordCount {
public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> {
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {
String line = value.toString();
String[] tokens = line.split("\\s");
for (String token : tokens) {
word.set(token);
output.collect(word, one);
}
}
}
public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> {
public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {
int sum = 0;
while (values.hasNext()) {
sum += values.next().get();
}
output.collect(key, new IntWritable(sum));
}
}
public static void main(String[] args) throws Exception {
JobConf conf = new JobConf(WordCount.class);
conf.setJobName("wordcount");
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(IntWritable.class);
conf.setMapperClass(Map.class);
conf.setCombinerClass(Reduce.class);
conf.setReducerClass(Reduce.class);
conf.setPartitionerClass(FirstCharTextPartitioner.class);
conf.setInputFormat(TextInputFormat.class);
conf.setOutputFormat(TextOutputFormat.class);
FileInputFormat.setInputPaths(conf, new Path(args[0]));
FileOutputFormat.setOutputPath(conf, new Path(args[1]));
JobClient.runJob(conf);
}
}
누군가 내가 뭘 잘못하고 있는지 말해 줄 수 있습니까?
해결법
-
==============================
1.새 org.apache.hadoop.mapreduce.Partitioner를 가져오고 있습니다.
새 org.apache.hadoop.mapreduce.Partitioner를 가져오고 있습니다.
다음과 같이 이전 인터페이스 org.apache.hadoop.mapred.Partitioner를 구현해야합니다.
import org.apache.hadoop.io.Text; import org.apache.hadoop.mapred.Partitioner; public class FirstCharTextPartitioner implements Partitioner<Text, Text> { @Override public int getPartition(Text key, Text value, int numReduceTasks) { return (key.toString().charAt(0)) % numReduceTasks; } }
from https://stackoverflow.com/questions/14193646/unable-to-set-partitoner-to-the-jobconf-object by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 때 java.io.IOException : 0 만 노드에 복제 할 수 /tmp/hadoop-eo/mapred/system/jobtracker.info 파일, 대신 2 (0) | 2019.09.17 |
---|---|
[HADOOP] 하이브는 스파크에 : 스파크 클라이언트를 만들 수 없습니다 (0) | 2019.09.17 |
[HADOOP] 원사 노드 관리자가 시작되지 않습니다. 오류 없음 (0) | 2019.09.17 |
[HADOOP] Custom WritableCompare는 객체 참조를 출력으로 표시합니다 (0) | 2019.09.17 |
[HADOOP] SSH를 사용하여 Java 앱에서 Hadoop에 연결 (0) | 2019.09.17 |