第二章 关于MapReduce

来源:互联网 发布:sqlserver基础知识 编辑:程序博客网 时间:2024/05/02 09:22

Unix传统处理按行存储数据工具是awk

MapReduce任务分为两个处理阶段:Map阶段和Reduce阶段。每个阶段都以键值对作为输入和输出,其类型有程序员来选择。程序员还需要些两个函数:map函数和reduce函数

map阶段为数据的准备阶段,此处我们比较合适去除去已损记录的地方,比如筛选缺失,可疑,错误的数据

防止覆盖的一个思路:

reduce写入目录。在运行作业前该目录是如果存在则跑异常,报错拒绝运行作业,预防数据丢失(长时间跑的数被覆盖一定非常恼人)

写好的Java打成jar包使用hadoop命令运行作业比直接使用Java命令来运行方便,hadoop会把文件和依赖以及路径和环境变量加进去

虚类:抽象类默认接口的实现类


注意:将Mapper和Reducer类转换为新API时,记住将map()和reduce()的签名转换为新形势

hadoop将作业分成若干个小任务(task)来执行,其中包含两类任务map任务和reduce任务

两类节点控制着的作业执行过程:一个jobtracker及一系列tasktracker。jobtracker通过调度tasktracker上运行的任务来协调所有运行在系统上的作业。tasktracker在运行任务的同时将运行进度报告发送给jobtracker,jobtracker由此记录每项作业任务的整体进度情况。如果其中一个任务失败,jobtracker可以在另外一个tasktracker上重新调度该任务。

一个合理的分片大小趋向于HDFS的一个块的大小,默认是64MB

map任务将其输出写入本地硬盘,而非HDFS

combiner函数

没用combiner函数前 key=>[value1,value2,value2...]

用之后向reduce输入的变为key=>maxvalue

有些情况不能用combiner,求最大值可以,但 平均气温这种就不能

他能有效的减少mappper和reduce之间的数据传输量,早MapReduce作业使用combiner函数需要慎重考虑

使用方法在运行的时候

job.setCombinerClass(我们的mapper类和MapClass为同一个类.class)


hadoop使用Unix标准流作为Hadoop和应用程序的接口,所以我们可以使用任何编程语言通过标准的输入/输出来写MapReduce

java,Ruby,Python..



原创粉丝点击