大数据技术原理与应用

风格不统一 提交于 2021-01-07 17:55:56

概要介绍

        大数据期末整理,岩哥牛逼
往期文章
数据可视化思维导图

网页设计期末复习 选择+简答+大题

第一章

1. 大数据的4个v

:volume velocity variety value 大量的 快速的 多样的 价值化

2. 大数据的影响

在思维方式方面:大数据完全颠覆了传统的思维方式:全样而非抽样、效率而非精确、相关而非因果
在社会发展方面:大数据决策逐渐成为一种新的决策方式,大数据应用有力促进了信息技术与各行业的深度融合,大数据开发大大推动了新技术和新应用的不断涌现。
在就业市场方面:大数据的兴起使得数据科学家成为热门职业。
在人才培养方面:大数据的兴起,将在很大程度上改变中国高校信息技术相关专业的现有教学和科研体制。


3. 大数据的两大核心技术及对应关系

分布式存储(GFS HDFS NOSQL NewSQL)分布式处理(MapReduce Sparlk)

4. 产品对应关系

:批处理计算(MapReduce Sparlk). 流计算(Storm S4 Flume Streams Puma Mario 银河流数据处理平台等) 图计算(Pregel、GraphX、Giraph、PowerGraph、Hama、GoldenOrb等)

5. 三者关系

:云计算、大数据和物联网代表了IT领域最新的技术发展趋势,三者相辅相成,既有联系又有区别
在这里插入图片描述

第二章

1. hadoop最初是创始人Doug Cutting 开发的文本搜索库,hadoop源自于2002年的Apache Nutch项目

2. hadoop分布式处理的软件框架 ,特性如下

:高可靠 高效性 高可扩展性 高容错性 成本低 运行在Linux平台上,支持多种编程语言

3. Apache hadoop 版本演变 1.0-》2.0

,即增加了分布式资源调度管理框架YARN 和 HDFS HA
在这里插入图片描述

4. hadoop生态系统

在这里插入图片描述

5. hadoop项目组建功能

在这里插入图片描述

6. 配置文件 core-site.xml hdfs-site.xml 参数(属性)理解

在这里插入图片描述
其中 name 标签表示配置项的名称 value 表示配置的值。
hadoop.tmp.dir表示存放临时数据的目录,即包括NameNode的数据,也包括DataNode的数据。该路径任意指定,只要实际存在该文件夹即可
name为fs.defaultFS的值,表示hdfs路径的逻辑名称
在这里插入图片描述
dfs.replication表示副本的数量,伪分布式要设置为1
dfs.namenode.name.dir表示本地磁盘目录,是存储fsimage文件的地方
dfs.datanode.data.dir表示本地磁盘目录,HDFS数据存放block的地方






第三章

1. 总而言之 HDFS实现以下目标

 - 兼容廉价的硬件设备
 - 流数据读写
 - 大数据集
 - 简单的文件模型
 - 强大的跨平台兼容性

2. HAFS特殊的设置,使得本身具有一些应用局限性

1. 不适合低延迟的数据访问

2. 无法高效存储大量小文件

3. 不支持多用户写入及任意修改文件

3.块的概念

HDFS默认一个块64MB,一个文件被分成多个块,以块作为存储单位,块的大小远远小于普通文件系统,可以最小化寻址开销

4. HDFS主要组件的功能 (名称节点 数据节点)(课本更详细)

名称节点

  • 负责管理分布式文件系统的命名空间,保存了两个核心的数据结构,即FsImage 和 EditLog
  • 记录了每个文件中各个块所在的数据节点和位置信息
  • 存储元数据
  • 元数据保存在内存中
  • 保存文件block,datanode之间的映射关系
  • 管理客户端对文件的访问

数据节点:

  • 数据节点是分布式文件系统HDFS的工作节点,负责数据的存储和读取,会根据客户端或者名称节点的调度来惊醒数据的存储和检索,并且向名称节点定期发送自己所存储的块的列表
  • 存储文本内容
  • 文件内容保存在磁盘
  • 维护了block id 到 datanode本地文件的映射关系
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

5. 名称节点的数据结构

名称节点负责管理分布式文件系统的命名空间,保存了两个核心的数据结构,即FsImage EditLog并且名称节点记录了每个文件中各个块所在的数据节点的位置信息。

  1. FsImage用于维护文件系统树以及文件树中所有的文件和文件夹的元数据

  2. 操作日志文件EditLog中记录了所有针对文件的创建、删除、重命名等操作
    在这里插入图片描述

6. 第二名称节点:

