首页 > 其他分享 >大数据存储系统

大数据存储系统

时间:2023-05-30 23:01:07浏览次数:45  
标签:Node 文件 缓存 HDFS 存储系统 数据 客户端

相关协议

应用层协议结构

洋葱式结构,一层包一层。

 

相关协议

IP (Internet Protocol)

实现方式:使用IPv4地址,唯一标识一台联网的机器,基于路由转发。

IP包结构:头,数据

特点:无连接,无序,不保证可靠

 

TCP (Transmission Control Protocol)

实现方式:在IP基础上实现

增加的端口号Port:不同的进程通信。

特点:有连接,有序,可靠,建立连接成本高

 

 UDP (User Datagram Protocol) 

实现方式:在IP基础上实现

增加的端口号Port:不同的进程通信。

特点:进行数据校验,其他与IP相同,不需要建立连接,速度快。应用程序自己检查是否收到,是否按照顺序。

 

DNS (Domain Name Service)

TCP端口:53

作用:进行域名解析

全球有根域名服务,各国各自管理自己的域名分配

 

 HTTP (Hyper Text Transfer Protocol)

TCP端口:80

 

进程和线程

进程

创建:通过fork创建

特点:虚拟内存私有,打开文件私有

线程

创建:pthread

特点:虚拟内存共享,打开文件共享,一个进程可以由很多线程

协程

比线程更小,从操作系统的角度看不见,操作系统仍然认为其是一个线程

 

进程间通信方式

共享内存

在单机,要并发控制,一方修改另一方立马可以看到。

消息传递

可单机也可多机,多台机器间传递如socket通信,pipe等。

消息传递基本格式

请求:功能+参数

功能:功能的ID或者功能名,如HTTP GET, HTTP PUT

参数:输入数据,如编码(Encoding),序列化(Serialization)

回答:结果+结果数据

结果:结果ID或者结果名

结果数据:也需要编码和串行化

分布式系统

分布式系统类型

客户端/服务器模型

客户端发送请求,服务器完成操作,发回响应。

P2P模型

没有中心控制节点,节点之间对等。

主从模型

有一个/一组节点为主,进行中心控制协调。其它多个节点为workers,完成具体工作

故障类型

Fail stop

出现故障,进程崩溃

Fail slow

出现故障,运行速度变得很慢,如挖矿病毒

Byzantine failure

恶意攻击

CAP定理

数据一致性(Consistency),可用性(Availability),分区容错(Partition tolerance),三者不可兼得。

系统设计理念

简单往往是最好的,怎么简单怎么来。

分布式文件系统

NFS(Sun’s Network File System)

起源

Sun公司1985发布了NFSv2,定义了开放的client/server之间的通信协议标准。

系统架构

特点

      1. 从不同的终端都可以访问同一个目录
      2. 多用户共享数据
      3. 集中管理

设计目标

      1. 简单快速的恢复
      2. 远程文件操作性能高

保存状态的问题

客户端打开文件时,若文件内部的位置信息保存在NFS服务器中,在发生中断时,读或写的指针位置没有恢复,启动后再写可能面临灾难性后果。

解决方案——无状态

NFS服务器中不保存任何状态。客户端负责主要控制信息,服务器只负责读和写,不保存任何状态。

打开文件

客户端发送一个请求文件命令,服务器返回一个文件标识符,客户端使用此文件标识符对文件进行操作。

读取文件

客户端发送文件标识符,缓冲区,长度,服务器端读取文件后返回数据和文件属性。客户端更新文件记录

写入文件

客户端发送文件标识符,缓冲区,长度,服务器端写入文件后返回文件属性。客户端更新文件记录。

好处:只用重启,什么额外操作都不用

解决方案——Idempotent(幂等性)

在没有其他操作前提下,重复多次结果不变

好处:如果一个请求没有响应,那么就不断重试。

缓存一致性问题

A读取了文件File(version_0.1)放入缓存,B读了文件File(version_0.1)然后在缓存中写,文件变成了File(version_0.2),但是文件并没有更新到文件系统。就会产生问题:

        1. A并不知道B更新了文件,A的缓存的文件是过时的。
        2. C无法读取到B的本地缓存文件,无法读取到最新文件。

解决方案——Flush_on_close_consistency(关闭时更新)

在文件关闭时,自动把缓存中的已经修改的文件数据,写会NFS服务器。

此方法只能解决问题2,可以保证C读取到最新的文件。但是问题1依然无法解决。

(用前检查)为了解决此弊端,规定在每次使用缓存之前,必须检查是否过时,可以解决问题1,但是会带额外的性能开销(即使只有一个用户的时候,都会带来大量的确认更新请求开销)。

AFS (Andrew File System)

设计目标

可伸缩性,使得一个服务器尽可能多的支持客户端。

解决polling状态问题——Invalidation

