ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

大数据技术原理与应用——期末复习

2021-01-08 23:32:22  阅读:306  来源: 互联网

标签:文件 复习 HDFS Region 期末 原理 HBase 数据 节点


大数据技术原理与应用

大数据技术原理与应用

第一章 大数据概述

1、大数据的4v特征

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

2、大数据的影响

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

3、大数据的两大核心技术

  • **· 分布式存储:**GFS/HDFS、BigTable/HBase、NoSQL
  • **· 分布式处理:**MapReduce

4、大数据计算模式及代表产品

  • **批处理计算:**针对大规模数据的批量处理。MapReduce、Spark。
  • **流计算:**针对流数据的实时计算。Storm、S4、Flume、Streams、Puma、DStream、SuperMario、银河流数据处理平台。
  • **图计算:**针对大规模图结构数据的处理。Pregel、GraphX、Giraph、PowerGraph、Hama、GoldenOrb。
  • **查询分析计算:**大规模数据的存储管理和查询分析。Dremel、Hive、Cassandra、Impala。

5、大数据与云计算、物联网的关系

云计算、大数据和物联网代表了IT领域最新的技术发展趋势,三者相辅相成,既有联系又有区别。

  • 云计算为大数据提供了技术基础;大数据为云计算提供用武之地。
  • 云计算为物联网提供海量数据存储能力;物联网为云计算技术提供了广阔的应用空间。
  • 物联网是大数据的重要来源;大数据技术为物联网数据分析提供支撑。

第二章 第二章大数据处理架构Hadoop

1、Hadoop的发展历史

Apache软件基金会旗下的开源分布式平台,基于Java语言开发,具有很好的跨平台性,核心是分布式文件系统HDFS和MapReduce。Hadoop源自始于Apache Nutch项目。

2、Hadoop的特性

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

3、Hadoop1.0与Hadoop2.0的区别

Hadoop2.0增加了HDFS HA和YARN两个系统。

4、Hadoop生态系统

Hadoop生态系统

5、Hadoop生态系统组件及功能

Hadoop项目结构

6、core-site.xml和hdfs-site.xml配置文件

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/hadoop/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>
  • hadoop.tmp.dir表示存放临时数据的目录,即包括NameNode的数据,也包括DataNode的数据。该路径任意指定,只要实际存在该文件夹即可。
  • name为fs.defaultFS的值,表示hdfs路径的逻辑名称。
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/hadoop/tmp/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
       <value>file:/usr/local/hadoop/tmp/dfs/data</value>
    </property></configuration>
  • dfs.replication表示副本的数量,伪分布式要设置为1。
  • dfs.namenode.name.dir表示本地磁盘目录,是存储fsimage文件的地方。
  • dfs.datanode.data.dir表示本地磁盘目录,HDFS数据存放block的地方。

第三章 分布式文件系统HDFS

1、分布式文件系统的结构

分布式文件系统把文件分布存储到多个计算机节点上,成千上万的计算机节点构成计算机集群。分布式文件系统在物理结构上是由计算机集群中的多个节点构成的,这些节点分为两类,一类叫“主节点”(Master Node)或者也被称为“名称结点”(NameNode),另一类叫“从节点”(Slave Node)或者也被称为“数据节点”(DataNode)。

2、HDFS的局限性

不适合低延迟数据访问、无法高效存储大量小文件、不支持多用户写入及任意修改文件。

3、块的概念

HDFS默认一个块64MB,HDFS2.0后默认大小128MB。
块的优点:

  • 支持大规模文件存储:一个文件的大小不会受到单个节点的存储容量的限制,可以远远大于网络中任意节点的存储容量
  • 简化系统设计:大大简化了存储管理,方便了元数据的管理,元数据不需要和文件块一起存储,可以由其他系统负责管理元数据
  • 适合数据备份:每个文件块都可以冗余存储到多个节点上,大大提高了系统的容错性和可用性

4、名称节点和数据节点

  • **名称节点:**存储元数据、元数据保存在内存中、保存文件,block,datanode之间的映射关系。
  • **数据节点:**存储文件内容、文件内容保存在磁盘、维护了block id到datanode本地文件的映射关系。

5、名称节点的数据结构和启动

