大数据技术原理与应用:期末考点总结

本文是大数据技术期末复习材料,重点梳理了Hadoop的发展历史、特性、版本及其在HDFS、MapReduce上的应用。介绍了HDFS的结构、数据存储策略、NameNode与DataNode的角色以及数据冗余机制。此外,还涵盖了MapReduce的计算流程、体系结构和与传统并行计算框架的比较。最后提到了Hadoop 2.x引入的YARN及其目标,以及Spark的运行速度、通用性和易用性特点。
摘要由CSDN通过智能技术生成

个人期末复习材料,根据林子雨的大数据技术教材与其它资料整理。

第一章 大数据概述

1.大数据的4v特征

  • 数据量大 volume
  • 价值密度低 value
  • 数据类型繁多 variety
  • 处理速度快 velocity

2.大数据3种思维方式的转变

在思维方式方面,大数据完全颠覆了传统的思维方式:

  • 全样而非抽样

  • 效率而非精确

  • 相关而非因果

3.大数据两大核心技术

分布式存储和分布式处理

在这里插入图片描述

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

大数据计算模式 解决问题 代表产品
批处理计算 针对大规模数据的批量处理 MapReduce、Spark等
流计算 针对流数据的实时计算 Storm、S4、Flume、Streams、Puma、DStream、Super Mario、银河流数据处理平台等
图计算 针对大规模图结构数据的处理 Pregel、GraphX、Giraph、PowerGraph、Hama、GoldenOrb等
查询分析计算 大规模数据的存储管理和查询分析 Dremel、Hive、Cassandra、Impala等


5.大数据、云计算与物联网之间的区别和联系
在这里插入图片描述

第二章 Hadoop

Hadoop面试题 http://www.dajiangtai.com/community/18456.do

1.Hadoop的发展历史

2002年,Hadoop起源于Doug Cutting开发Apache Nutch网络搜索引擎项目。

2004年,Nutch项目也模仿GFS开发了自己的分布式文件系统NDFS(Nutch Distributed File System),也就是HDFS的前身。

2004年,谷歌公司又发表了另一篇具有深远影响的论文《MapReduce:Simplified Data Processing on Large Clusters(Mapreduce:简化大规模集群上的数据处理)》,阐述了MapReduce分布式编程思想。

2005年,Doug Cutting等人开始尝试实现MapReduce计算框架,并将它与NDFS(Nutch Distributed File System)结合,用以支持Nutch引擎的主要算法,Nutch开源实现了谷歌的MapReduce

2006年2月,由于NDFS和MapReduce在Nutch引擎中有着良好的应用,Nutch中的NDFS和MapReduce开始独立出来,成为Lucene项目的一个子项目,称为Hadoop,同时,Doug Cutting加盟雅虎。

2008年1月,Hadoop正式成为Apache顶级项目,包含众多子项目,Hadoop也逐渐开始被雅虎之外的其他公司使用。同年4月,Hadoop打破世界纪录,成为最快排序1TB数据的系统,它采用一个由910个节点构成的集群进行运算,排序时间只用了209秒。

在2009年5月,Hadoop更是把1TB数据排序时间缩短到62秒。Hadoop从此名声大震,迅速发展成为大数据时代最具影响力的开源分布式开发平台,并成为事实上的大数据处理标准

2.Hadoop的特性

Hadoop以一种可靠、高效、可伸缩的方式进行处理的,它具有以下几个方面的特性:

  • 高可靠性:多副本
  • 高效性:并行工作
  • 高可扩展性:方便扩展服务器
  • 高容错性:失败的任务会重新分配
  • 成本低:廉价的集群设备
  • 运行在Linux平台上
  • 支持多种编程语言

3.Hadoop的版本

Apache Hadoop版本分为两代,我们将第一代Hadoop称为Hadoop 1.0,第二代Hadoop称为Hadoop 2.0。

Hadoop 1.x 和Hadoop 2.x的区别:在1.x版本中,MapReduce负责逻辑运算和资源调度,耦合性比较大;2.x版本中新增了YARN,负责资源调度,这样MapReduce就只负责运算了。

在这里插入图片描述

4.Hadoop生态系统/项目结构

