作者回复: 是的,主要为了可靠性,spark就不写硬盘,所以快。
作者回复: 会的,数据倾斜,会导致任务失败。严重的数据倾斜可能是数据本身的问题,需要做好预处理
作者回复: 是的,比如MapReduce没法计算斐波那契数列,因为不能分片计算。
但是大数据场景几乎都是可以分片计算的。
作者回复: 不会,调用partitioner是一个job的任务分配,动态的,结束了就完成了,不存在扩展性问题。
作者回复: 通常不会
作者回复: 移动计算主要是map阶段,reduce阶段数据还是要移动数据合并关联,不然很多计算无法完成
作者回复: 如果是SQL操作,就用hive,不用自己编程MapReduce。
如果机器故障导致某个任务很慢,MapReduce框架会启动多个任务进程在多个服务器同时计算同一个数据块,那个算完输出那个,不会一直等。
需要一直等的是数据偏移,某个key聚集了太多数据,大量数据shuffle到一个reduce计算,job一直等这个任务。
作者回复: 没有问题,一般宕机也能计算完成,MapReduce有容错能力。计算结果不会有问题。
作者回复: map输入数据在文件中的偏移量
作者回复: 所有服务器都启动tasktracker,等待jobtracker分配任务,跟NameNode一样
作者回复: 可以,普通笔记本就可以,能,最新版
作者回复: 绝对先后关系,一个reduce必须要他前置的所有map执行完才能执行。
MapReduce框架会在85%的map程序执行完成时,开始启动reduce程序,reduce程序一边shuffle已完成的map数据,一边等待未完成的map继续执行,直到全部map完成,reduce才开始执行计算。
作者回复: 所谓的快完成是指很多个map进程已经完成,一小部分map进程还没完成,这个时候启动shuffle,将完成的map输出发送给reduce,直到所有map都完成