大数据---浅谈Hadoop工作原理

news2024/11/28 0:51:50

浅谈Hadoop工作原理


文章目录

  • 浅谈Hadoop工作原理
  • Hadoop核心组件
  • HDFS读写原理
    • HDFS读文件
    • HDFS写文件
  • MapReduce原理
    • Map流程
    • Reduce流程
    • Shuffle机制(无序--->有序)


Hadoop核心组件

Hadoop HDFS(分布式存储系统):解决海量数据存储
Hadoop YARN(集群资源管理和任务调度框架):解决资源任务调度
Hadoop MapReduce(分布式计算):解决海量数据计算


HDFS读写原理

HDFS读文件

在这里插入图片描述
1.首先调用FileSystem.open()方法,获取到DistributedFileSystem实例
2.DistributedFileSystem向NameNode发起RPC(远程过程调用)请求获得文件的开始部分或全部block列表,对于每个返回的块,都包含块所在的DateNode地址,这些DataNode会按照Hadoop定义的集群拓扑结构得出客户端的距离,然后再进行排序。如果客户端本身就是一个DataNode,那么他将从本地读取文件
3.DistributedFileSystem会向客户端client返回一个支持文件定位的输入流对象FSDateInputStream,用于客户端读取数据。FSDateInputStream包含一个DFSInputStream对象,这个对象用来管理DataNode和NameNode之间的I/O
4.客户端调用read()方法,DFSInputStream就会找出离客户端最近的datanode并连接datanode
5.DFSInputStream对象中包含文件开始部分的数据块所在的DateNode地址,首先它会连接包含文件第一个块最近的DataNode。随后,在数据流中重复调用read()函数,直到这个块全部读完为止。如果第一个block块的数据读完,就会关闭指向第一个block块的datanode连接,接着读取下一个block块
6.如果第一批block都读完了,DFSInputStream就会去NameNode拿下一批blocks的location,然后继续读,如果所有的block块都读完,这时就会关闭所有流

HDFS写文件

在这里插入图片描述
1 .客户端client 通过Distributed FileSystem向NameNode发起文件上传请求,NameNode检查目标文件是否已存在,父目录是否存在
2.NameNode校验完成后返回客户端首地址的位置
3.确定可以上传,客户端请求第一个block上传到哪几个datanode服务器上
4.NameNode返回3个datanode节点,假定分别为dn1,dn2,dn3
5.客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个管道pipeline建立完成
6.dn1,dn2,dn3逐级应答客户端
7.客户端开始往dn1都上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet(64KB)为单位,dn1收到一个packet就会传给dn2,dn2传给dn3;dn1每传一个parket会放入一个应答队列等待应答
8.当一个block传输完成之后,客户端再次请求NameNode上传第二个block的服务器。

MapReduce原理

在这里插入图片描述

Map流程

第一阶段:把输入目录下文件按照一定的标准逐个进行辑切片形成切片规划。默认Splitsize=Blocksize(128M)每一个切片由一一个MapTask处理(getSpIits)
第二阶段:对切片中的数据按照一定的规则读取解析返回〈key,value>对。默认是按行读取数据。key是每一行的起始位置偏移量,value是本行的文本内容。(TextInputFormart)
第三阶段:调用Mapper类中的map方法处理数据。每读取解析出来的一个<key,value>,调用一次map方法。
第四阶段:按照一定的规则对Map输出的值对进行分区partition。默认不分区,因为只有一个reducetask。分区的数量就是reducetask运行的数量
第五阶段:Map输出数据写入内存缓冲区,达到比例溢出到磁盘上。溢出spill的时候根据key进行排序sort。默认根据key字典序排序。
第六阶段:对所有溢出文件进行最终的merge合并,成为一个文件。

Reduce流程

第一阶段:ReduceTask会主动从MapTask复制拉取属于需要自己处理的数据。
第二阶段:把拉取来数据,全部进行合井merge,即把分散的数据合并成一个大的数据。再对合并后的数据排序。
第三阶段:是对排序后的键值对调用reduce方法。键相等的键值对调用一次reduce方法。最后把这些输出的键值对写入到HDFS文件中。

Shuffle机制(无序—>有序)