第二名称节点是HDFS架构中的一个组成部分,它是用来保存名称节点中对HDFS元数据信息的备份,并减少名称节点重启的时间。SecondaryNameNode一般是单独运行在一台机器上。
补充
(所有更新操作写入Editlog,导致过大,每次名称节点重启的时候把Fsimage里面所有内容映射到内存,再一条一条执行EditLog中的记录会非常的慢当Editlog文件非常大)(引出第二名称节点)

7. 第二名称节点的工作流程(个人概括)

  • 第二名称节点定期要求名称节点停止使用editlog文件
  • 将新的写操作写在edit.new
  • 第二名称节点通过get方式获取FsImage和Editlog
  • FsImage加载内存,Editlog执行文件中的更新操作,合并为新的FsImage
  • 新的FsImage通过post发送到名称节点替换旧的,而edit.new替换为新的Editlog

在这里插入图片描述

8. HDFS体系机构概述

  1. 大概就是客户端向名称节点请求需要操作的文件名和数据块号,名称节点返回数据块号和数据块位置。再然后就是客户端直接在数据节点进行读写操作
  2. HDFS采用的是主从(Master/Slave)结构模型,一个HDFS集群包括一个名称节点和若干个数据节点
  3. 数据节点的数据保存在本地Linux文件系统中
  4. 数据节点会周期性向名称节点发送“心跳信息”

在这里插入图片描述

9. HDFS通信协议

概述:

  • HDFS是一个部署在集群上的分布式文件系统,因此很多数据需要通过网络进行传输
  • 所有的HDFS通信协议都是构建在TCP/IP协议基础之上的

在这里插入图片描述

10. 多副本方式冗余数据的保存

目的:为了保证系统的容错性和可用性
优点:加快数据传输速度

  • 加快数据传输速度

  • 容易检查数据错误

  • 保证数据可靠性
    什么是多副本:通常一个数据块的多个副本会被分布到不同的数据节点
    在这里插入图片描述

11. 数据存储策略(重点)

  • 第一个副本:放置在上传文件的数据节点;如果是集群外提交,则随机挑选一台磁盘不太满、CPU不太忙的节点

  • 第二个副本:放置在与第一个副本不同的机架的节点上

  • 第三个副本:与第一个副本相同机架的其他节点上

  • 更多副本:随机节点
    在这里插入图片描述

12. 数据错误与恢复(名称节点出错 数据节点出错 数据出错)(了解)

名称节点出错
     名称节点保存了所有的元数据信息,其中,最核心的两大数据结构是FsImage和Editlog,如果这两个文件发生损坏,那么整个HDFS实例将失效。因此,HDFS设置了备份机制,把这些核心文件同步复制到备份服务器SecondaryNameNode上。当名称节点出错时,就可以根据备份服务器SecondaryNameNode中的FsImage和Editlog数据进行恢复。
数据节点出错
    每个数据节点会定期向名称节点发送“心跳”信息,向名称节点报告自己的状态
当数据节点发生故障,或者网络发生断网时,名称节点就无法收到来自一些数据节点的心跳信息,这时,这些数据节点就会被标记为“宕机”,节点上面的所有数据都会被标记为“不可读”,名称节点不会再给它们发送任何I/O请求
这时,有可能出现一种情形,即由于一些数据节点的不可用,会导致一些数据块的副本数量小于冗余因子
名称节点会定期检查这种情况,一旦发现某个数据块的副本数量小于冗余因子,就会启动数据冗余复制,为它生成新的副本
HDFS和其它分布式文件系统的最大区别就是可以调整冗余数据的位置
数据错误
    网络传输和磁盘错误等因素,都会造成数据错误
客户端在读取到数据后,会采用md5和sha1对数据块进行校验,以确定读取到正确的数据
在文件被创建时,客户端就会对每一个文件块进行信息摘录,并把这些信息写入到同一个路径的隐藏文件里面
当客户端读取文件的时候,会先读取该信息文件,然后,利用该信息文件对每个读取的数据块进行校验,如果校验出错,客户端就会请求到另外一个数据节点读取该文件块,并且向名称节点报告这个文件块有错误,名称节点会定期检查并且重新复制这个块











13. HDFS数据读写操作(背)(待补充)

HDFS有很多命令,其中fs命令可以说是HDFS最常用的命令,利用fs命令可以查看HDFS文件系统的目录结构、上传和下载数据、创建文件信息等。该命令的用法如下
hadoop fs [genericOptions] [commandOptions]
hadoop fs -ls :显示指定的文件的详细信息

第四章

1. 从BigTable说起

  • BigTable是一个分布式存出系统
  • BigTable起初是用于解决典型的互联网搜索问题

2. HBase 和BigTable的底层技术对应关系

在这里插入图片描述

3. HBase与传统关系数据库的对比分析

