1.什么是hadoop处理框架?

Apache Hadoop是一种专用于批处理的处理框架。Hadoop是首个在开源社区获得极大关注的大数据框架。基于谷歌有关海量数据处理所发表的多篇论文与经验的Hadoop重新实现了相关算法和组件堆栈,让大规模批处理技术变得更易用。

Hadoop 由 HDFS 、 MapReduce 、 HBase 、 Hive 和 ZooKeeper 等成员组成,其中最基础最重要元素为底层用于存储集群中所有存储节点文件的文件系统 HDFS(Hadoop Distributed File System)来执行 MapReduce 程序的 MapReduce 引擎。

  • Pig 是一个基于 Hadoop 的大规模数据分析平台, Pig 为复杂的海量数据并行计算提供了一个简单的操作和编程接口
  • Hive 是基于 Hadoop 的一个工具,提供完整的 SQL 查询,可以将 sql 语句转换为 MapReduce 任务进行运行
  • ZooKeeper :高效的,可拓展的协调系统,存储和协调关键共享状态;
  • HBase 是一个开源的,基于列存储模型的分布式数据库;
  • HDFS 是一个分布式文件系统,有着高容错性的特点,适合那些超大数据集的应用程序;
  • MapReduce 是一种编程模型,用于大规模数据集(大于1TB)的并行运算。

1、HDFS

HDFS 是一个高度容错性的分布式文件系统,可以被广泛的部署于廉价的 PC 上。它以流式访问模式访问应用程序的数据,这大大提高了整个系统的数据吞吐量,因而非常适合用于具有超大数据集的应用程序中。
HDFS 的架构如图所示。 HDFS 架构采用主从架构(master/slave)。一个典型的 HDFS 集群包含一个 NameNode 节点和多个 DataNode 节点。 NameNode 节点负责整个 HDFS 文件系统中的文件的元数据的保管和管理,集群中通常只有一台机器上运行 NameNode 实例, DataNode 节点保存文件中的数据,集群中的机器分别运行一个 DataNode 实例。在 HDFS 中, NameNode 节点被称为名称节点, DataNode 节点被称为数据节点。 DataNode 节点通过心跳机制与 NameNode 节点进行定时的通信。

NameNode

NameNode 可以看作是分布式文件系统中的管理者,存储文件系统的 meta-data ,主要负责管理文件系统的命名空间,集群配置信息,存储块的复制。

DataNode

DataNode 是文件存储的基本单元。它存储文件块在本地文件系统中,保存了文件块的 meta-data ,同时周期性的发送所有存在的文件块的报告给 NameNode 。

Client

Client 就是需要获取分布式文件系统文件的应用程序。

以下来说明 HDFS 如何进行文件的读写操作:

文件写入

  1. Client 向 NameNode 发起文件写入的请求
  2. NameNode 根据文件大小和文件块配置情况,返回给 Client 它所管理部分 DataNode 的信息。
  3. Client 将文件划分为多个文件块,根据 DataNode 的地址信息,按顺序写入到每一个 DataNode 块中。

文件读取

  1. Client 向 NameNode 发起文件读取的请求
  2. NameNode 返回文件存储的 DataNode 的信息
  3. Client 读取文件信息

2、MapReduce

MapReduce 是一种编程模型,用于大规模数据集的并行运算。Map(映射)和 Reduce(化简),采用分而治之思想,先把任务分发到集群多个节点上,并行计算,然后再把计算结果合并,从而得到最终计算结果。多节点计算,所涉及的任务调度、负载均衡、容错处理等,都由 MapReduce 框架完成,不需要编程人员关心这些内容。
下图是 MapReduce 的处理过程:

用户提交任务给 JobTracer , JobTracer 把对应的用户程序中的 Map 操作和 Reduce 操作映射至 TaskTracer 节点中;输入模块负责把输入数据分成小数据块,然后把它们传给 Map 节点; Map 节点得到每一个 key/value 对,处理后产生一个或多个 key/value 对,然后写入文件; Reduce 节点获取临时文件中的数据,对带有相同 key 的数据进行迭代计算,然后把终结果写入文件。

如果这样解释还是太抽象,可以通过下面一个具体的处理过程来理解:( WordCount 实例)

Hadoop 的核心是 MapReduce ,而 MapReduce 的核心又在于 map 和 reduce 函数。它们是交给用户实现的,这两个函数定义了任务本身。

map 函数:接受一个键值对(key-value pair)(例如上图中的 Splitting 结果),产生一组中间键值对(例如上图中 Mapping 后的结果)。 Map/Reduce 框架会将 map 函数产生的中间键值对里键相同的值传递给一个 reduce 函数。
reduce 函数:接受一个键,以及相关的一组值(例如上图中 Shuffling 后的结果),将这组值进行合并产生一组规模更小的值(通常只有一个或零个值)(例如上图中 Reduce 后的结果)

但是, Map/Reduce 并不是万能的,适用于 Map/Reduce 计算有先提条件:

  • 待处理的数据集可以分解成许多小的数据集
  • 每一个小数据集都可以完全并行地进行处理

