全文PDF版下载链接:
全文PDF版下载链接
一 背景 三次科技浪潮 4V定义Volume(规模大)、Variety(类型多)、Velocity(速度快)以及Value(价值密度低)
思维方式全样而非抽样:不再是依靠分析少量的数据样本,开始关注整体数据中价值。
效率而非绝对精确:不必追求绝对的精确,大数据具备时效性特征,要求大数据处理必须具备高效率,否则就会丧失数据分析的价值。
注重相关关系而非因果关系 : 建立在相关关系分析法基础上的预测是大数据的核心。“因果关系”往往没有那么重要了,更多研究的是“相关关系”。
Iaas:基础设施即服务(买成品回家做披萨):将硬件外包到别的地方
Paas:平台即服务(点外卖披萨):虚拟服务器、 *** 作系统节省在硬件上的费用
Saas:软件即服务(去餐厅吃披萨):通过网页浏览器接入
云计算关键技术:
虚拟化(核心):服务的硬件、软件、平台是根据用户的需求虚拟出来的
分布式存储:单一的服务器进行虚拟化,虚拟化之后以进程为级的结构是分布式的
分布式计算
多租户:同时被多个用户使用
- 大数据和云计算是相辅相成、相互促进的,云计算在大数据时代提供了一个基础设施,为我们开展大数据的存储、分析和应用提供了硬件条件、平台条件。
- 云计算支撑大数据,大数据在云计算环境下完成。
- 云计算是基础设施,大数据是数据的存储方式和计算模式。
大数据的发展的三大支撑核心技术:物联网技术、云计算技术和人工智能
大数据、云计算、物联网和人工智能之间的关系
是指IT基础设施的交付和使用模式,通过网络以按需、易扩展的方式获得所需的资源(硬件、平台、软件等)。
广义的云计算是指服务的交付和使用模式,通过网络以按需、易扩展的方式获得所需的服务。
类型按照部署方式和服务对象将云计算划分为公有云、私有云和混合云三大主要类型。
二 分布式存储原理HDFS 数据类型-
结构化数据
- 为结构(模式)+数据构成的二维表结构。
- 每个二维表也称为关系表。关系型数据库由描述该数据库表达业务的多张二维表组成。
- 二维表中每一列的名称、类型是先确定的,每列数据由该列类型、精度和完成性约束共同限制的。
- 关系型数据库也称为SQL数据库,管理关系型数据库的软件为数据库管理系统,代表性如MySQL、SQL Server、Oracle。
-
半结构化数据
- 介于结构化和非结构化之间的数据类型。
- XML和HTML等标识类文件都属于半结构化数据。
- 半结构化数据通常具有自描述性,结构信息和数据内容共同出现。
- 半结构化数据适用于结构要求不严格,结构和内容不固定的数据。
- 半结构化数据也用于不同结构的关系间数据集成和数据交互。
-
非结构化数据(占网络中数据的大多数)
- 非文本类型的数据。
- 图片、视频和语音等类型数据都属于非结构化数据。
- 直接处理非结构化信息需要专门的图像、音视频处理手段。
- 通常利用元信息描述非结构化数据,以便于对非结构化数据进行检索。
- 网络中大量的数据为非结构化数据。
- 文件系统阶段
- 数据可长期保存在外存中,以便反复使用。
- 提供了各类数据类型的文件。
- 文件可以通过文件夹的方式进行组织和访问。
- 数据与程序之间具有了一定程度独立性。
- 数据库系统阶段
- 使用结构化方式组织数据。
- 数据共享性高、冗余度低。
- 数据独立性高。
- 有统一的数据管理和控制功能。
- 数据仓库系统阶段
将一个单位的多个数据库系统上,开展联机事务处理和数据分析工作
在物理层面:多台物理上独立分布的服务器在网络环境下构成服务器集群,通过该集群上的软件系统为用户提供服务。
在逻辑层面:用户与构建在多台计算机上的软件系统交互。集群的使用以及文件的在集群中各个机器的存储是透明的,用户无需关心分布式环境下各硬件使用的细节。对用户而言,用户感觉服务器集群在(逻辑上)是一台统一的服务器为其服务。
分布式系统体系结构:基础设施层、数据层(核心)、应用层和用户层。
- 关系型数据库
指一组逻辑上相关的结构化数据集合,在物理上分布在计算机网络中的不同区域(场地)上。 - 分布式文件系统
与单机环境下的文件系统不同,分布式文件系统是一种允许文件通过网络,在多台主机上分片存储、冗余备份和并行 *** 作的文件系统。 - 非关系型数据库NOSQL
特点:
- 透明性
只能提供一定程度的访问透明性,完全支持位置透明性和伸缩透明性。 - 并发控制
机制非常简单,任何时间都只允许有一个程序在写入某个文件。 - 可伸缩性
建立在大规模廉价机器上的分布式文件系统集群,具有很好的可伸缩性 - 容错
具有多副本机制和故障自动检测、恢复机制 - 安全需求
HDFS安全性较弱 - 文件复制
HDFS采用多副本机制 - 硬件和 *** 作系统的异构性
采用Java语言开发,具有很好的跨平台能力
- 支持大规模文件存储
- 简化系统设计
- 适合数据备份
名称节点负责管理分布式文件系统的命名空间;数据节点是分布式文件系统HDFS的工作节点,负责数据的存储和读取
1.名称节点NameNode两个核心数据结构:Fslmange、Editlog
namenode在修改信息上不适合,secondaryNameNode与namenode并行进行 *** 作,写 *** 作的时候互相切换。
名称节点记录了每个文件中各个块所在的数据节点的位置信息。
FsImage用于维护文件系统树以及文件树中所有的文件和文件夹的元数据
*** 作日志文件EditLog中记录了所有针对文件的创建、删除、重命名等 *** 作。
数据节点(DataNode)是分布式文件系统HDFS的工作节点,负责数据的存储和读取,会根据客户端或者是名称节点的调度来进行数据的存储和检索,并且向名称节点定期发送自己所存储的块的列表。每个数据节点中的数据会被保存在各自节点的本地Linux文件系统中
HDFS体系结构HDFS采用了主从(Master/Slave)结构模型,一个HDFS集群包括一个名称节点(NameNode)和若干个数据节点(DataNode)(如图3-4所示)。名称节点作为中心服务器,负责管理文件系统的命名空间及客户端对文件的访问。集群中的数据节点一般是一个节点运行一个数据节点进程,负责处理文件系统客户端的读/写请求,在名称节点的统一调度下进行数据块的创建、删除和复制等 *** 作。每个数据节点的数据实际上是保存在本地Linux文件系统中的
- HDFS是一个部署在集群上的分布式文件系统,因此,很多数据需要通过网络进行传输
- 所有的HDFS通信协议都是构建在TCP/IP协议基础之上的
- 客户端通过一个可配置的端口向名称节点主动发起TCP连接,并使用客户端协议与名称节点进行交互
- 名称节点和数据节点之间则使用数据节点协议进行交互
- 客户端与数据节点的交互是通过RPC(Remote Procedure Call)来实现的。在设计上,名称节点不会主动发起RPC,而是响应来自客户端和数据节点的RPC请求
优点:
- 兼容廉价的硬件设备->机器出现故障是常见的,所以NameNode选用性能好的,DataNode选用性能差的。
- 一次写入 多次读取
- 流数据读写
- 大数据集
- 简单的文件模型
- 强大的跨平台兼容性等特点。
缺点:
- 不适合低延迟数据访问
- 无法高效存储大量小文件
- 不支持多用户写入及任意修改文件
多副本保存优点:
- 加快数据传输速度
- 容易检查数据错误
- 保证数据可靠性
- 数据块64MB
数据存放位置:
为了提高数据可靠性与系统可用性,以及充分利用网络带宽,HDFS采用了以机架(Rack)为基础的数据存放策略
HDFS默认每个数据节点都是在不同的机架上,
缺点:
- 写入数据的时候不能充分利用同一机架内部机器之间的带宽。
优点:
- 可以获得很高的数据可靠性,即使一个机架发生故障,位于其他机架上的数据副本仍然是可用的;
- 在读取数据的时候,可以在多个机架并行读取数据,大大提高了数据读取速度;
- 可以更容易实现系统内部负载均衡和错误处理。
数据读取:
- HDFS提供了一个API可以确定一个数据节点所属的机架ID,客户端也可以调用API获取自己所属的机架ID
- 当客户端读取数据时,从名称节点获得数据块不同副本的存放位置列表,列表中包含了副本所在的数据节点,可以调用API来确定客户端和这些数据节点所属的机架ID,当发现某个数据块副本对应的机架ID和客户端对应的机架ID相同时,就优先选择该副本读取数据,如果没有发现,就随机选择一个副本读取数据
数据复制方法:
- HDFS的数据复制采用了流水线复制的策略,大大提高了数据复制过程的效率
- 当客户端要往HDFS中写入一个文件时,这个文件会首先被写入本地,并被切分成若干个块,每个块的大小是由HDFS的设定值来决定的
- 每个块都向HDFS集群中的名称节点发起写请求,名称节点会根据系统中各个数据节点的使用情况,选择一个数据节点列表返回给客户端,然后,客户端就把数据首先写入列表中的第一个数据节点,同时把列表传给第一个数据节点
- 当第一个数据节点接收到4KB数据的时候,写入本地,并且向列表中的第二个数据节点发起连接请求,把自己已经接收到的4KB数据和列表传给第二个数据节点
- 当第二个数据节点接收到4KB数据的时候,写入本地,并且向列表中的第三个数据节点发起连接请求,依此类推,列表中的多个数据节点形成一条数据复制的流水线
- 最后,当文件写完的时候,数据复制也同时完成
名称节点出错
- 名称节点保存了所有的元数据信息,其中,最核心的两大数据结构是FsImage和Editlog,如果这两个文件发生损坏,那么整个HDFS实例将失效。因此,HDFS设置了备份机制,把这些核心文件同步复制到备份服务器SecondaryNameNode上。当名称节点出错时,就可以根据备份服务器SecondaryNameNode中的FsImage和Editlog数据进行恢复。
数据节点出错!!!
- 每个数据节点会定期向名称节点发送“心跳”信息,向名称节点报告自己的状态
- 当数据节点发生故障,或者网络发生断网时,名称节点就无法收到来自一些数据节点的心跳信息,这时,这些数据节点就会被标记为“宕机”,节点上面的所有数据都会被标记为“不可读”,名称节点不会再给它们发送任何I/O请求
- 这时,有可能出现一种情形,即由于一些数据节点的不可用,会导致一些数据块的副本数量小于冗余因子
- 名称节点会定期检查这种情况,一旦发现某个数据块的副本数量小于冗余因子,就会启动数据冗余复制,为它生成新的副本
- HDFS和其它分布式文件系统的最大区别就是可以调整冗余数据的位置
数据出错
- 网络传输和磁盘错误等因素,都会造成数据错误
- 客户端在读取到数据后,会采用md5和sha1对数据块进行校验,以确定读取到正确的数据
- 在文件被创建时,客户端就会对每一个文件块进行信息摘录,并把这些信息写入到同一个路径的隐藏文件里面
- 当客户端读取文件的时候,会先读取该信息文件,然后,利用该信息文件对每个读取的数据块进行校验,如果校验出错,客户端就会请求到另外一个数据节点读取该文件块,并且向名称节点报告这个文件块有错误,名称节点会定期检查并且重新复制这个块
读数据:
写数据:
和spark相比,MapReduce执行特点(慢的原因):
- 多次落盘(先写入缓存再写入磁盘)
- map执行后才能执行reduce。
设计理念:计算向数据靠拢
分布式并行编程
- MapReduce将复杂的、运行于大规模集群上的并行计算过程高度地抽象到了两个函数:Map和Reduce
- 在MapReduce中,一个存储在分布式文件系统中的大规模数据集,会被切分成许多独立的小数据块,这些小数据块可以被多个Map任务并行处理
- MapReduce框架会为每个Map任务输入一个数据子集,Map任务生成的结果会继续作为Reduce任务的输入,最终由Reduce任务输出最后结果,并写入到分布式文件系统中
- MapReduce框架采用了Master/Slave架构,包括一个Master和若干个Slave。
- Master上运行JobTracker,Slave上运行TaskTracker
- Hadoop框架是用Java实现的,但是,MapReduce应用程序则不一定要用Java来写
MAP端shuffle过程:
内存缓冲区是有大小限制的,默认是100MB。当map task的输出结果很多时,就可能会撑爆内存,所以需要在一定条件下将缓冲区中的数据临时写入磁盘,然后重新利用这块缓冲区。这个从内存往磁盘写数据的过程被称为Spill,中文可译为溢写。比例默认是0.8,也就是当缓冲区的数据已经达到阈值(buffer size * spill percent = 100MB * 0.8 = 80MB),溢写线程启动,锁定这80MB的内存,执行溢写过程。Map task的输出结果还可以往剩下的20MB内存中写,互不影响。
reduce端shuffle:
spark core(核心)、spark SQL、spark steaming(专门处理流数据)等组件
提供的运算类型:
RDD特性:容错、减少开销、使用java、类似于string
依赖关系(宽依赖、窄依赖)
- 其中窄依赖对于作业优化有利,宽依赖无法优化。
- 窄依赖可以实现流水线优化,宽依赖包含shuffle过程,无法实现流水线方式处理
加载本地数据:
加载HDFS系统数据
filter():筛选满足func的元素,返回新的数据集
map(func):每个元素传到func中,将结果返回为一个新的数据集
flatMap(func)
动作 *** 作(action)才真正进行转换
统计词频:
Dataframe和RDD的区别
- 高效性
并发计算:在节点间动态移动数据,保证各个节点的动态平衡 - 扩展性好
为集群添加新节点,可以获得更好的性能 - 高可靠
集群结构部署在多个机器上,数据存储有多个备份,计算任务由多个机器承担。 - 高容错
硬件出错十分常见,Hadoop提供检测错误,自动快速恢复系统的功能。
分布式数据存储、分布式数据计算提供错误检测和恢复 - 灵活性
部署灵活、可以处理的数据类型灵活
处理三类结构化数据
HDFS:数据的分布式存储和读取,提供层次目录的文件组织结构
MapReduce:大规模数据集的并行计算框架
Yarn:客户端向Yarn提交一个应用程序,Yarn负责协调该应用程序在哪里运行、使用多少系统资源(例如CPU、内存、网络带宽和存储)
Zookerper: 提高分布式环境下的可靠性、高可用性
Oozie:调度器
Hbase
是一个高可靠、高性能、面向列、可伸缩的分布式数据库
用于存储非结构化和半结构化的数据
建立在HDFS之上
Sqoop
用于在Hive与传统的数据库之间进行数据传递
例如:关系型DB <–> HDFS
Pig
基于HDFS的数据分析框架
基于Pig Latin语言
适用于半结构化数据,海量日志采集、聚合等处理
将上述数据分析请求转换为MapReduce运算
HIVE
存储、查询和分析HDFS数据等 *** 作
通过HQL语言,可以将以上 *** 作转换为MapReduce
适合于网络日志分析,适用于结构化数据
Avro:
Avro是一个数据序列化系统
Mahout
包含一些机器学习的经典算法
包含聚类、分类、关联分析等数据挖掘的方法
Kafka
用于实时数据分析
Flume
提供海量日志采集、聚合和传输
Spark:大规模数据的计算引擎
Scala 语言
支持内存计算,速度比MapReduce快
Tez:一个计算框架
采用了DAG(有向无环图)来组织任务
减少HDFS写入过程,速度比MapReduce快
- 单机模式(本地模式、独立模式,Hadoop的缺省模式)
- Hadoop各个组件运行在一台机器中
- 不启动HDFS、Yarn相关的功能(NameNode、DataNode)
- 直接读写本地 *** 作系统的文件系统,读写速度快
- 所有程序都运行在一个JVM中
- 【用途】用于对MapReduce程序的逻辑进行调试,以确保程序正确
- 伪分布式
- 分布式
- 用户管理:设置用户模式、无秘钥登录
- 环境管理:java、Hadoop下载、环境变量配置
- Hadoop安装:Hadoop、HDFS文件配置
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)