组件 功能
HDFS 分布式文件存储系统
MapReduce 分布式并行计算框架
YARN 资源调度管理框架
HBase 分布式非关系型数据库
Hive Hadoop上的数据仓库。提供HQL,将HQL语句转化为MapReduce程序
Zookeeper 提供分布式协调一致性服务
Kafka 高吞吐量的分布式发布/订阅消息系统
Pig 基于Hadoop的大数据分析平台,提供类似sql的查询语言Pig Latin。
Flume 日志采集框架
Oozie Hadoop上的作业流调度系统
Spark 分布式并行计算框架
Sqoop 数据传输框架,用于MySQL与HDFS之间的数据传递
Storm 流计算框架

5.配置文件中的参数

所有配置文件:

在这里插入图片描述

重点关注 hdfs-site.xml,core-site.xml

  • hdfs-site.xml
    在这里插入图片描述

  • core-site.xml

hadoop.tmp.dir 是 hadoop文件系统依赖的基本配置,很多配置路径都依赖它,它的默认位置是在/tmp/{$user}下面,注意这是个临时目录。因此,它的持久化配置很重要的, 如果选择默认,一旦因为断电等外在因素影响,/tmp/{$user}下的所有东西都会丢失。

在这里插入图片描述

第三章 HDFS

1.分布式文件系统结构

主从结构:分布式文件系统在物理上是由诸多计算机节点组成的,这里计算机节点分为两类,一类叫主节点,一类叫从节点。

2.HDFS的目标

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

3.HDFS的局限性

  • 不适合低延迟数据访问(不适合实时处理,io开销大)

  • 无法高效存储大量小文件(文件块机制)

  • 不支持多用户并发写入及任意修改文件(一个文件,同时只允许一个写入者对文件进行追加)

4.块 Block

块是HDFS中文件存储的基本单位,在Hadoop2.x中文件块大小默认为128MB,在1.x中默认为64MB。

HDFS采用抽象的块概念可以带来以下几个明显的好处

  • 支持大规模文件存储:文件以块为单位进行存储,一个大规模文件可以被分拆成若干个文件块,不同的文件块可以被分发到不同的节点上,因此,一个文件的大小不会受到单个节点的存储容量的限制,可以远远大于网络中任意节点的存储容量
  • 简化系统设计(简化了文件和元数据的管理):首先,大大简化了存储管理,因为文件块大小是固定的,这样就可以很容易计算出一个节点可以存储多少文件块;其次,方便了元数据的管理,元数据不需要和文件块一起存储,可以由其他系统负责管理元数据
  • 适合数据备份:每个文件块都可以冗余存储到多个节点上,大大提高了系统的容错性和可用性

5.HDFS体系结构

hdfs中采用了主-从结构模型,一个hdfs集群中包含1个namenode和若干个datanode。

  • 名称节点 namenode
  • 数据节点 datanode
  • 客户端 client

6.NameNode 名称节点

namenode节点是整个hdfs集群的唯一的主节点,负责:

  • 接收和回复客户的访问请求
  • 存储文件系统的所有元数据(管理文件系统的命名空间)

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

  • FsImage

    命名空间镜像文件。FsImage 用于维护文件系统树以及文件树中所有的文件和目录的元数据,即包含文件系统中所有目录和文件inode的序列化形式

  • EditLog

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


启动过程(处于安全模式)

在名称节点启动的时候,第一次启动NameNode格式化后,创建Fsimage和Edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。

它会将FsImage文件中的内容加载到内存中,之后再执行EditLog文件中的各项操作,使得内存中的元数据和实际的同步。

一旦在内存中成功建立文件系统元数据的映射,则创建一个新的FsImage文件和一个空的EditLog文件。


7.DataNode 数据节点

datanode节点是hdfs集群的工作节点,负责:

  • 数据的存储:存储文件系统的数据文件,每个文件被分成多个数据块存储在不同节点上。
  • 数据的读写:接收客户端的读写请求
  • 定期向namenode发送心跳信息,若没有发送则被标记为宕机
  • 在namenode的调度下进行对数据块的操作

8.元数据

存储的信息:hdfs中的元数据包含HDFS中文件的所有块和块的存储位置、修改和访问时间、访问权限、大小等信息。

存储的位置:元数据存储在NameNode节点的FsImage数据结构中,由它负责管理。