若不满足以上两条中的任意一条,则不适合适用Map/Reduce模式。

2.hadoop框架包含哪些组件及其功能

新版Hadoop包含多个组件,即多个层,通过配合使用可处理批数据:

  • HDFS:主管数据的读取和存储。HDFS是一种分布式文件系统层,可对集群节点间的存储和复制进行协调。HDFS确保了无法避免的节点故障发生后数据依然可用,可将其用作数据来源,可用于存储中间态的处理结果,并可存储计算的最终结果。

  • YARN:资源管理器。YARN是Yet Another Resource Negotiator(另一个资源管理器)的缩写,可充当Hadoop堆栈的集群协调组件。该组件负责协调并管理底层资源和调度作业的运行。通过充当集群资源的接口,YARN使得用户能在Hadoop集群中使用比以往的迭代方式运行更多类型的工作负载。

  • MapReduce:处理数据的引擎。MapReduce是Hadoop的原生批处理引擎。

    批处理模式

      Hadoop的处理功能来自MapReduce引擎。MapReduce的处理技术符合使用键值对的map、shuffle、reduce算法要求。基本处理过程包括:

  • 从HDFS文件系统读取数据集

  • 将数据集拆分成小块并分配给所有可用节点

  • 针对每个节点上的数据子集进行计算(计算的中间态结果会重新写入HDFS)

  • 重新分配中间态结果并按照键进行分组

  • 通过对每个节点计算的结果进行汇总和组合对每个键的值进行“Reducing”

  • 将计算而来的最终结果重新写入 HDFS

3.优势和局限

  由于这种方法严重依赖持久存储,每个任务需要多次执行读取和写入操作,因此速度相对较慢。但另一方面由于磁盘空间通常是服务器上最丰富的资源,这意味着MapReduce可以处理非常海量的数据集。同时也意味着相比其他类似技术,Hadoop的MapReduce通常可以在廉价硬件上运行,因为该技术并不需要将一切都存储在内存中。MapReduce具备极高的缩放潜力,生产环境中曾经出现过包含数万个节点的应用。

  MapReduce的学习曲线较为陡峭,虽然Hadoop生态系统的其他周边技术可以大幅降低这一问题的影响,但通过Hadoop集群快速实现某些应用时依然需要注意这个问题。

  围绕Hadoop已经形成了辽阔的生态系统,Hadoop集群本身也经常被用作其他软件的组成部件。很多其他处理框架和引擎通过与Hadoop集成也可以使用HDFS和YARN资源管理器。

4.总结

  Apache Hadoop及其MapReduce处理引擎提供了一套久经考验的批处理模型,最适合处理对时间要求不高的非常大规模数据集。通过非常低成本的组件即可搭建完整功能的Hadoop集群,使得这一廉价且高效的处理技术可以灵活应用在很多案例中。与其他框架和引擎的兼容与集成能力使得Hadoop可以成为使用不同技术的多种工作负载处理平台的底层基础。

5.其他 combine、partition和shuffle怎么理解

combine和partition都是函数,中间的步骤应该只有shuffle!

combine分为map端和reduce端,作用是把同一个key的键值对合并在一起,可以自定义的。
combine函数把一个map函数产生的<key,value>对(多个key,value)合并成一个新的<key2,value2>.将新的<key2,value2>作为输入到reduce函数中
这个value2亦可称之为values,因为有多个。这个合并的目的是为了减少网络传输。

partition是分割map每个节点的结果,按照key分别映射给不同的reduce,也是可以自定义的。这里其实可以理解归类。
我们对于错综复杂的数据归类。比如在动物园里有牛羊鸡鸭鹅,他们都是混在一起的,但是到了晚上他们就各自牛回牛棚,羊回羊圈,鸡回鸡窝。partition的作用就是把这些数据归类。只不过在写程序的时候,mapreduce使用哈希HashPartitioner帮我们归类了。这个我们也可以自定义。

shuffle是map和reduce之间的过程,包含了两端的combine和partition。

Map的结果,会通过partition分发到Reducer上,Reducer做完Reduce操作后,通过OutputFormat,进行输出
shuffle阶段的主要函数是fetchOutputs(),这个函数的功能就是将map阶段的输出,copy到reduce 节点本地。

Shuffle的正常意思是洗牌或弄乱,Shuffle描述着数据从map task输出到reduce task输入的这段过程。partition,是划分,分区,归类,是shuffle的一部分。Shuffle描述着数据从map task输出到reduce task输入的这段过程。

参考:
1.https://www.jianshu.com/p/8301d49595f7
2.shuffle:https://blog.csdn.net/firemaple_li/article/details/67657855