HBase与传统的关系数据库的区别主要体现在以下几个方面:

  • 数据类型:关系数据库采用关系模型,具有丰富的数据类型和存储方式,HBase则采用了更加简单的数据模型,它把数据存储为未经解释的字符串
  • 数据操作:关系数据库中包含了丰富的操作,其中会涉及复杂的多表连接。HBase操作则不存在复杂的表与表之间的关系,只有简单的插入、查询、删除、清空等,因为HBase在设计上就避免了复杂的表和表之间的关系
  • 存储模式:关系数据库是基于行模式存储的。HBase是基于列存储的,每个列族都由几个文件保存,不同列族的文件是分离的
  • 数据索引:关系数据库通常可以针对不同列构建复杂的多个索引,以提高数据访问性能。HBase只有一个索引——行键,通过巧妙的设计,HBase中的所有访问方法,或者通过行键访问,或者通过行键扫描,从而使得整个系统不会慢下来
  • 数据维护:在关系数据库中,更新操作会用最新的当前值去替换记录中原来的旧值,旧值被覆盖后就不会存在。而在HBase中执行更新操作时,并不会删除数据旧的版本,而是生成一个新的版本,旧有的版本仍然保留
  • 可伸缩性:关系数据库很难实现横向扩展,纵向扩展的空间也比较有限。相反,HBase和BigTable这些分布式数据库就是为了实现灵活的水平扩展而开发的,能够轻易地通过在集群中增加或者减少硬件数量来实现性能的伸缩

4. HBase数据模型概述

概述:HBase是一个稀疏、多维度、排序的映射表,这张表的索引是行键、列族、列限定符和时间戳
:HBase采用表来组织数据,表由行和列组成,列划分为若干个列族
:每个HBase表都由若干行组成,每个行由行键(row key)来标识。
列族:一个HBase表被分组成许多“列族”(Column Family)的集合,它是基本的访问控制单元
列限定符:列族里的数据通过列限定符(或列)来定位
单元格:在HBase表中,通过行、列族和列限定符确定一个“单元格”(cell),单元格中存储的数据没有数据类型,总被视为字节数组byte[]
时间戳:每个单元格都保存着同一份数据的多个版本,这些版本采用时间戳进行索引
在这里插入图片描述






5. HBase功能组件及各组件功能

  • 库函数:链接到每个客户端
  • 一个Master主服务器
  • 许多个Region服务器

Master:主服务器Master负责管理和维护HBase表的分区信息,维护Region服务器列表,分配Region,负载均衡**
Region:Region服务器负责存储和维护分配给自己的Region,处理来自客户端的读写请求**

6. HBase的三层结构(名称+各自作用)

什么是region:表示一个分区,包含了位于某个值域区间内的所有数据,它是负载均衡和数据分发的基本单位,初始时候,一个表只有一个Region,随着数据插入,持续变多

  • 元数据表,又名.META.表,存储了Region和Region服务器的映射关系
  • 当HBase表很大时, .META.表也会被分裂成多个Region
  • 根数据表,又名-ROOT-表,记录所有元数据的具体位置
  • -ROOT-表只有唯一一个Region,名字是在程序中被写死的
  • Zookeeper文件记录了-ROOT-表的位置

在这里插入图片描述

在这里插入图片描述

7. Region服务器工作原理(理解)

在这里插入图片描述

  1. 用户读写数据过程:①用户写入数据时,被分配到相应Region服务器去执行②用户数据首先被写入到MemStore和Hlog中③只有当操作写入Hlog之后,commit()调用才会将其返回给客户端④当用户读取数据时,Region服务器会首先访问MemStore缓存,如果找不到,再去磁盘上面的StoreFile中寻找
  2. 缓存的刷新:①系统会周期性地把MemStore缓存里的内容刷写到磁盘的StoreFile文件中,清空缓存,并在Hlog里面写入一个标记
    ②每次刷写都生成一个新的StoreFile文件,因此,每个Store包含多个StoreFile文件
    ③每个Region服务器都有一个自己的HLog 文件,每次启动都检查该文件,确认最近一次执行缓存刷新操作之后是否发生新的写入操作;如果发现更新,则先写入MemStore,再刷写到StoreFile,最后删除旧的Hlog文件,开始为用户提供服务

  3. StoreFile的合并:①每次刷写都生成一个新的StoreFile,数量太多,影响查找速度
    ②调用Store.compact()把多个合并成一个
    ③合并操作比较耗费资源,只有数量达到一个阈值才启动合并

未完待续

总结

  文章纯属期末复习整理,如有不足和错误的地方,希望评论指出或私信
最后希望给文章点个赞,整理不易!!!
最后希望给文章点个赞,整理不易!!!
最后希望给文章点个赞,整理不易!!!


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!