运行测试
这里有点疑问,在运行测试时,首先导入hadoop路径(export HADOOP_CLASSPATH=hadoop-example.jar)
hadoop <类名> <路径输出文件名> output ?
hadoop命令第一个参数是类名,hadoop就会启动一个jvm来运行这个类,前提是定义了HADOOP_CLASSPATH,然后就可以用Hadoop脚本执行;
新旧的API明显区别:新API倾向于使用虚类,而不是接口,这样有利于扩展;这意味着用不着改变类的实现,即可在虚类中添加一个方法(即默认实现)
虚类和接口的区别及定义;
新API在org.apache.hadoop.mapreduce包下;旧的在org.apache.hadoop.mapred中;
新API充分使用上下文对象,使用户代码能与MapReduce系统通信,例如,新的Context基本统一了旧API中的JobConf.OutputCollector和Reporter的功能;
键/值对记录这两类API中都推给了maper和reducer,除此之外,新的API通过重写Run()方法允许maper和reducer控制执行流程,
旧的通过写MapRunable类在mapper中实现上述功能,但在reducer中没有对等实现;
新增API对配置做了统一,旧的是用了JobConf对象配置作业,行的是由Configuration或job类的辅助方法;
输出文件命名方式稍有不同旧的输出统一为part-nnmm,新的map为part-m-nnnnn,reduce的为part-r-nnnnnn其中nnnn是从0开始的表示分块序号的整数;
新的API中的用户重载函数被声明抛出异常java.lang.InterrutedException这意味着可以用代码来实现中断响应从而取消长时间作业;在新的API中,reduce()传递的
值是java.lang.Iterable类型,而非java.lang.Iterator这一改变可以使我们使用for-each;