9.HDFS工作机制(上面都有提到过)

  • NameNode与SecondaryNameNode

    (1)NN的启动过程

    (2)采用SecondaryNameNode的原因

    (3)SNN的工作机制

  • DataNode

    存储文件、注册并接收与回复client读写请求、发送块列表、发送心跳信息

10.通信协议(了解)

HDFS中有5种通信协议,各个节点之间根据不同协议通过RPC (Remote Procedure Call) 进行交互。

11.HDFS冗余数据存储

HDFS对于同一个数据块会存储多个副本,默认为3个。且不同副本被分布到不同节点上。

保证:系统的容错性和可用性

优点:加快数据传输速度、多个副本对比容易检查数据错误、保证数据可靠性

13.HDFS数据存储策略

假如一个数据块有3个副本,

那么第1个副本会随机存储在一个机架上的某个节点;

第2个副本会存储在与第1个副本相同机架的不同节点上;

第3个副本会存储在与第1个副本不同机架的随机节点上。
在这里插入图片描述

14.HDFS数据错误的三种类型

  • NameNode数据错误
  • DataNode数据错误
  • 数据出错

15.HDFS常用shell命令

# 启动HDFS
[ht@hadoop101 ~]$ start-dfs.sh

# 停止HDFS
[ht@hadoop101 ~]$ stop-dfs.sh

# 输出某个命令的帮助信息
[ht@hadoop101 ~]$ hadoop fs -help ls

# 显示目录详细信息,-p表示递归
[ht@hadoop101 ~]$ hadoop fs -ls [-R]

# 在HDFS上创建目录,-p表示递归创建
[ht@hadoop101 ~]$ hadoop fs -mkdir -p /user/ht

# 显示文件内容
[ht@hadoop101 myfile]$ hadoop fs -cat /user/ht/test.txt

# 将HDFS上的文件拷贝到 HDFS的另一个目录
# 从/user/ht/test.txt 拷贝到 /user/ht/file/
[ht@hadoop101 myfile]$ hadoop fs -cp /user/ht/test.txt /user/ht/file/

# -copyFromLocal:从本地文件系统中拷贝文件到HDFS路径去
# -copyToLocal:从HDFS拷贝到本地
# -put:等同于copyFromLocal
# -get:等同于copyToLocal
# -mv:在HDFS目录中移动文件

# -chgrp将文件所属的用户组改为ht,-R表示递归
# -chmod改变文件权限、-chown改变文件所属用户 也是一样的
[ht@hadoop101 ~]$ hadoop fs -chgrp -R ht /user/ht/test.txt

# 删除文件或文件夹,-r表示递归
[ht@hadoop100 hadoop]$ hdfs dfs -rm [-r] /user/ht/wcoutput
# -rmdir:删除空目录
# -du 统计目录的大小信息

第四章 HBase

1.起源

HBase是谷歌的BigTable的开源实现。

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

在这里插入图片描述


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

区别主要在于:

  • 数据类型:hbase中所有数据都是字符串类型;关系型数据库中具有多种数据类型。

  • 数据操作:hbase只能对数据进行增、删、查、清空等操作,不能进行表之间的连接;关系型数据库可以增删改查,还可以通过表的外键进行连接。

  • 存储模型:hbase基于列存储,关系型数据库基于行存储。

  • 数据维护:hbase对数据进行操作后会保留历史版本。

  • 数据索引:hbase只有一个索引——行键,关系型数据库可以创建很多索引。

  • 可伸缩性:hbase可以通过集群节点的扩展实现存储数据量的水平扩展,关系型数据库难以实现横向扩展,纵向扩展的空间有限。

在hbase中:类型是未经解释的字符串,只能对它进行增删查等操作,索引就是它本身的行键,它就是按列存储,对它操作后还会保留历史版本,hbase还通过集群的机器增加和减少来实现存储容量的增大和缩小。

4.HBase的物理视图与概念视图

在这里插入图片描述

在这里插入图片描述


5.Master 和 Region的功能

  • Master

    master负责管理和维护HBase表的分区信息(Region列表),维护Region服务器列表分配Region以确保负载均衡。

  • Region

    region负责存储hbase表的数据,处理来自客户端的读写请求。

6.Region的定位(HBase的三层结构)