Shuffe的本意是洗牌、混洗的意思,把一组有规则的数据尽量打乱成无规则的数据。而在MapReduce中,Shuffe更像是洗牌的逆过程,指的是将map端的无规则输出按指定的规则“打乱“成具有一定规则的数据,以便reduce端接收处理。一般把从Map产生输出开始到Reduce取得数据作为输入之前的过程称作shuffle。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/331637.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

target31对传感器采样率限制

target31谷歌做了一些列的适配&#xff0c;其中对看似无关紧要的传感器采用率做了限制&#xff0c;最近几年很火的摇一摇开屏广告就是基于传感器去实现的。这篇文章&#xff0c;我们就一起去看一下target31对传感器采样频率的限制。 一、背景 先说一下背景&#xff1a;近期&am…

使用 QuTrunk+Amazon Deep Learning AMI(TensorFlow2)构建量子神经网络

量子神经网络是基于量子力学原理的计算神经网络模型。1995年&#xff0c;Subhash Kak 和 Ron Chrisley 独立发表了关于量子神经计算的第一个想法&#xff0c;他们致力于量子思维理论&#xff0c;认为量子效应在认知功能中起作用。然而&#xff0c;量子神经网络的典型研究涉及将…

103-并发编程详解(下篇)

这里还是续写上一章博客 线程池与Future&#xff1a; 线程池的实现原理&#xff1a; 下图所示为线程池的实现原理&#xff1a;调用方不断地向线程池中提交任务&#xff0c;线程池中有一组线程&#xff0c;不断地从队列中取 任务&#xff0c;这是一个典型的生产者—消费者模型…

python基于django的高校招生管理系统

目录 1 绪论 1 1.1课题背景 1 1.2课题研究现状 1 1.3初步设计方法与实施方案 2 1.4本文研究内容 2 2 系统开发环境 4 2.1 使用工具简介 4 2.2 环境配置 4 2.3 B/S结构简介 4 2.4 MySQL数据库 5 2.5 框架介绍 5 3 系统分析 6 3.1系统可行性分析 6 3.1.1经济可行性 6 3.1.2技术可…

Linux驱动开发基础__mmap

目录 1 引入 2 内存映射现象与数据结构 3 ARM 架构内存映射简介 3.1 一级页表映射过程 3.2 二级页表映射过程 4 怎么给 APP 新建一块内存映射 4.1 mmap 调用过程 ​编辑4.2 cache 和 buffer 4.3 驱动程序要做的事 5 编程 5.1 app编程 5.2 hello_drv_test…

操作符——“C”

各位CSDN的uu们你们好呀&#xff0c;今天&#xff0c;总算是要到我们的操作符啦&#xff0c;在C语言中&#xff0c;操作符是一个极为复杂的东西&#xff0c;下面&#xff0c;就让我们进入操作符的世界吧 算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符…

Spring Data JPA和Mybatis介绍

上一篇博客中简要介绍了如何通过Spring Data JPA操作数据库&#xff0c;并提供了Demo&#xff0c;从Demo中可以看到&#xff0c;Spring data JPA提供了很多Repository&#xff0c;继承这些Repository或者直接使用Repository中提供的方法&#xff0c;即可对数据进行增删改查操作…

【刷题笔记】--二叉搜索树--查找,插入

二叉搜索树的性质&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。两道力扣题&#xff1a;①查找二叉搜索树中的某个根节点。②在二叉搜索树中插入某个结点 题目①leedcode700&#x…

大数据技术架构(组件)26——Spark:Shuffle

2.1.6、Shuffle2.1.6.0 Shuffle Read And WriteMR框架中涉及到一个重要的流程就是shuffle,由于shuffle涉及到磁盘IO和网络IO&#xff0c;所以shuffle的性能直接影响着整个作业的性能。Spark其本质也是一种MR框架&#xff0c;所以也有自己的shuffle实现。但是和MR中的shuffle流程…

九龙证券|军工股全线走强!中航电测又涨停,这一板块所有个股都在涨

今天早盘&#xff0c;A股全体低开高走&#xff0c;到午间收盘&#xff0c;主要股指均红盘报收&#xff0c;两市成交仍旧低迷。 盘面上&#xff0c;国防军工、酒店餐饮、芯片、钙钛矿电池等板块涨幅居前&#xff0c;文教休闲、锂矿、水产品、供销社等板块跌幅居前。北上资金净流…