客户获得一个文件就要在服务器上登记(登记制度

当服务器发现文件被修改,就向登记了的客户发送一个消息,客户就会删除缓存文件并更新。

AFS VS NFS

缓存单位

NFS以数据页为单位缓存,AFS以整个文件为单位缓存。

缓存位置

AFS缓存放在硬盘(所以AFS通常可以缓存大文件。),NFS缓存在内存中。

权限

AFS管理权限比NFS更加详细。

GFS/HDFS

GFS(Google File System)是Google MapReduce系统的基础。

HDFS(Hadoop Distributed File System)是GFS的开源实现,基于Java,是应用层文件系统,与Hadoop捆绑在一起。

应为属于应用层,必须链接到HDFS client库才能使用。

GFS设计目标

大块数据顺序读。

并行追加。

不支持对已有文件的修改操作。(只追加)

HDFS/GFS系统架构

Name Node:存储文件的元数据。

Data Node:存储数据块。

文件切分成定长数据块

每个数据块独立分布在Data Node上

默认每个数据块存储3份,在3个不同的Data Node上。

支持并发读不支持并发写

HDFS/GFS打开文件操作

“打开文件请求”发送给Name Node。

Name Node 返回元数据。

需要与Name Node通信一次。

 

HDFS/GFS读文件操作

得到了元数据,之后的读操作直接绕过Name Data,直接访问Data Node

可以从多个副本中选择最佳的Data Node读取数据。

支持很多并发的读请求。

 

HDFS/GFS写文件操作

写文件是写新创建的文件,不是修改已有的文件。

Name Node决定写在哪个Data Node上。

形成一个数据传递通道,流水线传递方式,最大限度利用网络带宽。

数据传递过程:Primary -> Secondary -> Data Node。

但是此时还没有写进HDFS。此时只是在内存中缓存数据。

Primary给各个节点发送写指令,各个节点返回结果。此时才真正把数据从内存写到HDFS中。

不支持并发写的原因

因为一个写的操作要写3个Data Node。若两个写同时进行,A写Node1,Node2,Node3,选的是Node1为primary,但如果B选了Node2为primary,那么A先写或者B先写,都会有一个的数据的备份被破坏。

并发Append

文件最后一个数据块在同一个primary data node。

相当于单机事务,可以在单机上完成并发控制。

保证append成功,但不保证append顺序

 

 

 

 

 

 

 

 

 

 

 

标签:Node,文件,缓存,HDFS,存储系统,数据,客户端
From: https://www.cnblogs.com/RedNoseBo/p/17240663.html

相关文章

  • 【视频】风险价值VaR原理与Python蒙特卡罗Monte Carlo模拟计算投资组合实例|附代码数
    原文链接:http://tecdat.cn/?p=22862 最近我们被客户要求撰写关于风险价值的研究报告,包括一些图形和统计输出。风险价值(VaR)是一种统计数据,用于量化公司、投资组合在特定时间范围内可能发生的财务损失程度什么是风险价值(VaR)?该指标最常被投资银行和商业银行用来确定其机构......
  • R数据类型
    数值(Numeric):用于表示实数,包括整数和浮点数。例如,3、3.14等。整数(Integer):用于表示整数值。在R中,整数可以通过在数字后面加上"L"或使用函数as.integer()进行显式转换。例如,3L、as.integer(5.8)等。字符串(Character):用于表示文本数据。字符串需要使用引号(单引号或双引号)括起来......
  • 【Unity】记录一下:自定义组件的InspectorGUI面板,修改数据不保存问题
    使用target修改之后需要使用EditorUtility.SetDirty设置为脏,但是要注意的是应该设置target所指代的组件,而非是对.gameObject设置为脏,这是没有用的。[CustomEditor(typeof(MerryGoRound))]publicclassMerryGoRoundEditor:Editor{publicoverridevoidOnInspectorGUI(......
  • 基于ResNet18深度学习网络的mnist手写数字数据库识别matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要ResNet系列网络,图像分类领域的知名算法,经久不衰,历久弥新,直到今天依旧具有广泛的研究意义和应用场景。被业界各种改进,经常用于图像识别任务。ResNet-18,数字代表的是网络的深度,也就是说ResNet18网络就是18层的吗?实......
  • 基于ResNet18深度学习网络的mnist手写数字数据库识别matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:    2.算法涉及理论知识概要        ResNet系列网络,图像分类领域的知名算法,经久不衰,历久弥新,直到今天依旧具有广泛的研究意义和应用场景。被业界各种改进,经常用于图像识别任务。ResNet-18,数字代表的是网络的深度,也就......
  • parquet文件格式——本质上是将多个rows作为一个chunk,同一个chunk里每一个单独的colum
    Parquet是Twitter贡献给开源社区的一个列数据存储格式,采用和Dremel相同的文件存储算法,支持树形结构存储和基于列的访问。ClouderaImpala也将使用Parquet作为底层的存储格式。在很多大数据的应用场景下面,比如电信行业,具有一定规则的数据,字段很多,但是每次查询仅仅针对其中少数的几个......
  • 基于JAVA的springboot+vue学生综合测评系统,附源码+数据库+论文+PPT
    1、项目介绍本学生综合测评系统以springboot作为框架,b/s模式以及MySql作为后台运行的数据库,同时使用Tomcat用为系统的服务器。本系统主要包括首页,个人中心,学生管理,试题信息管理,测评试题管理,管理员管理,综合测评管理,系统管理,综合考试管理等功能,通过这些功能的实现基本能够满足日常......
  • NoSQL数据库简介
    利用nginx做反向代理分布式集群存在session如何存储的问题?1、存储到客户端cookie,不安全,网络负担效率低2、存在文件服务器或者数据库里,大量的IO效率问题2、session复制,session数据冗余,节点越多浪费越大3、NoSQL数据库,缓存数据库,完全存在内存中,速度快,数据结构简单NoSQL作为缓存......
  • Python爬取豆瓣电影Top250 + 数据可视化
    我的这篇博客的一些代码解释python大作业电影演员数据分析1.爬取数据1.1导入以下模块importosimportreimporttimeimportrequestsfrombs4importBeautifulSoupfromfake_useragentimportUserAgentfromopenpyxlimportWorkbook,load_workbook1.2获取每页......
  • SQLite与MySQL与PostgreSQL:关系数据库的比较
    概述和功能SQLite是一个基于文件的嵌入式RDBMS,不需要任何安装或设置。反过来,这意味着应用程序不在需要启动,停止或配置的单独服务器进程下运行。这种无服务器架构使数据库能够跨平台兼容。完整的SQL数据库包含在单个磁盘文件中,所有读取和写入都直接在此磁盘文件上进行。由于数据直接......