在HDFS中,名称节点(NameNode)负责管理分布式文件系统的命名空间(Namespace),保存了两个核心的数据结构,即FsImage和EditLog。

  • FsImage用于维护文件系统树以及文件树中所有的文件和文件夹的元数据。
  • 操作日志文件EditLog中记录了所有针对文件的创建、删除、重命名等操作。
  • 名称节点记录了每个文件中各个块所在的数据节点的位置信息
    在这里插入图片描述
    在名称节点启动的时候,它会将FsImage文件中的内容加载到内存中,之后再执行EditLog文件中的各项操作,使得内存中的元数据和实际的同步,存在内存中的元数据支持客户端的读操作。
    一旦在内存中成功建立文件系统元数据的映射,则创建一个新的FsImage文件和一个空的EditLog文件。
    名称节点启动之后,HDFS中的更新操作会重新写到EditLog文件中,因为FsImage文件一般都很大(GB级别的很常见),如果所有的更新操作都往FsImage文件中添加,这样会导致系统运行的十分缓慢,但是,如果往EditLog文件里面写就不会这样,因为EditLog 要小很多。每次执行写操作之后,且在向客户端发送成功代码之前,edits文件都需要同步更新。
    需要注意的是,名称节点在启动的过程中处于“安全模式”,只能对外提供读操作,无法提供写操作。启动过程结束后,系统会退出安全模式,进入正常运行状态,提供写操作。

6、数据节点

数据节点是分布式文件系统HDFS的工作节点,负责数据的存储和读取,会根据客户端或者是名称节点的调度来进行数据的存储和检索,并且向名称节点定期发送自己所存储的块的列表。每个数据节点中的数据会被保存在各自节点的本地Linux文件系统中。

7、第二名称节点

在名称节点运行期间,HDFS的所有更新操作都是直接写到EditLog中,久而久之, EditLog文件将会变得很大。虽然这对名称节点运行时候是没有什么明显影响的,但是,当名称节点重启的时候,名称节点需要先将FsImage里面的所有内容映像到内存中,然后再一条一条地执行EditLog中的记录,当EditLog文件非常大的时候,会导致名称节点启动操作非常慢,而在这段时间内HDFS系统处于安全模式,一直无法对外提供写操作,影响用户的使用。
第二名称节点是HDFS架构中的一个组成部分,它是用来保存名称节点中对HDFS 元数据信息的备份,并减少名称节点重启的时间。SecondaryNameNode一般是单独运行在一台机器上。
第二名称节点工作示意图
第二名称节点的工作:

  • 1、每隔一段时间,第二名称节点会和名称节点通信,请求其停止使用EditLog文件,暂时将新到达的写操作添加到一个新文件EditLog.new中。
  • 2、第二名称节点把名称中的FsImage文件和EditLog文件拉回本地,再加载到内存中。
  • 3、对二者执行合并操作。在内存中逐条执行EditLog文件中的操作,使得FsImage保持最新。
  • 4、合并结束后,第二名称节点会把合并后得到的最新的FsImage文件发送到名称节点。
  • 5、名称节点收到后,会用最新的FsImage文件替换旧的FsImage文件,同时用EditLog.new文件替换EditLog文件。

8、HDFS体系结构

HDFS采用了主从(Master/Slave)结构模型,一个HDFS集群包括一个名称节点(NameNode)和若干个数据节点(DataNode)。名称节点作为中心服务器,负责管理文件系统的命名空间及客户端对文件的访问。集群中的数据节点一般是一个节点运行一个数据节点进程,负责处理文件系统客户端的读/写请求,在名称节点的统一调度下进行数据块的创建、删除和复制等操作。每个数据节点的数据实际上是保存在本地Linux文件系统中的。
在这里插入图片描述

9、HDFS通信协议

  • HDFS是一个部署在集群上的分布式文件系统,因此,很多数据需要通过网络进行传输。
  • 所有的HDFS通信协议都是构建在TCP/IP协议基础之上的。
  • 客户端通过一个可配置的端口向名称节点主动发起TCP连接,并使用客户端协议与名称节点进行交互。
  • 名称节点和数据节点之间则使用数据节点协议进行交互。
  • 客户端与数据节点的交互是通过RPC(Remote Procedure
    Call)来实现的。在设计上,名称节点不会主动发起RPC,而是响应来自客户端和数据节点的RPC请求。

10、HDFS存储原理

冗余数据保存

HDFS采用多副本方式对数据进行冗余存储,通常一个数据块的多个副本会被分布到不同的数据节点上。
优点:加快数据传输速度、容易检查数据错误、保证数据可靠性。

数据存取策略

  • 数据存放:
    第一个副本:放置在上传文件的数据节点;如果是集群外提交,则随机挑选一台磁盘不太满、CPU不太忙的节点
    第二个副本:放置在与第一个副本不同的机架的节点上
    第三个副本:与第一个副本相同机架的其他节点上
    更多副本:随机节点
  • 数据读取:
    HDFS提供了一个API可以确定一个数据节点所属的机架ID,客户端也可以调用API获取自己所属的机架ID。当客户端读取数据时,从名称节点获得数据块不同副本的存放位置列表,列表中包含了副本所在的数据节点,可以调用API来确定客户端和这些数据节点所属的机架ID,当发现某个数据块副本对应的机架ID和客户端对应的机架ID相同时,就优先选择该副本读取数据,如果没有发现,就随机选择一个副本读取数据。

数据错误的种类

数据错误的三种:名称节点出错、数据节点出错、数据出错。

