本文共 2835 字,大约阅读时间需要 9 分钟。
Google发表了MapReduce计算范型及其框架的论文。MapReduce和并行数据库系统(MPP)各有优劣并且两者有一定的互补和学习。与传统MPP架构相比,MapReduce更适合非结构化数据的ETL处理类操作,并且可扩展性和容错性占优,但是单机处理效率较低。
DAG计算模型是MapReduce计算机制的一种扩展。MapReduce对于子任务之间复杂的交互和依赖关系缺乏表达能力,DAG计算模型可以表达复杂的并发任务之间的依赖关系。Spark本质上是DAG批处理系统,其最能发挥特长的领域是迭代式机器学习。MapReduce计算任务的输入是Key/Value数据对,输出也以Key/Value数据对方式表示。开发者要根据业务逻辑实现Map和Reduce两个接口函数内的具体操作内容,即可完成大规模数据的并行批处理任务。
实例一:单词统计
map(String key, String value): //key: 文档名 //value: 文档内容 for each word in value: Emit Intermedia(w, "1");reduce(String key, Iterator values): //key: 单词 //value: 出现次数列表 int result = 0; for each v in values: result += ParseInt(v);//累加values值 Emit(AsString(result));
实例二: 链表反转
map(String source_url, Iterator outlinks): //key: 网页url //value: 出链列表 for each outlink o in outlinks: Emit Intermedia(o, source_url)reduce(String target_url, Iterator source_urls): //key: target网页url //values: source网页url list result = []; for each v in source_urls: Result.append(v); Emit(AsString(result));
实例三: 页面点击统计
map(String tuple_id, String tuple): Emit Intermedia(url, "1");reduce(String url, Iterator list_tuples): int result = 0; for each v in list_tuples: result += ParseInt(v); Emit(AsString(result));
处理流程:
为了优化执行效率,MapReduce计算框架在Map阶段还可以执行Combiner操作。
hadoop的MapReduce运行机制基本与google的类似。
不同的是,hadoop采用https协议来进行数据传输,并采用归并排序对中间结果进行排序。Google的MapReduce框架支持细粒度的容错机制。Master周期性Ping各个Worker,如果Worker没有响应,则认为其已经发生故障。如果Master故障则单点失效,重新提交任务。优势:
由于:
有向无环图的简称。在大数据处理领域,DAG计算模型是将计算任务在内部分解成若干子任务,这些子任务之间由逻辑关系或运行先后顺序等因素被构建成有向无环图结构。
微软DAG计算系统,dryad在实现时以共享内存、TCP连接以及临时文件的方式进行数据传输
job manager负责将逻辑形式存在的DAG描述映射到物理机。NS负责维护集群中当前可以的机器资源。Daemon守护进程作为JM在计算节点上的代理,具体负责子任务的执行和监控。
转载地址:http://twfax.baihongyu.com/