2017-07-03 25 views
2

我想實現Mapside加入使用CompositeTextInoutFormat。不過,我在Map reduce工作中遇到了以下錯誤,我無法解決這個問題。 1.在下面的代碼中,我在使用Compose方法時出現錯誤,並在設置inputformat Class時出現錯誤。錯誤如下所示。無法使用CompositetextinputFormat在Mapside加入

在 類型CompositeInputFormat方法撰寫(字符串,類,路徑...)不適用於參數 (字符串,類,路徑[])

能有人幫

package Hadoop.MR.Practice; 

import org.apache.hadoop.conf.Configuration; 
import org.apache.hadoop.fs.Path; 
import org.apache.hadoop.io.LongWritable; 
import org.apache.hadoop.io.Text; 
import org.apache.hadoop.mapred.TextInputFormat; 
import org.apache.hadoop.mapred.join.CompositeInputFormat; 
import org.apache.hadoop.mapreduce.Job; 
import org.apache.hadoop.mapreduce.lib.input.KeyValueTextInputFormat; 
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; 
import org.apache.hadoop.util.Tool; 
import org.apache.hadoop.util.ToolRunner; 
//import org.apache.hadoop.mapred.join.CompositeInputFormat; 


public class MapJoinJob implements Tool{ 

private Configuration conf;  

public Configuration getConf() { 
    return conf; 
} 
public void setConf(Configuration conf) { 
    this.conf = conf; 
} 
@Override 
public int run(String[] args) throws Exception { 
    Job job = Job.getInstance(getConf(), "MapSideJoinJob"); 
    job.setJarByClass(this.getClass()); 

    Path[] inputs = new Path[] { new Path(args[0]), new Path(args[1])}; 
    String join = CompositeInputFormat.compose("inner", KeyValueTextInputFormat.class, inputs); 
    job.getConfiguration().set("mapreduce.join.expr", join); 

    job.setInputFormatClass(CompositeInputFormat.class); 

    job.setMapperClass(MapJoinMapper.class); 
    job.setMapOutputKeyClass(Text.class); 
    job.setMapOutputValueClass(LongWritable.class); 

    //Configuring reducer 
    job.setReducerClass(WCReducer.class); 
    job.setOutputKeyClass(Text.class); 
    job.setOutputValueClass(LongWritable.class); 
    job.setNumReduceTasks(0); 

    FileOutputFormat.setOutputPath(job, new Path(args[2])); 

    job.waitForCompletion(true); 
    return 0; 
} 

public static void main(String[] args) throws Exception { 
    Configuration conf = new Configuration(); 
    MapJoinJob mjJob = new MapJoinJob(); 
    ToolRunner.run(conf, mjJob, args); 
} 

回答

1

我會說你的問題可能與混合hadoop API有關。您可以看到您的進口產品混合了mapredmapreduce

例如,您嘗試使用org.apache.hadoop.mapreduce.lib.input.KeyValueTextInputFormatorg.apache.hadoop.mapred.join.CompositeInputFormat這不太可能工作。

你應該選擇一個(可能mapreduce我會說),並確保一切都使用相同的API。

+0

謝謝很多..會盡力解決這個.. –