当前位置: 首页 > news >正文

hadoop入门

hadoop入门(面试需要)

 MapReduce简介:(参考)

  1. MapReduce是一种分布式计算模型,主要应用于搜索领域,解决海量数据的计算问题。
  2. 有两个阶段map(),reduce(),实现这两个阶段即可实现分布式计算。

MapReduce执行过程:


 

MapReduce原理:

 

 

MapReduce执行步骤:

map过程

  1. 读取hdfs中的文件,逐行解析成key-value键值对,并对每个key-value键值对调用一次map函数。
    eg.<hadoop hello \n hadoop bigdata>====》<1,hadoop hello><2,hadoop bigdata>
  2. 覆盖上一次的map(),对执行的结果(<k,v>)继续进行处理,转换成新的<k,v>
    eg.<hadoop,1><hello,1><hadoop,1><bigdata,1>
  3. 对输出的<k,v>进行分区,默认分为一个区(partitioner)
  4. 对不同分区中的数据进行排序(按照k)、分组。分组指的是相同key的value放到一个集合中。 
    排序后:<bigdata,1> <hadoop,1> <hadoop,1> <hello,1>  分组后:<bigdata,{1}><hadoop,{1,1}><hello,{1}>
  5. 对分组后的数据进行规约(可有)
    combiner
    • 每一个map可能会产生大量的输出,combiner的作用就是在map端对输出先做一次合并,以减少传输到reducer的数据量。
    • combiner最基本是实现本地key的归并,combiner具有类似本地的reduce功能。 如果不用combiner,那么,所有的结果都是reduce完成,效率会相对低下。使用combiner,先完成的map会在本地聚合,提升速度。
    • 注意:Combiner的输出是Reducer的输入,Combiner绝不能改变最终的计算结果。所以从我的想法来看,Combiner只应该用于那种Reduce的输入key/value与输出key/value类型完全一致,且不影响最终结果的场景。比如累加,最大值等。
    为什么使用Combiner?Combiner发生在Map端,对数据进行规约处理,数据量变小了,传送到reduce端的数据量变小了,传输时间变短,作业的整体时间变短。
    为什么Combiner不作为MR运行的标配,而是可选步骤呢?因为不是所有的算法都适合使用Combiner处理,例如求平均数。
    Combiner本身已经执行了reduce操作,为什么在Reducer阶段还要执行reduce操作呢?combiner操作发生在map端的,处理一个任务所接收的文件中的数据,不能跨map任务执行;只有reduce可以接收多个map任务处理的数据。

Reduce过程

  1. 多个map任务的输出,按照不同的分区,通过网络将输出复制到不同的节点上,shuffle过程

  2. 对多个map的输出进行合并,排序。覆盖Reduce函数,接收的是分组后的数组,实现自己的业务逻辑。
    <bigdata,1><hadoop,2><hello,1>
  3. 将Reduce产生的结果输出到hdfs中。

 

转载于:https://www.cnblogs.com/Try-kevin/p/7887166.html

相关文章:

  • 如何将Win7做为NTP服务器
  • linux内存慢性扼杀
  • 命令行下显示mnist中图片的问题
  • webpack 图片的打包
  • git过滤提交文件
  • Unity Shader 之 渲染流水线
  • 1mysql二进制 安装
  • Docker安装和使用
  • 详解Bootstrap fileinput文件上传组件的实例
  • 【JAVA】基础知识_常见问题1
  • CAS单点登录(一):服务端搭建
  • C++ new失败的处理
  • LTE-Advanced(4G)主要技术学习:CA、CoMp、HetNet
  • core文件生成和路径设置
  • MySQL安装和简单操作
  • 11111111
  • Flannel解读
  • JAVA多线程机制解析-volatilesynchronized
  • JSONP原理
  • MySQL QA
  • Python_网络编程
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 飞驰在Mesos的涡轮引擎上
  • 判断客户端类型,Android,iOS,PC
  • 前端面试题总结
  • 使用Swoole加速Laravel(正式环境中)
  • 鱼骨图 - 如何绘制?
  • 中文输入法与React文本输入框的问题与解决方案
  • Spring Batch JSON 支持
  • 积累各种好的链接
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • !$boo在php中什么意思,php前戏
  • # Maven错误Error executing Maven
  • #define用法
  • #pragma multi_compile #pragma shader_feature
  • (C语言)共用体union的用法举例
  • (二)c52学习之旅-简单了解单片机
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (强烈推荐)移动端音视频从零到上手(上)
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (一)插入排序
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)Sublime Text3配置Lua运行环境
  • .aanva
  • .dwp和.webpart的区别
  • .Net CF下精确的计时器
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .net程序集学习心得
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • [145] 二叉树的后序遍历 js
  • [8481302]博弈论 斯坦福game theory stanford week 1