第二章:关于mapReduce
mapreduce是一种可用于数据处理的编程模型,它是并行运行的,可以处理大规模数据分析。
处理少量大文件比大量小文件更容易
mapreduce两个处理阶段:
map阶段和reduce阶段,每个阶段都以key/value做为输入和输出,类型由程序员选择
map中的key是文件中的行偏移量,map函数并不需要这些信息,所以将其忽略
reduce的输入类型必须与map的输出类型相匹配
reduce函数输出文件的目录在运行任务前应该不存在
数据流:
节点角色:
tasktracker:用来执行map和reduce任务
jobtracker:用来调度任务在哪个tasktracker上执行
执行任务期,tasktracker会将运行进度报告给jobtracker,job由此记录作业的整体进度,如果其中一个任务失败,它可以调度别一个tasktracker来重新执行
分片:hadoop将mapreduce输入数据划分成等长的小数据块称为分片,hadoop为每个分片建立一个map任务,并由map函数来处理分片中的每行数据(分片切分更细,负载均衡就越好,当然太小map数就越多,所须要执行时间就越长)
一个合理的分片应该与hdfs块大小相同,默认64M
map函数的输出会写到磁盘上,非hdfs;reduce的输出存在hdfs上实现可靠存储
单个reduce的输入通常来自所有map的输出