Skip to main content

分布式并行Hadoop

分布式并行 Hadoop

hadoop

OS: FS + Schedular + Mem + DB(?) + ...

对应大数据下的GFS, Map reduce, Big Table

合起来: Hadoop 分布式计算环境(云OS)

Hadoop Common,HDFS, Hadoop mapreduce, Hadoop Ozone(对象存储), Hadoop YARN(schedule)

hdfs 建立在机器的fs之上

MR: map + sort + combine(可选的) + reduce(reduce的output不保证顺序) map combine在本地上, reduce在机器之间combine

中间有一个shuffle和分配任务

combiner: 减少数据传输量

scale out

输入: 文件block切块/目录层级分成各个文件

也可能只有map

MR inside: JobTracker

资源管理, 任务分配

心跳: 一段时间内最少来X次

执行任务的mapper/reducer每操作一定数量/闲置一段时间发心跳(不能是独立timer, 可能timer活着worker死了)

reducer的大致设置数量

0.95-1.75 * 机器最大能起的工作节点 * 一个工作节点的容器数量

波动? 节点可能重IO, 此时可以调大数量, 让cpu不要闲置, 也就是快的节点调大, 慢的节点调小

spill: map完的文件还是太大, 加载不进内存, 再在本机切分, 部分部分处理之类之后合并

MR的问题: map, split, shuffle, sort, reduce...都需要磁盘IO,重度使用磁盘IO

全部放内存? -> Spark, 速度快, 内存要求高

一些其他的改进: 有部分处理结果迅速写出,避免后续其他的部分可能的崩溃之后全量的重新处理

yarn: MR2.0, 将资源管理和作业调度分开

应用: DAG, 每一个应用都有自己的application master,向全局的resource manager报告, 避免了1.0全局的job tracker崩掉就全崩, 均衡负载