11、HDFS常用命令

  • hadoop fs -ls <path>:显示 指定的文件的详细信息
  • hadoop fs -mkdir <path>:创建<path>指定的文件夹
  • hadoop fs -cat <path>:将<path>指定的文件的内容输出到标准输出(stdout)
  • hadoop fs -copyFromLocal <localsrc><dst>:将本地源文件<localsrc>复制到路径<dst>指定的文件或文件夹中

第四章 分布式数据库HBase

1、HBase从BigTable说起

BigTable是一个分布式存储系统

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

  • **文件存储系统:**HDFS(HBase)和GFS(BigTable)
  • **海量数据处理:**Hadoop MapReduce(HBase)和MapReduce(BigTable)
  • **协同服务管理:**Zookeeper(HBase)和Chubby(BigTable)

3、HBase与传统数据库相比:

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

4、HBase数据模型

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

HBase中需要根据行键、列族、列限定符和时间戳来确定一个单元格,因此,可以视为一个“四维坐标”,即[行键, 列族, 列限定符, 时间戳]
注意:HBase按列族进行物理存储。

5、HBase的实现包含三个功能组件

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

客户端并不是直接从Master主服务器上读取数据,而是在获得Region的存储位置信息后,直接从Region服务器上读取数据。
客户端并不依赖Master,而是通过Zookeeper来获得Region位置信息,大多数客户端甚至从来不和Master通信,这种设计方式使得Master负载很小 。
开始只有一个Region,后来不断分裂。
一个Region会分裂成多个新的Region

Region拆分操作非常快,接近瞬间,因为拆分之后的Region读取的仍然是原存储文件,直到“合并”过程把存储文件异步地写到独立的文件之后,才会读取新文件。

6、HBase的三层结构

三层结构

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

7、Region服务器工作原理

在这里插入图片描述

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

8、HLog工作原理

  • 分布式环境必须要考虑系统出错。HBase采用HLog保证系统恢复。HBase系统为每个Region服务器配置了一个HLog文件,它是一种预写式日志(Write
    Ahead Log)。
  • 用户更新数据必须首先写入日志后,才能写入MemStore缓存,并且,直到MemStore缓存内容对应的日志已经写入磁盘,该缓存内容才能被刷写到磁盘。
  • Zookeeper会实时监测每个Region服务器的状态,当某个Region服务器发生故障时,Zookeeper会通知Master。
  • Master首先会处理该故障Region服务器上面遗留的HLog文件,这个遗留的HLog文件中包含了来自多个Region对象的日志记录。
  • 系统会根据每条日志记录所属的Region对象对HLog数据进行拆分,分别放到相应Region对象的目录下,然后,再将失效的Region重新分配到可用的Region服务器中,并把与该Region对象相关的HLog日志记录也发送给相应的Region服务器。
  • Region服务器领取到分配给自己的Region对象以及与之相关的HLog日志记录以后,会重新做一遍日志记录中的各种操作,把日志记录中的数据写入到MemStore缓存中,然后,刷新到磁盘的StoreFile文件中,完成数据恢复。
  • 共用日志优点:提高对表的写操作性能;缺点:恢复时需要分拆日志。

9、HBase性能优化的方法

  • **行键:**行键是按照字典序存储,因此,设计行键时,要充分利用这个排序特点,将经常一起读取的数据存储到一块,将最近可能会被访问的数据放在一块。
    举个例子:如果最近写入HBase表中的数据是最可能被访问的,可以考虑将时间戳作为行键的一部分,由于是字典序排序,所以可以使用Long.MAX_VALUE - timestamp作为行键,这样能保证新写入的数据在读取时可以被快速命中。
  • **InMemory:**创建表的时候,可以通过HColumnDescriptor.setInMemory(true)将表放到Region服务器的缓存中,保证在读取的时候被cache命中。
  • **Max Version:**创建表的时候,可以通过HColumnDescriptor.setMaxVersions(int
    maxVersions)设置表中数据的最大版本,如果只需要保存最新版本的数据,那么可以设置setMaxVersions(1)。
  • **Time To Live:**创建表的时候,可以通过HColumnDescriptor.setTimeToLive(int
    timeToLive)设置表中数据的存储生命期,过期数据将自动被删除,例如如果只需要存储最近两天的数据,那么可以设置setTimeToLive(2 * 24 * 60 * 60)。

10、HBase常见的shell命令

create ‘temptable’,’f1’,’f2’,’f3’
list
put ‘temptable’,’r1’,’f1:c1’,’hello,dblab’
scan ‘temptable’
get ‘temptable’,’r1’,{COLUMN=>’f1:c1’}
enable/disable ‘temptable’
drop ‘temptable’

标签:文件,复习,HDFS,Region,期末,原理,HBase,数据,节点
来源: https://blog.csdn.net/BKolo/article/details/112382168

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有