读书笔记Hadoop实战5

 注:之前写过MapReduce程序,所以对Hadoop和MapReduce编程有一些了解,现在正在阅读《Hadoop实战》一书,这里主要是记下对自己有用的一些点,完全不能覆盖书中的全部要点。想要学习MapReduce入门的同学请移尊步,勿浪费时间。

这里是我觉得不错的几个入门文章:

http://www.cnblogs.com/forfuture1978/category/300670.html

http://blog.csdn.net/aidayei/article/details/6580277

http://www.cnblogs.com/mdyang/category/307547.html

http://www.cnblogs.com/wycg1984/category/238035.html

 -----------------------------------------------------------敌我分割线------------------------------------------------------------

 

回归测试:修改了旧代码之后,重新进行测试,以确保没有新的错误引入。对比改动前后的两个程序的输出,通过差异看逻辑对不对。对比过程可以使用diff工具(命令)。

记得大一上Java课的时候,那个老师讲过数据类型之后说,如果不好选择,那么整形通常选int,浮点数通常选double,这里书上说,优先使用long(longwritable…)类型,因为hadoop面临的环境是大规模数据处理。这个还有点不习惯。

hadoop在伪分布模式下,Java程序中的System.out和System.err输出的内容会被保存到文件stdout和stderr中(HADOOP_DIR/logs/userlogs/)。这些信息可以用来调试。另外可以再程序中使用Report类的setStatus()方法(map和reduce函数都有一个Report参数)传送实时状态信息。

使用计数器:

程序员可以在作业中插入计数器来分析其整体运行。在程序中定义不同的计数器,分别累计特定时间的发生次数。对于来自同一个作业的所有任务的相同计数器,Hadoop会自动求和。

程序示例:

static enum CounterType { EVENT_A, EVENT_B};

public void map(K k, V v,OutputCollector<T1,T2> output,Report r){
    if(testValueA(v)){
        r.incrCounter(CounterType.EVENT_A, 1);
    }
    if(testValueB(v)){
        r.incrCounter(CounterType.EVENT_B, 1);
    }
}

 

典型应用是用来跟踪不同的输入记录类型,特别是坏的记录。

跳过坏记录:

如果数据中有坏记录,而你又不想因为这几个坏记录影响作业的执行,可以设置跳过坏记录。skipping机制在Hadoop 0.19中已经被支持,默认关闭该特性。如果打开这一特性,Hadoop会在任务失效两次之后进入skipping模式,并将被跳过的坏记录记录在HDFS中以供程序员后续分析。skipping的设置由 SkipBadRecord负责。

IsolationRunner:

IsolationRunner工具允许程序员隔离失败的任务,并在同一节点上用完全一样的输入数据重新运行它,还可以添加一个调试器,收集运行信息。

猜测执行:

Hadoop会注意到执行的慢的任务,并安排在另一个节点上并行执行相同的任务。这些并行执行的任务只要有一个完成就可以了(其他的被kill)。

 

原文地址:https://www.cnblogs.com/apprentice89/p/2674038.html