黑马程序员技术交流社区

标题: 【郑州校区】大数据离线阶段Day8之MapReduce其他功能 [打印本页]

作者: 我是楠楠    时间: 2018-9-15 15:05
标题: 【郑州校区】大数据离线阶段Day8之MapReduce其他功能
【郑州校区】大数据离线阶段Day8之MapReduce其他功能

1. 计数器应用
计数器是用来记录job的执行进度和状态的。MapReduce 计数器(Counter)为我们提供一个窗口,用于观察 MapReduce Job 运行期的各种细节数据。对MapReduce性能调优很有帮助,MapReduce性能优化的评估大部分都是基于这些 Counter 的数值表现出来的。
MapReduce 自带了许多默认Counter。在执行mr程序的日志上,大家也许注意到了类似以下这样的信息:
Shuffle Errors  
        BAD_ID=0  
        CONNECTION=0  
        WRONG_REDUCE=0  
    File Input Format Counters   
        Bytes Read=89  
    File Output Format Counters  
        Bytes Written=86  
内置计数器包括:
文件系统计数器(File System Counters)
作业计数器(Job Counters)
MapReduce框架计数器(Map-Reduce Framework)
Shuffle 错误计数器(Shuffle Errors)
文件输入格式计数器(File Output Format Counters)
文件输出格式计数器(File Input Format Counters)
当然, Hadoop也支持自定义计数器。在实际生产代码中,常常需要将数据处理过程中遇到的不合规数据行进行全局计数,类似这种需求可以借助mapreduce框架中提供的全局计数器来实现。
示例代码如下:
[AppleScript] 纯文本查看 复制代码
public class WordCount{

static class WordCount Mapper extends Mapper<LongWritable, Text, Text, LongWritable> {

@Override

protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {

            Counter counter =context.getCounter(“SelfCounters”,”myCounters”);

String[] words = value.toString().split(",");

for (String word : words) {

                if("hello".equals(word)){counter.increment(1)};

context.write(new Text(word), new LongWritable(1));

}

}

}
2. 多job串联
一个稍复杂点的处理逻辑往往需要多个mapreduce程序串联处理,多job的串联可以借助mapreduce框架的JobControl实现
示例代码:
[AppleScript] 纯文本查看 复制代码

1.         ControlledJob controlledJob1 = new ControlledJob(job1.getConfiguration());

2.         controlledJob1.setJob(job1);  

3.         ControlledJob controlledJob2 = new ControlledJob(job2.getConfiguration());

4.         controlledJob2.setJob(job2);  

5.          controlledJob2.addDependingJob(controlledJob1);  // job2 依赖于 job1

6.         JobControl jc = new JobControl(chainName);  

7.         jc.addJob(controlledJob1);  

8.         jc.addJob(controlledJob2);  

9.         Thread jcThread = new Thread(jc);  

10.         jcThread.start();  

11.         while(true){  

12.             if(jc.allFinished()){  

13.                 System.out.println(jc.getSuccessfulJobList());  

14.                 jc.stop();  

15.                 return 0;  

16.             }  

17.             if(jc.getFailedJobList().size() > 0){  

18.                 System.out.println(jc.getFailedJobList());  

19.                 jc.stop();  

20.                 return 1;  

21.             }  

22.         }  
传智播客·黑马程序员郑州校区地址
河南省郑州市 高新区长椿路11号大学科技园(西区)东门8号楼三层
联系电话 0371-56061160/61/62
来校路线  地铁一号线梧桐街站A口出






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2