赞
踩
2 . GFS 的读写过程
14 . wordcount
云计算按服务类型分为三类:将基础设施作为服务(SQS;允许用户动态申请和释放节点,按量计费;具有更高的资源使用效率)、将平台作为服务(提供用户应用程序的运行环境;负责资源的动态扩展和容错管理;用户的自主权降低)、将软件作为服务(针对性更强,只提供某些专门用途的服务供应用调用)
Google 云计算三大法宝:GFS、MapReduce、Bigtable
云计算技术体系结构分为 4 层:物理资源层、资源池层、管理中间件层、SOA 构建层(依靠外部设施提供)
“新摩尔定律”:每 18 个月全球新增信息量是计算机有史以来全部信息量的总和
云计算定义
云计算是一种商业计算模型。它将计算任务分布在大量计算机构成的资源池上,使各种应用系统能够根据需要获取计算力、存储空间和信息服务
大数据定义
海量数据或巨量数据,其规模巨大到无法通过目前主流的计算机系统在合理时间内获取、存储、管理、处理并提炼以帮助使用者决策
云计算 7 个特点
云计算的服务方式:
GFS:基于数据块存储的大型分布式文件系统(通过 Shell 命令方式访问;提供客户端编程接口)
GFS 的体系结构中组成部分包括:GFS 客户端、GFS 主服务器、GFS 数据块服务器
实现分布式存储:数据块被存入多个数据块服务器
实现并行访问:数据流和控制流并行访问
处理服务器失效:数据块以多个副本存入块服务器(默认 3 个)
面对数据不断增长:增设服务器
MapReduce:处理海量数据的并行编程模型,函数式编程,其编程模式分为 Map 操作和 Reduce 操作
实现机制:
实现分布式计算:Map 工作机相互独立;Reduce 工作机处理的中间结果互不交叉
实现并行计算:数据流和控制流并行访问
处理集群节点错误:空闲的处理机处理
Map 工作机的数量由数据块(输入文件被划分的分块数,输入文件的大小及文件块大小)决定;Reduce 工作机的数量由用户自定义
BigTable 是分布式多维映射表,其中多维是指 row、column、time,该系统架构组成部分包括 BigTable 主服务器、BigTable 子表服务器、BigTable 客户端
BigTable被分割成多个子表,子表被分布的保存到 GFS 中,子表是 BigTable 中数据划分和负载均衡的基本单位
BigTable 主服务器作用:
BigTable 子表服务器:
典型服务:
为了保证 AWS 服务架构的稳定性,Amazon 的系统采用完全的分布式、去中心化的架构,而 Google 的云计算底层采用的是主从架构
底层存储节点呈无中心化的环状分布
数据分区的好处
将散列结果右移 m m m 位,可产生 2 32 − m 2^{32-m} 232−m 个虚拟节点
亚马逊弹性计算云包括 Amazon 机器映像、实例、存储模块等组成部分
Amazon 机器映像(AMI)包括操作系统、服务器程序、应用程序等软件配置的模板
获取 AMI的途径:
同一个 AMI 可以用于创建具有不同计算和存储能力的实例
EBS 存储卷的设计与物理硬盘相似,其大小由用户设定,适用于数据需要细粒度地频繁访问并持久保存的情形,适合作为文件系统或数据库的主存储
EBS 的快照功能用于在 S3 中存储 Amazon EBS 卷的时间点副本
为确保系统的稳定性,最好将自己的多个实例分布在不同的可用区域和地理区域中
EC2的安全及容错机制
S3 架构在 Dynamo 之上,用于提供任意类型文件的临时或永久性存储,其总体设计目标是可靠、易用及低成本
S3 中,存储的对象由键、数据、元数据、访问控制构成
在桶中不能创建桶
Amazon 限制了用户创建桶的数量,但没有限制每个桶中对象的数量
桶的名称要求在整个 Amazon S3 的服务器中是全局唯一的(建议采用符合 DNS 要求的命名规则),以避免在 S3 中数据共享时出现相互冲突的情况
支持对桶和对象的操作:
S3 采用最终一致性模型
在数据被充分传播到所有存放节点之前,可能出现如下情况:
由户操作 | 结果 | |
---|---|---|
1 | 写入一个新的对象并立即读取它 | 服务器可能返回 “键不存在" |
2 | 写入一个新的对象并立即列出桶中已有的对象 | 该对象可能不会出现在列表中 |
3 | 用新数据替换现有的对象并立即读取它 | 服务器可能返回原有的数据 |
4 | 删除现有的对象并立即读取它 | 服务器可能返回被删除的数据 |
5 | 删除现有的对象并立即列出桶中的所有对象 | 服务器可能列出被删除的对象 |
即S3 数据存储中,可能存在数据存储不一致的情况 |
S3 的安全措施
S3 的访问控制策略(ACP)提供的 5 种访问权限:
S3 中三大类型的授权用户:
SimpleDB 存储的数据范围极其有限(其中每个属性值的大小不能超过 1 KB),只好将相对大的数据存储在 S3 中,在 SimpleDB 中只保存指向某些特定文件位置的指针
SQS 的三个组成成分:系统组件、队列、消息
系统组件是 SQS 的服务对象,SQS 则是组件之间沟通的桥梁,系统组件既可以是消息的发送者,也可以是消息的接收者
队列的数目是任意的,创建队列时用户必须指定一个在 SQS 账户内唯一的名称
消息是发送者创建的具有一定格式的文本数据,接收对象可以是一个或多个组件,其大小有限制,但数量并未限制
消息的格式:消息 ID、消息体、接受句柄、消息体 MD5 摘要
队列中的消息时被冗余存储的,同一个消息会存放在系统的多个服务器上,目的是为了保证系统的高可用性,但会给用户查询队列中的消息带来麻烦,为了解决该问题,SQS 采用了基于加权随机分布的消息取样
可见性表明该消息可以被所有的组件查看,可见性超时值相当于一个计时器,在设定好的时间内,发送给用户的消息对于其他所有的组件不可见
消息的生命周期变化:
传统的网络服务模式:用户在发出服务请求后,需要经过 DNS 服务器进行域名解析后得到所访问网站的真实 IP,然后利用该 IP 访问网站。这种模式存在明显的缺陷:
首先,网站服务器可以容纳的访问量是有限的;其次,使用不同网络服务提供商服务的用户之间的互访速度也会受到限制;最后,这种模式没有考虑访问者的地域问题
解决办法:CDN 技术通过将网站内容发布到靠近用户的边缘节点,使不同地域的用户在访问相同网页时可以就近获取
CDN 需要负载均衡技术、分布式存储、缓冲技术等的支持,其过程如下:
CDN 访问模式的好处:
CloudFront 较普通 CDN 的优势:
CloudFront 相当于 CDN 中的智能 DNS 负载均衡系统
Windows Azure 提供了托管的、可扩展的、按需应用的计算和存储资源,同时还提供了云平台管理和动态分配资源的控制手段
Windows Azure 允许用户在云端存储应用程序数据。应用程序可以存储任何数量的数据,并且可以存储任意长的时间,用户可以在任何时间、任何地方访问自己的数据
Windows Azure 核心计算服务包括:Web Role 实例、Worker Role 实例、VM Role 实例
Windows Azure 体系结构:
存储服务的对象类型(Windows Azure 核心存储服务的结构):
分区层提供:
Hadoop 是 Hadoop-Apache 开源组织的一个分布式计算框架用于编写和运行分布式处理大规模数据
特性:方便、健壮、可扩张、简单
Hadoop 面向数据密集型处理
SQL 和 Hadoop
Hadoop
Hadoop 的核心模块 MapReduce 更适合大批量的离线数据处理
守护进程上的主节点 NameNode 和 JobTracker 需要通过 SSH 联络从节点上的 DataNode 和 TaskTracker
SSH 为建立在应用层和传输层的基础上,专为远程登录会话和其他网络服务提供安全性的协议
SSH 提供两种级别的安全验证:口令、密匙
Hadoop 有三种运行模式:本地(单机)模式(默认情况,Hadoop 被配置成一个以非分布模式运行的独立 Java 进程,适合开始时做调试工作)、伪分布模式(用不同的 Java 进程模拟分布式运行中各类节点)、全分布模式(真正的集群模式)
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
Datanode
Secondary Namenode(SNN)
Jobtracker
每个 Tasktracker 可以生成多个 JVM 来并行处理许多 map 或 reduce 任务
典型的 Hadoop 集群拓扑图:
Hadoop2 的 Yarn(分布式操作系统)
Yarn 把 Hadoop1 中的 JobTracker 做了功能上的拆分,包括 ResourceManager 和 ApplicationMaster
Yarn 中常驻进程包括:ResourceManager 和 NodeManager,这两者一起组成 Hadoop2 的分布式数据计算框架
Yarn vs MapReduce1
Yarn 应用可以在运行中的任意时刻提出资源申请
Yarn 的特性
MapReduce 是一个数据处理模型,数据处理的单元是 mapper 和 reducer,任意扩展到多个计算节点上处理
MapReduce 执行分为 mapping 和 reducing,每个阶段对应一个数据处理函数
Hadoop 历史
HDFS 的接口
Block:查看文件块命令
Namenode 启动时会自动进入安全模式。其目的是在系统启动时检查各个 Datanode 上数据块的有效性,同时根据策略对数据块进行必要的复制和删除
FileSystem 支持的 URI-scheme 类型
Hadoop 文件 API 的起点是 FileSystem 抽象类
使用 FileSystem API 读取数据
文件元数据 FileStatus 封装了文件长度、块大小、副本、修改时间、所有者和许可信息。获取方法如下:
文件系统的读写
一致性模型
创建一个文件时,在命名空间中可见,但对这个文件的任何写操作不保证可见
解决方法:out.sync():缓存和 Datanode 之间数据强制同步,但将带来极大开销
distcp(分布式复制):作为一个 MapReduce 作业执行,一般用在两个运行同一版本 HDFS 集群中传输数据,如果在不同版本会失败,可以换成基于 http 的hftp 协议弥补
Apache Flume
Apache Sqoop
DataX
HDFS 归档文件(har)
创建过程是一次 MapReduce 过程
使用 archive 命令打包的 har 文件,不需要解压读取
数据压缩的优点:
压缩格式:
使用原生类库可以加快压缩和解压缩时间,Hadoop 会根据自身运行的平台搜索原生代码库
序列化:将对象转化为字节流,其目的:
在 Hadoop 中,序列化处于核心地位,Writable 是 Hadoop 的核心
Hadoop 重写的序列化接口 Writable:紧凑、快速、并允许对自己定义的类加入序列化与反序列化方法
Text 和 String 的主要区别
序列文件的优点:
序列文件有三种类型:未压缩、记录压缩、块压缩
存储结构上,SequenceFile 由一个 Header 后跟多条 Record 组成
SequenceFile 的三个类:
MapFile 是排序后的 SequenceFile,由两部分组成:Data 和 Index
每个 MapReduce 任务被初始化为一个 Job,每个 Job 对应两个阶段 Map 和 Reduce,分别对应 Map 函数和 Reduce 函数
Partitioner:重定向 Mapper 输出到多个 Reducer
getPartition():返回一个介于 0 和 reducer 任务书之间的整数,指向键值对要发送到的 reducer
Combiner 的目的:削减 Mapper 的输出从而减少网络带宽和 Reducer 之上的负载
Combiner 和 Reducer 执行相同操作,需要实现 Reducer 接口
MapReduce 读取输入数据以及写入输出数据支持多种数据格式(主要是文件)
MapReduce 处理数据的原理:将其分割成为块,这些块可以在多个计算机上并行处理
Hadoop 读取文件使用 DataInputStream 的子类 FSDataInputStream
MapReduce 输入分片是逻辑划分,HDFS 分块是物理分割,逻辑划分可能会跨越物理数据块边界
Hadoop 将输入文件划分为若干输入分片,每个分片划分为若干条记录,每条记录对应一个 Key/Value 对,输入分片由 InputFormat 创建
FileInputFormat 类实际分片的公式:max(minsize,min(maxsize,blocksize))
常用的 InputFormat 类:
MultipleInputs:允许为多条输入路径指定 InputFormat 和 Mapper
DBInputFormat:使用 JDBC 从关系数据库中读取数据
OutputFormat 类:输出无需分片;输出文件放在一个共用目录,通常被命名为 part-nnnnn(其中 nnnnn 为 reducer 的分区 ID)
在执行 MapReduce 程序时候,启动了多少个 reducer,就会对应的写出多少个 part-nnnnn 文件
RecordWriter将输出结果进行格式化
常用的 OutputFormat 类:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。