hadoop streaming 代码分析
程序的入口在:
HadoopStreaming 。 里面的main函数大概做了两件事:如下:
StreamJob job = new StreamJob();
returnStatus = ToolRunner.run(job, args);
然后调用StreamJob的run(String[] args)方法
StreamJob的run方法主要负责
1解析用户的输入参数
1.1 将用户指定的
2将输入参数转化成 JobConf, 其中主要的是解析 mapper, reducer, 并且设置:
jobConf_.setMapperClass(PipeMapper.class);
jobConf_.setMapRunnerClass(PipeMapRunner.class);
jobConf_.setReducerClass(PipeReducer.class);
3 submit job
4, PipeMapRunner
4.1 PipeMapper pipeMapper = (PipeMapper)getMapper();
4.2pipeMapper.startOutputThreads(output, reporter);
4.21这里会调用 PipeMapRed.java的startOutputThreads, 他主要起一个线程MROutputThread, 并绑定 output和reporter。 run方法里面:lineReader = new LineReader((InputStream)clientIn_, job_);
4.22 while (lineReader.readLine(line) > 0){ splitKeyVal(answer, line.getLength(), key, val);, 并output.collect(key, val);
4.3super.run(input, output, reporter);
待续