使用openai-whisper 语音转文字

前言&#xff1a;最近由于ChatGPT 的大热&#xff0c;AI 应用领域再次进入大众的视线&#xff0c;今天介绍一款AI应用whisper 可以较为准确的将人声转换为文字&#xff08;支持多国语言&#xff09;一、安装安装有两种方式pip 和源码编译安装&#xff0c;这里介绍pip安装方式安…

尚医通(八) Nginx

目录一、项目中的服务地址二、配置nginx反向代理1、安装window版的nginx2、配置nginx代理3、重启nginx4、测试三、配置开发环境1、修改文件内2、重启前端程序一、项目中的服务地址 只有一个api地址的配置位置&#xff0c;而我们实际的后端有很多微服务&#xff0c;所以接口地址…

C#【必备技能篇】序列化与反序列化(json、xml、二进制文件)

文章目录一、序列化为json1、序列化与反序列化【基本使用】实例代码&#xff1a;2、封装成泛型方法【可以公用】实例代码&#xff1a;二、序列化为xml1、序列化与反序列化【基本使用】实例代码&#xff1a;2、封装成泛型方法【可以公用】实例代码&#xff1a;三、序列化为二进制…

Windows sshfs挂载远程文件夹

Windows sshfs挂载远程文件夹 Windows系统通过sshfs&#xff0c;远程挂载文件服务&#xff0c;实现远程文件夹共享的功能 目录 Windows sshfs挂载远程文件夹 1.安装WinFsp 2.安装SSHFS-Win 3.挂载Linux文件服务 4.断开Linux文件服务 1.安装WinFsp 下载地址&#xff1a;…

Vue3配置路由(vue-router)

文章目录前言一、配置路由&#xff08;vue-router&#xff09;1、安装路由2、新建页面3、创建路由配置文件4.特殊报错&#xff01;前言 紧接上篇文章&#xff0c;vue3的配置与vue2是有所差别的&#xff0c;本文就讲述了如何配置&#xff0c;如果本文对你有所帮助请三连支持博主…

2023-02-09 Elasticsearch 模糊搜索

1 prefix 前缀搜索 以前缀开头的搜索&#xff0c;不计算相关度得分 前缀搜索匹配的是term&#xff0c;而不是field。 前缀搜索的性能很差 前缀搜索没有缓存 前缀搜索尽可能把前缀长度设置的更长 针对于中文分词器 index_prefixes: 默认 “min_chars” : 2, “max_chars” : …

CMMI落地常见4大问题及改进措施

&#xff08;一&#xff09;、CMMI落地常见的4大问题&#xff1a; 1、组织成员并非全部认可与参与 在CMMI推行过程中&#xff0c;过程改进小组EPG负责整个改进工作&#xff0c;但组织其他成员并不是全部认可和自愿参与&#xff0c;甚至有些成员认为与自己无关。从而造成EPG在推…

Spring-Data-Jpa实现继承实体类

写在前面&#xff1a;从2018年底开始学习SpringBoot&#xff0c;也用SpringBoot写过一些项目。现在对学习Springboot的一些知识总结记录一下。如果你也在学习SpringBoot&#xff0c;可以关注我&#xff0c;一起学习&#xff0c;一起进步。 相关文章&#xff1a; 【Springboot系…

ZooKeeper 避坑实践: Zxid溢出导致选主

作者&#xff1a;子葵 背景 线上 flink 用户使用 ZooKeeper 做元数据中心以及集群选主&#xff0c;一些版本的 flink 在 ZooKeeper 选主时&#xff0c;会重启 Job&#xff0c;导致一些非预期的业务损失。而 ZooKeeper 在 zxid溢出时&#xff0c;会主动触发一次选主&#xff0…

复习0206

目录 一、访问修饰符 一、权限范围 二、注意事项 二、封装&#xff08;面向对象的三大特征之一&#xff09; 一、封装的好处 二、封装的实现步骤 三、和构造器结合 四、练习题中的细节 一、访问修饰符 一、权限范围 访问修饰符用于控制方法和属性&#xff08;成员变量…