MapReduce 分布式计算

    xiaoxiao2024-12-17  57

    Combiner函数 本地化的reducer Partitioner函数 决定着Map节点的输出将被分区到哪个Reduce节点 什么是shuffle 怎样把map task的输出结果有效地传送到reduce端? map输出之前,在内存里经过sort和combiner,再将所有的输出集合到partitioner进行划分到不同的reducer,在每个分区(partition)中,再进行内存中排序,再运行combiner,最后输出到HDFS。 Map处理 public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> Reduce处理 public class WordCountReducer extends Reducer <Text, IntWritable, Text, IntWritable> Job配置 public class WordCountDriver //关联使用的Mapper类 job.setMapperClass(WordCountMapper.class); //关联使用的Reducer类 job.setReducerClass(WordCountReducer.class); public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable>{ //对数据进行打散 protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { //输入数据 hello world love work String line = value.toString(); //对数据切分 String[] words=line.split(" "); //写出<hello, 1> for(String w:words) { //写出reducer端 context.write(new Text(w), new IntWritable(1)); }}} public class WordCountReducer extends Reducer <Text, IntWritable, Text, IntWritable>{ protected void reduce(Text Key, Iterable values, Context context) throws IOException, InterruptedException { //记录出现的次数 int sum=0; //累加求和输出 for(IntWritable v:values) { sum +=v.get(); } context.write(Key, new IntWritable(sum)); } } public class WordCountDriver { public static void main(String[] args) throws IllegalArgumentException, IOException, ClassNotFoundException, InterruptedException { // 设置root权限 System.setProperty(“HADOOP_USER_NAME”, “root”); //创建job任务 Configuration conf=new Configuration(); Job job=Job.getInstance(conf); //指定jar包位置 job.setJarByClass(WordCountDriver.class); //设置数据输入路径和文件名 FileInputFormat.setInputPaths(job, new Path(“c:\in\aa.txt”)); //设置数据输出路径 FileOutputFormat.setOutputPath(job, new Path(“c:\out”)); //提交任务 Boolean rs=job.waitForCompletion(true); //退出 System.exit(rs?0:1); } } 从启动和资源调度来看MapReduce过程 客户端(Client) 编写mapreduce程序,配置作业,提交作业,这就是程序员完成的工作。 JobTracker JobTracker是一个后台服务进程,启动之后,会一直监听并接收来自各个TaskTracker发送的心跳信息,包括资源使用情况和任务运行情况等信息。 TaskTracker TaskTracker是JobTracker和Task之间的桥梁。TaskTracker与JobTracker和Task之间采用了RPC协议进行通信。 HDFS 保存作业的数据、配置信息等等,最后的结果也是保存在hdfs上面

    最新回复(0)