当前位置:   article > 正文

云计算复习一轮_分布式存储目前理论节点最多

分布式存储目前理论节点最多

疑问

2 . GFS 的读写过程

14 . wordcount

第一章

  1. 大数据特征( 4 V + 1 C 4V+1C 4V+1C
  • 数据量大( v o l u m e volume volume
  • 多样( v a r i e t y variety variety
  • 快速( v e l o c i t y velocity velocity
  • 价值密度低( v a l u e value value
  • 复杂度( c o m p l e x i t y complexity complexity
  1. 云计算特点
  • 超大规模
  • 虚拟化
  • 高可靠性
  • 通用性
  • 高可伸缩性
  • 按需服务
  • 极其廉价
  1. 云计算按服务类型分为三类:将基础设施作为服务(SQS;允许用户动态申请和释放节点,按量计费;具有更高的资源使用效率)、将平台作为服务(提供用户应用程序的运行环境;负责资源的动态扩展和容错管理;用户的自主权降低)、将软件作为服务(针对性更强,只提供某些专门用途的服务供应用调用)

  2. Google 云计算三大法宝:GFS、MapReduce、Bigtable

  3. 云计算技术体系结构分为 4 层:物理资源层、资源池层、管理中间件层、SOA 构建层(依靠外部设施提供)

  4. “新摩尔定律”:每 18 个月全球新增信息量是计算机有史以来全部信息量的总和

什么是云计算

云计算定义
云计算是一种商业计算模型。它将计算任务分布在大量计算机构成的资源池上,使各种应用系统能够根据需要获取计算力、存储空间和信息服务

大数据定义
海量数据或巨量数据,其规模巨大到无法通过目前主流的计算机系统在合理时间内获取、存储、管理、处理并提炼以帮助使用者决策

云计算 7 个特点

  • 超大规模
  • 虚拟化
  • 高可靠性
  • 通用性
  • 高可伸缩性
  • 按需服务
  • 及其廉价

在这里插入图片描述

云计算的服务方式:

  • 公有云
  • 私有云
  • 混合云

分布式文件系统 GFS

GFS:基于数据块存储的大型分布式文件系统(通过 Shell 命令方式访问;提供客户端编程接口)

在这里插入图片描述
GFS 的体系结构中组成部分包括:GFS 客户端、GFS 主服务器、GFS 数据块服务器

实现分布式存储:数据块被存入多个数据块服务器

实现并行访问:数据流和控制流并行访问

处理服务器失效:数据块以多个副本存入块服务器(默认 3 个)

面对数据不断增长:增设服务器

分布式数据处理 MapReduce

MapReduce:处理海量数据的并行编程模型,函数式编程,其编程模式分为 Map 操作和 Reduce 操作

实现机制:
在这里插入图片描述
实现分布式计算:Map 工作机相互独立;Reduce 工作机处理的中间结果互不交叉

实现并行计算:数据流和控制流并行访问

处理集群节点错误:空闲的处理机处理

Map 工作机的数量由数据块(输入文件被划分的分块数,输入文件的大小及文件块大小)决定;Reduce 工作机的数量由用户自定义

BigTable Google 分布式结构化存储数据表

BigTable 是分布式多维映射表,其中多维是指 row、column、time,该系统架构组成部分包括 BigTable 主服务器、BigTable 子表服务器、BigTable 客户端

  • 如何组织网页?
    将网址作为行关键字;采用网址倒置;可任意多行
  • 如何组织网页中不同内容?
    列分为列族(列族:限定词),可任意多列
  • 如何处理网页更新
    为数据保存时间戳:规定版本数,规定时间范围
  • 如何面对多种数据结构
    对存储的内容不做解释,存储字符串

BigTable被分割成多个子表,子表被分布的保存到 GFS 中,子表是 BigTable 中数据划分和负载均衡的基本单位

BigTable 主服务器作用:

  • 负责元数据操作
  • 新子表分配
  • 子表服务器负载均衡
  • 子表服务器监控

BigTable 子表服务器:

  • 存储实际的数据
  • 每个子表 100-200 MB
  • 每个子表服务器保存几十到上千子表

基础存储架构 Dynamo

典型服务:

  • 弹性计算:Amazon EC2
  • 存储服务:Amazon S3
  • 数据库:Amazon RDS
  • 大数据服务库:AWS ML

为了保证 AWS 服务架构的稳定性,Amazon 的系统采用完全的分布式、去中心化的架构,而 Google 的云计算底层采用的是主从架构

  • 作为底层存储架构也采用了无中心化的模式
  • 支持简单的键/值方式的数据存储
  • 存储的是数据值的原始形式,即按位存储,并不解析数据的具体内容

底层存储节点呈无中心化的环状分布

  • 如何保证数据均衡分布?
    通过一致性 Hash 函数分布存储节点和数据对象,可以保证节点和数据结果充分分布到整个环
    一致性哈希算法优点:保证在添加或删除设备节点时只会影响到其在哈希环中的前驱设备节点,而不会对其他设备节点产生影响,可以大大降低在添加或删除节点时引起的节点间的数据传输开销
  • 如何屏蔽不同节点的性能差别?
    改进的一致性哈希算法:每个虚拟节点隶属于某一个实际的物理节点,一个物理节点根据性能分为多个虚拟节点。各个虚拟节点的能力基本相当,并随机分布在哈希环上,即保证 Dynamo 底层数据能够均匀分布
  • 如何处理数据副本?
    数据被保存 N 份。每个数据的副本备份存储在哈希环顺时针方向上该数据所在虚拟节点的后继节点中。每个虚拟节点实际存储了分配给它以及分配它的前 N-1 个前驱虚拟节点的数据

数据分区的好处

  • 减小数据分布不均衡的可能性
  • 添加或删除设备节点时引起较小的数据传输
  • 如何处理故障?
    • 临时故障处理机制:带有监听的数据回传机制
    • 永久性故障处理机制:采用 Merkle 哈希树技术来加快检测和减少数据传输量

将散列结果右移 m m m 位,可产生 2 32 − m 2^{32-m} 232m 个虚拟节点

弹性计算云

亚马逊弹性计算云包括 Amazon 机器映像、实例、存储模块等组成部分

Amazon 机器映像(AMI)包括操作系统、服务器程序、应用程序等软件配置的模板

获取 AMI的途径:

  • 免费使用 Amazon 提供的公共 AMI
  • 根据自身需要定制一个或多个私有 AMI
  • 向开发者付费购买 AMI
  • 使用其他开发者分享的共享的 AMI

同一个 AMI 可以用于创建具有不同计算和存储能力的实例

EBS 存储卷的设计与物理硬盘相似,其大小由用户设定,适用于数据需要细粒度地频繁访问并持久保存的情形,适合作为文件系统或数据库的主存储

EBS 的快照功能用于在 S3 中存储 Amazon EBS 卷的时间点副本

为确保系统的稳定性,最好将自己的多个实例分布在不同的可用区域和地理区域中

EC2的安全及容错机制

  • 安全组
  • SSH(用户创建一个密钥对时,密钥对的名称和公钥会存储在 EC2 中)

简单储存服务 S3

S3 架构在 Dynamo 之上,用于提供任意类型文件的临时或永久性存储,其总体设计目标是可靠、易用及低成本

S3 中,存储的对象由键、数据、元数据、访问控制构成

在桶中不能创建桶

Amazon 限制了用户创建桶的数量,但没有限制每个桶中对象的数量

桶的名称要求在整个 Amazon S3 的服务器中是全局唯一的(建议采用符合 DNS 要求的命名规则),以避免在 S3 中数据共享时出现相互冲突的情况

支持对桶和对象的操作:
在这里插入图片描述

S3 采用最终一致性模型
在数据被充分传播到所有存放节点之前,可能出现如下情况:

由户操作结果
1写入一个新的对象并立即读取它服务器可能返回 “键不存在"
2写入一个新的对象并立即列出桶中已有的对象该对象可能不会出现在列表中
3用新数据替换现有的对象并立即读取它服务器可能返回原有的数据
4删除现有的对象并立即读取它服务器可能返回被删除的数据
5删除现有的对象并立即列出桶中的所有对象服务器可能列出被删除的对象
即S3 数据存储中,可能存在数据存储不一致的情况

S3 的安全措施

  • 身份验证(数字签名)
  • 访问控制表(ACL)

S3 的访问控制策略(ACP)提供的 5 种访问权限:
在这里插入图片描述

S3 中三大类型的授权用户:

  • 所有者(默认具有 WRITE_ACP 权限;默认最高权限拥有者)
  • 个人授权用户
  • 组授权用户

SimpleDB 存储的数据范围极其有限(其中每个属性值的大小不能超过 1 KB),只好将相对大的数据存储在 S3 中,在 SimpleDB 中只保存指向某些特定文件位置的指针

简单队列服务 SQS

SQS 的三个组成成分:系统组件、队列、消息

系统组件是 SQS 的服务对象,SQS 则是组件之间沟通的桥梁,系统组件既可以是消息的发送者,也可以是消息的接收者

队列的数目是任意的,创建队列时用户必须指定一个在 SQS 账户内唯一的名称

消息是发送者创建的具有一定格式的文本数据,接收对象可以是一个或多个组件,其大小有限制,但数量并未限制

消息的格式:消息 ID、消息体、接受句柄、消息体 MD5 摘要

队列中的消息时被冗余存储的,同一个消息会存放在系统的多个服务器上,目的是为了保证系统的高可用性,但会给用户查询队列中的消息带来麻烦,为了解决该问题,SQS 采用了基于加权随机分布的消息取样

可见性表明该消息可以被所有的组件查看,可见性超时值相当于一个计时器,在设定好的时间内,发送给用户的消息对于其他所有的组件不可见

消息的生命周期变化:

在这里插入图片描述

内容推送服务 CloudFront

传统的网络服务模式:用户在发出服务请求后,需要经过 DNS 服务器进行域名解析后得到所访问网站的真实 IP,然后利用该 IP 访问网站。这种模式存在明显的缺陷:
首先,网站服务器可以容纳的访问量是有限的;其次,使用不同网络服务提供商服务的用户之间的互访速度也会受到限制;最后,这种模式没有考虑访问者的地域问题

解决办法:CDN 技术通过将网站内容发布到靠近用户的边缘节点,使不同地域的用户在访问相同网页时可以就近获取

CDN 需要负载均衡技术、分布式存储、缓冲技术等的支持,其过程如下:
在这里插入图片描述

CDN 访问模式的好处:

  1. 将网站的服务流量以比较均匀的方式分散到边缘节点中,减轻了网站源服务器的负担
  2. 由于边缘节点与访问者的地理位置较近,访问速度快
  3. 智能 DNS 负载均衡系统和各个边缘节点之间始终保持着通信联系,可以确保分配给用户的边缘节点始终可用且在允许的流量范围之内

CloudFront 较普通 CDN 的优势:

  • 按用户使用的服务来收费,适合资金缺乏的中小企业
  • 使用非常简单,配合 S3 再加上简单的设置就可以完成 CDN 的部署

CloudFront 相当于 CDN 中的智能 DNS 负载均衡系统

微软云操作系统

Windows Azure 提供了托管的、可扩展的、按需应用的计算和存储资源,同时还提供了云平台管理和动态分配资源的控制手段

Windows Azure 允许用户在云端存储应用程序数据。应用程序可以存储任何数量的数据,并且可以存储任意长的时间,用户可以在任何时间、任何地方访问自己的数据

Windows Azure 核心计算服务包括:Web Role 实例、Worker Role 实例、VM Role 实例

Windows Azure 体系结构:
在这里插入图片描述
存储服务的对象类型(Windows Azure 核心存储服务的结构):

  • Table:提供更加结构化的数据存储
  • Blob:存储二进制数据,存储大型的无结构数据
  • Queue:支持在 Windows Azure 应用程序组件之间进行通信

分区层提供:

  • 不同存储对象类型的数据模型
  • 不同类型对象处理的逻辑和语义
  • 大规模扩展的对象命名空间
  • 跨多个可用分区服务器访问对象的负载平衡

Hadoop 简介

Hadoop 是 Hadoop-Apache 开源组织的一个分布式计算框架用于编写和运行分布式处理大规模数据

在这里插入图片描述

特性:方便、健壮、可扩张、简单

Hadoop 面向数据密集型处理

  • 程序规模比数据小几个数量级
  • 运行在同一个内部有高速网络连接的数据中心

SQL 和 Hadoop

  • SQL 是针对结构化数据设计
  • Hadoop 是针对文本型的非结构化数据
    • 理论上可以扩展到任何数据
    • 比 SQL 提供一种更通用的模式

Hadoop

  • 用向外扩展代替向上扩展
  • 用键值对代替关系表
  • 用函数式 MapReduce 代替声明式查询 SQL
  • 用离线批量处理代替在线处理
    • 支持大规模数据分析
  • 适合一次写入、多次读取的数据请求

Hadoop 的核心模块 MapReduce 更适合大批量的离线数据处理

Hadoop 安装

守护进程上的主节点 NameNode 和 JobTracker 需要通过 SSH 联络从节点上的 DataNode 和 TaskTracker

SSH 为建立在应用层和传输层的基础上,专为远程登录会话和其他网络服务提供安全性的协议

SSH 提供两种级别的安全验证:口令、密匙

Hadoop 有三种运行模式:本地(单机)模式(默认情况,Hadoop 被配置成一个以非分布模式运行的独立 Java 进程,适合开始时做调试工作)、伪分布模式(用不同的 Java 进程模拟分布式运行中各类节点)、全分布模式(真正的集群模式)

认识 Hadoop

Hadoop1.x 的守护进程包括 Namenode、Datanode、Secondary Namenode、Jobtracker(Hadoop1)、Tasktracker(Hadoop1)

Hadoop2.x 的守护进程包括 Namenode、Datanode、SecondaryNamenode、ResourceManager、NodeManager

Hadoop 分布式计算与分布式存储采用了主从结构,HDFS 的主端,指导从端Datanode 执行底层的 IO 任务;Jobstracker 作为主节点,Tasktracker 管理各个任务在每个从节点上的执行情况

运行 Namenode 消耗大量的内存和 IO 资源,Namenode 所在节点发生了软件或硬件失效,Hadoop 必然会失效

Namenode

  • 跟踪文件如何被分割成文件块,这些文件块被哪些节点存储,以及分布式文件系统的整体运行状态是否正常
  • 相当于 Google GFS 中的 Master

Datanode

  • 将 HDFS 数据块读取或者写入到本地文件系统的实际文件中
  • 由 Namenode 告知客户端每个数据块驻留在哪个 Datanode
  • 客户端直接与 Datanode 进行通信,来处理与数据块相对应的本地文件
  • 与其他 Datanode 通信,复制数据块以实现冗余

Secondary Namenode(SNN)

  • SNN 不接受或记录 HDFS 的任何实时变化
  • 与 Namenode 通信,获取 HDFS 元数据的快照,但并不是说 SNN 实现了 HDFS 中对 Namenode 的实时备份

Jobtracker

  • 确定提交代码的执行计划
    • 决定处理哪些文件
    • 为不同的任务分配节点
    • 监控所有任务的运行
  • 每个 Tasktracker 执行由 Jobtracker 分配的单项任务

每个 Tasktracker 可以生成多个 JVM 来并行处理许多 map 或 reduce 任务

典型的 Hadoop 集群拓扑图:
在这里插入图片描述
Hadoop2 的 Yarn(分布式操作系统)

Yarn 把 Hadoop1 中的 JobTracker 做了功能上的拆分,包括 ResourceManager 和 ApplicationMaster

Yarn 中常驻进程包括:ResourceManager 和 NodeManager,这两者一起组成 Hadoop2 的分布式数据计算框架

Yarn vs MapReduce1
在这里插入图片描述

Yarn 应用可以在运行中的任意时刻提出资源申请

Yarn 的特性

  • 可扩展性
  • 可高用性
  • 实用性
  • 多用性

Hadoop 例子

MapReduce 是一个数据处理模型,数据处理的单元是 mapper 和 reducer,任意扩展到多个计算节点上处理

MapReduce 执行分为 mapping 和 reducing,每个阶段对应一个数据处理函数

Hadoop 历史

  • 开源项目 Lucene:java 开发的开源高性能全文检索工具包
  • 开源项目 Nutch:第一个开源的 Web 搜索引擎

Hadoop HDFS

HDFS 的接口

  • 标准的 Java 接口
  • Thrift(可扩展、跨语言)
  • libhdfs —— HDFS 的 C 语言库
  • FUSE(用户空间文件系统;支持 HDFS 作为标准文件系统挂载)
  • WebDAV

Block:查看文件块命令

Namenode 启动时会自动进入安全模式。其目的是在系统启动时检查各个 Datanode 上数据块的有效性,同时根据策略对数据块进行必要的复制和删除

FileSystem 支持的 URI-scheme 类型

  • file
  • hdfs
  • hftp
  • hsftp
  • har
  • kfs
  • ftp
  • s3n
  • s3

HDFS 编程

Hadoop 文件 API 的起点是 FileSystem 抽象类

使用 FileSystem API 读取数据

  • 使用 factory 方法获得文件系统实例
    • FileSystem.get(Configuration conf)
    • FileSystem.get(URI uri, Configuratioin conf)
  • 调用 open 方法获得文件输入流
  • 返回 org.arpache.hadoop.fs.FSDataInputStream
    • 输入流支持随机读取(seek 函数)

文件元数据 FileStatus 封装了文件长度、块大小、副本、修改时间、所有者和许可信息。获取方法如下:

  • public abstract FileStatus getFileStatus(Path f)
  • public abstract FileStatus[] listStatus(Path f)

文件系统的读写

  • 输入流
    • read()(org.apache.hadoop.fs.FSDataInputStream)
    • 输出流
    • write()(org.apache.hadoop.fs.FSDataOutputStream)

HDFS 工具

一致性模型
创建一个文件时,在命名空间中可见,但对这个文件的任何写操作不保证可见
解决方法:out.sync():缓存和 Datanode 之间数据强制同步,但将带来极大开销

distcp(分布式复制):作为一个 MapReduce 作业执行,一般用在两个运行同一版本 HDFS 集群中传输数据,如果在不同版本会失败,可以换成基于 http 的hftp 协议弥补

Apache Flume

  • 将大规模流数据导入 HDFS 的工具,是一个海量日志采集、聚合和传输的系统
  • 支持多种数据源收集

Apache Sqoop

  • 用于 HDFS 和传统的关系型数据库之间的数据传递

DataX

  • 一个异构数据源离线同步工具

HDFS 归档文件(har)
创建过程是一次 MapReduce 过程

使用 archive 命令打包的 har 文件,不需要解压读取

数据压缩的优点:

  • 减少文件所需的存储空间
  • 加快文件传输速度

压缩格式:
在这里插入图片描述

使用原生类库可以加快压缩和解压缩时间,Hadoop 会根据自身运行的平台搜索原生代码库

Hadoop 数据类型

序列化:将对象转化为字节流,其目的:

  • 进程间通信
  • 数据持久性存储

在 Hadoop 中,序列化处于核心地位,Writable 是 Hadoop 的核心

Hadoop 重写的序列化接口 Writable:紧凑、快速、并允许对自己定义的类加入序列化与反序列化方法

Text 和 String 的主要区别

  • Text 类采用 UTF-8 编码
  • String 中的 indexOf() 方法返回字符类型的索引,Text 的 find() 返回的是字节偏移量
  • Text 的 toString(),用于转换 Text 为 String

Hadoop 中的文件类型

序列文件的优点:

  • 可以作为小文件的容器,封装小文件
  • 可用于存储键值对的二进制文件格式
  • 支持压缩
  • 保持可分割(可拆分)(拆分标志)
  • 支持二进制的键和值
  • 在 HDFS 中获得更高的存储效率
  • 用于链接多个 Hadoop 作业

序列文件有三种类型:未压缩、记录压缩、块压缩

存储结构上,SequenceFile 由一个 Header 后跟多条 Record 组成

SequenceFile 的三个类:

  • SequenceFile.Writer 写
  • SequenceFile.Reader 读
  • SequenceFile.Sorter 排序

MapFile 是排序后的 SequenceFile,由两部分组成:Data 和 Index

MapReduce 计算模型(1)

每个 MapReduce 任务被初始化为一个 Job,每个 Job 对应两个阶段 Map 和 Reduce,分别对应 Map 函数和 Reduce 函数
在这里插入图片描述

MapReduce 计算模型(2)

Partitioner:重定向 Mapper 输出到多个 Reducer
getPartition():返回一个介于 0 和 reducer 任务书之间的整数,指向键值对要发送到的 reducer

Combiner 的目的:削减 Mapper 的输出从而减少网络带宽和 Reducer 之上的负载

Combiner 和 Reducer 执行相同操作,需要实现 Reducer 接口

MapReduce IO(1)

MapReduce 读取输入数据以及写入输出数据支持多种数据格式(主要是文件)

MapReduce 处理数据的原理:将其分割成为块,这些块可以在多个计算机上并行处理

  • 每个分片足够小以实现更细粒度的并行
  • 块不能太小,否则启动和停止各个分片处理所需的时间开销比较大

Hadoop 读取文件使用 DataInputStream 的子类 FSDataInputStream

MapReduce 输入分片是逻辑划分,HDFS 分块是物理分割,逻辑划分可能会跨越物理数据块边界

Hadoop 将输入文件划分为若干输入分片,每个分片划分为若干条记录,每条记录对应一个 Key/Value 对,输入分片由 InputFormat 创建

FileInputFormat 类实际分片的公式:max(minsize,min(maxsize,blocksize))

常用的 InputFormat 类:
在这里插入图片描述

在这里插入图片描述

MapReduce IO(2)

MultipleInputs:允许为多条输入路径指定 InputFormat 和 Mapper

DBInputFormat:使用 JDBC 从关系数据库中读取数据

OutputFormat 类:输出无需分片;输出文件放在一个共用目录,通常被命名为 part-nnnnn(其中 nnnnn 为 reducer 的分区 ID)

在执行 MapReduce 程序时候,启动了多少个 reducer,就会对应的写出多少个 part-nnnnn 文件

RecordWriter将输出结果进行格式化

常用的 OutputFormat 类:
在这里插入图片描述

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/750138
推荐阅读
相关标签
  

闽ICP备14008679号