在这里插入图片描述

7.Region服务器工作原理

  • 用户读写数据过程

  • 缓存刷新

  • StoreFile的合并

8.HLog工作原理

HLog是记录Region中各项更新操作的日志,它持久化存储在磁盘中。

用户更新数据必须首先写入HLog后,才能写入MemStore缓存。

当Region启动时,首先检查HLog是否存在未合并的更新操作;若是则先执行更新操作,合并到MemStore和StoreFile中,然后生成一个新的空的HLog文件。

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命令

# 启动hbase shell
hadoop@ubuntu:~$ hbase shell

# 创建表t:列族为f,列族版本号为5
hbase> create 't1',{
   NAME => 'f1',VERSIONS => 5}

# 创建表t:列族为f1、f2、f3,两种方式等价
hbase> create 't1', {
   NAME => 'f1'}, {
   NAME => 'f2'}, {
   NAME => 'f3'}
hbase> create 't1', 'f1', 'f2', 'f3'

# 创建表t:将表根据分割算法HexStringSplit 分布在15个Region里
hbase> create 't1', 'f1', {
   NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}

# 创建表t:指定Region的切分点
hbase> create 't1', 'f1', SPLITS => ['10', '20', '30', '40']

--------------------------------------------------------------------------------------------------------
# help 查看create命令的帮助信息
hbase(main):002:0> help "create"
Creates a table. Pass a table name, and a set of column family         # create命令的描述
specifications (at least one), and, optionally, table configuration.
Column specification can be a simple string (name), or a dictionary
(dictionaries are described below in main help output), necessarily
including NAME attribute.
Examples:

Create a table with namespace=ns1 and table qualifier=t1               #指定namespace与
  hbase> create 'ns1:t1', {
   NAME => 'f1', VERSIONS => 5}

Create a table with namespace=default and table qualifier=t1
  hbase> create 't1', {
   NAME => 'f1'}, {
   NAME => 'f2'}, {
   NAME => 'f3'}
  hbase> # The above in shorthand would be the following:
  hbase> create 't1', 'f1', 'f2', 'f3'
  hbase> create 't1', {
   NAME => 'f1', VERSIONS => 1, TTL => 2592000, BLOCKCACHE => true}
  hbase> create 't1', {
   NAME => 'f1', CONFIGURATION => {
   'hbase.hstore.blockingStoreFiles' => '10'}}
  hbase> create 't1', {
   NAME => 'f1', IS_MOB => true, MOB_THRESHOLD => 1000000, MOB_COMPACT_PARTITION_POLICY => 'weekly'}

Table configuration options can be put at the end.
Examples:

  hbase> create 'ns1:t1', 'f1', SPLITS => ['10', '20', '30', '40']
  hbase> create 't1', 'f1', SPLITS => ['10', '20', '30', '40']
  hbase> create 't1', 'f1', SPLITS_FILE => 'splits.txt', OWNER => 'johndoe'
  hbase> create 't1', {
   NAME => 'f1', VERSIONS => 5}, METADATA => {
    'mykey' => 'myvalue' }
  hbase> # Optionally pre-split the table into NUMREGIONS, using
  hbase> # SPLITALGO ("HexStringSplit", "UniformSplit" or classname)
  hbase> create 't1', 'f1', {
   NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}
  hbase> create 't1', 'f1', {
   NUMREGIONS => 15, SPLITALGO => 'HexStringSplit', REGION_REPLICATION => 2, CONFIGURATION => {
   'hbase.hregion.scan.loadColumnFamiliesOnDemand' => 'true'}}
  hbase> create 't1', 'f1', {
   SPLIT_ENABLED => false, MERGE_ENABLED => false}
  hbase> create 't1', {
   NAME => 'f1', DFS_REPLICATION => 1}

You can also keep around a reference to the created table:

  hbase> t1 = create 't1', 'f1'

Which gives you a reference to the table named 't1', on which you can then
call methods.
-------------------------------------------------------------------------------------------------------

# list 列出所有表
hbase> list

# put 向表中指定的单元格添加数据
hbase> put 't1','row1','f1:c1',120000             # 通过表,行键,列族:列限定符进行定位,值为120000

# get 通过指定坐标来获取单元格的值
hbase
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值