【大数据】计算引擎之三:Hadoop处理框架相关推荐

  1. 轻量级大数据计算引擎esProc SPL,Hadoop Spark太重

    前言 背景:随着大数据时代的来临,数据量不断增长,传统小机上跑数据库的模式扩容困难且成本高昂,难以支撑业务发展. 应对之法:很多用户开始转向分布式计算路线,用多台廉价的PC服务器组成集群来完成大数据计 ...

  2. spark大数据计算引擎原理深剖(优缺点)-spark简介

    用spark,你仅仅只是调用spark的API肯定是很low的. 今天来讲讲spark的原理,并且会针对部分源码进行讲解,如有不同意见请联系本人交流探讨. 目前大数据生态主要部分是Hadoop软件框架 ...

  3. 上:Spark VS Flink – 下一代大数据计算引擎之争,谁主沉浮?

    作者简介 王海涛,曾经在微软的 SQL Server和大数据平台组工作多年.带领团队建立了微软对内的 Spark 服务,主打 Spark Streaming.去年加入阿里实时计算部门,参与改进阿里基于 ...

  4. 大数据(三)大数据计算引擎

    文章目录 说明 分享 大数据计算引擎 批处理 MapReduce tez 流批处理 Flink spark 总结 说明 本博客每周五更新一次. 介绍过大数据平台的搭建.应用和存储,本期分享下大数据计算 ...

  5. Apache Flink 为什么能够成为新一代大数据计算引擎?

    众所周知,Apache Flink(以下简称 Flink)最早诞生于欧洲,2014 年由其创始团队捐赠给 Apache 基金会.如同其他诞生之初的项目,它新鲜,它开源,它适应了快速转的世界中更重视的速 ...

  6. 大数据计算引擎之Flink Flink CEP复杂事件编程

    原文地址:大数据计算引擎之Flink Flink CEP复杂事件编程 复杂事件编程(CEP)是一种基于流处理的技术,将系统数据看作不同类型的事件,通过分析事件之间的关系,建立不同的时事件系序列库,并利 ...

  7. Spark 凭什么成为最火的大数据计算引擎?

    这年代,做数据的,没人不知道 Spark 是什么吧.作为最火的大数据计算引擎,现在基本上是各互联网大厂的标配了. 比如,字节跳动基于 Spark 构建的数据仓库,服务了几乎所有的产品线,包括抖音.今日 ...

  8. 揭秘阿里云EB级大数据计算引擎MaxCompute

    日前,全球权威咨询与服务机构Forrester发布了<The Forrester WaveTM: Cloud Data Warehouse, Q4 2018>报告.这是Forrester ...

  9. 大数据计算引擎:impala对比hive

    目录 Impala与Hive的异同 数据存储 元数据 SQL解释处理 执行计划: 数据流: 内存使用: 调度: 容错: 适用面: Impala相对于Hive所使用的优化技术 Impala的优缺点 Im ...

  10. 为什么Spark能成为最火的大数据计算引擎?它是怎样工作的?

    导读:零基础入门Spark必读. 作者:朱凯 来源:大数据DT(ID:hzdashuju) 01 概述 十年前我们只有Hadoop,大家首先通过HDFS实现海量数据的共享存储,然后使用MapReduc ...

最新文章

  1. Xilinx 学习笔记1---新建工程和创建源代码文件
  2. 关于虚拟机的三种网络接口模式(以VXBOX虚拟机为例)
  3. markdown软件_实用软件推荐|Markdown文本编辑器之Typora
  4. 一步一步SharePoint 2007之五:向网站中添加一个子网站
  5. 面向对象(静态成员内部类的调用)
  6. php将对象转换成数组
  7. jQuery操作select控件取值和设值
  8. VScode加文件头的方式
  9. 百度万年历API(主要获取节假日和调休工作日数据)
  10. 计算机应用职业生涯规划,计算机应用技术职业规划书|计算机应用专业个人职业规划...
  11. 迷途Emlog模板全站好看的透明变色模板+源码
  12. idea设置静态壁纸步骤
  13. Java 细品 重写equals方法 和 hashcode 方法
  14. 像“毒液”一样的粘液机器人火了,能取出体内异物,穿过1.5mm细缝无压力!...
  15. 带你玩转kubernetes-k8s(第14篇:k8s-深入掌握Pod-在容器内获取Pod信息)
  16. Elastic Search:(二)分词器
  17. 万物互联方显云雄本色
  18. 关于echarts导出图片不显示数据问题
  19. 【无标题】奥的斯故障代码分析(新版)
  20. LoRa芯片SX1278官方驱动移植

热门文章

  1. 师范计算机专业前景,师范数学专业就业前景
  2. 百度云盘搜索助手 V1.2(可查询提取码,带5个搜索引擎)
  3. 2023年第二十届五一数学建模竞赛题目 C题详细思路
  4. 段永朝,比较2012-2016,深度解读互联网女皇《互联网趋势报告》
  5. 腾讯阿里O2O布局:一个偏2C一个偏2B
  6. ar谱matlab实验,用MATLAB进行AR模型功率谱分析
  7. 机器学习——Logit模型
  8. Python的高级函数
  9. Unity笔记——FairyGUI
  10. python 进行音频处理,单声道变双声道,提升音量