大数据原理和技术总结1
admin
2023-10-04 12:04:34
0

本文承接大数据基础原理1文章,是在阅读大数据原理与技术前的预备知识,做数据分析之前先理解好大数据原理,大数据框架,下面结合黄史浩老师的《大数据原理与技术》一书及在工作中整理的一些资料。

一、典型大数据技术架构及关键技术



二、业界常用的大数据平台简介

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。



CDH是Cloudera公司对整体hadoop集群环境进行监控与管理的企业级大数据管理平台。

Hortonworks 是新兴的 Hadoop供应商,与 Cloudear 最大的不同,它是免费的。

华为FusionInsight HD是一个分布式数据处理系统,对外提供大容量的数据存储、分析查询和实时流式数据处理分析能力。

Oracle Exadata 数据库云平台为运行 Oracle 数据库提供了一个高性能、经济高效和高可用性的平台。

IBM BigInsights 4.1 两个部分组成,分为开源部分和IBM增值部分(BigSheets, BigSQL,BigR,文本分析), IBM在海外和推特(Twitter)是合作伙伴的关系,可以轻松将其社交媒体数据放入BigInsights进行分析。

三、Hadoop介绍

HDFS技术架构

HDFS分析:



1、NameNode:响应客户端的请求,维护目录树,管理元数据

2、DataNode:负责数据存储

3、Secondary NameNode,它可以加速NameNode启动

4、文件会按照固定的大小(blocksize)切成若干块后分布式存储在若干台DataNode上

5、每一个文件块可以有多个副本,并存放在不同的DataNode上

6、DataNode会定期向NameNode汇报自身所保存的文件block信息,而NameNode则会负责保持文件的副本数

7、HDFS的内部工作机制对客户端保持透明,客户端请求访问HDFS都是通过向NameNode申请来进行

HDFS分布式文件系统

HDFS为用户存储海量数据,且保证数据安全性,支持水平扩展.

Hadoop核心组件

1、提供海量数据存储的HDFS

2、提供资源管理的Yarn

3、提供海量数据计算功能的MapReduce



HDFS写流程

写流程分析:

1、根namenode通信请求上传文件,namenode检查目标文件是否已存在,父目录是否存在

2、namenode返回是否可以上传

3、client请求第一个 block该传输到哪些datanode上

4、namenode返回3个datanode服务器ABC

5、client请求3台dn中的一台A上传数据(本质上是一个RPC调用,建立pipeline),A收到请求会继续调用B,然后B调用C,将真个pipeline建立完成,逐级返回客户端

6、client开始往A上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位,A收到一个packet就会传给B,B传给C;A每传一个packet会放入一个应答队列等待应答

7、当一个block传输完成之后,client再次请求namenode上传第二个block的服务器。



HDFS读流程

读流程分析:

1、读取文件名称

2、向NM获取文件第一批block位置,这个block会根据副本数返回对应数量的locations数,依据网络拓扑结构排序,距离client端的排在前面,从原理来说,是通过DistributedFileSystem对象调用getFileBlockLocations来获取locations

3、获取距离clinet最近的DN并与其建立通信,则关闭指向该DN的连接,接着读取下一个block,以此类推。假设所有的块都读取完了,则把所有的流都关闭。实际上,也是通过DistributedFileSystem来open一个流对象,将其封装到DFSInputStream对象当中

4、如果读取的过程出现DN出现异常(比如通信异常),则会尝试去读取第二个优先位置的DN,并且记录该错误的DN,剩余的blocks读取的时候直接跳过该DN



HDFS健康度检测

如果所有的文件满足最小副本的要求,那么就认为文件系统是健康的hadoop提供了fsck tool来对整个文件系统或者单独的文件、目录来进行健康状态的检查fsck工具只会列出有问题的文件和block,但是它并不会对它们进行修复

start checking from this path 指定要进行检查的路径
-move move corrupted files to /lost+found 将有问题的文件move到 /lost+found
-delete delete corrupted files 删除有问题的文件
-files print out files being checked 打印出正在被检查的文件
-openforwrite
print out files opened for write 打印出正在被写入的文件
-includeSnapshots
include snapshot data if the given path indicates a snapshottable
directory or there are snapshottable directories under it
-list-corruptfileblocks print out list of missing blocks and files they belong to 打印出missing的block,以及其对应的文件
-blocks print out block report 打印block报告 (需要和-files参数一起使用)
-locations print out locations for every block 打印每个block的位置信息(需要和-files参数一起使用)
-racks print out network topology for data-node locations 打印位置信息的网络拓扑图 (需要和-files参数一起使用)

HDFS日常维护及问题定位

over-replicated即备份个数大于"dfs.replication"的block个数,可能因为balancer或者调整replication个数导致;通常HDFS会自动删除多余的文件。

under-replicated即备份个数小于"dfs.replication"的blocks个数,namenode将会择机为它们创建新的备份;不过此时管理员应该清楚,出现此问题的原因,请查看集群中是否有datanode离群或者硬件故障。

mis-replicated即备份错误的blocks个数,即违反hdfs blocks放置策略;可能因为管理员随意调整replication因子导致,也可能因为rack整体故障后引起。

目前HDFS尚不能自动解决这一问题,如果集群中有大量mis-replicated块,建议首先通过"hdfs dfs -setrep"指定手动调大整个集群(或者某个文件、路径)的replications,等重新replication结束后,再手动调小此值,此后HDFS将会根据blocks放置策略,删除那些多余的blocks备份。missing blocks即没有任何replication的block,通常是因为集群大规模物理故障导致。

corrupt blocks表示损坏的blocks,指此block的所有副本都已损坏(无法使用);这种问题很少出现,一旦出现,几乎是致命的;极有可能是人为违反操作导致。一旦有损坏的文件或者blocks,可能会导致

Namenode无法正常启动(处于safemode),我们只能清理这些损坏的文件:“hdfs fsck path -move”可以把损坏的文件或blocks移动到lost found目录下或者使用"-delete"移除那些损坏的数据

MapReduce计算的背景与优势

为什么需要MapReduce

单机处理海量数据,硬件资源有限,无法胜任

一旦将单机版程序扩展到集群来分布式运行,将极大增加程序的复杂度和开发难度

引入mapreduce框架后,开发人员可以将绝大部分工作集中在业务逻辑的开发上,而将分布式计算中的复杂性交由框架来处理

举例:统计一个巨大的文件中每个单词出现的次数。

利用MapReduce解决:

顺序读入文件

Map: 抽取需要的信息

Group by key: 排序和shuffle

Reduce: 聚类、总结、过滤或者转化

为什么需要MapReducer

(1)海量数据在单机上处理因为硬件资源限制,无法胜任

(2)而一旦将单机版程序扩展到集群来分布式运行,将极大增加程序的复杂度和开发难度

(3)引入mapreduce框架后,开发人员可以将绝大部分工作集中在业务逻辑的开发上,而将分布式计算中的复杂性交由框架来处理

MR运行流程图

一个mr程序启动的时候,最先启动的是MRAppMaster,MRAppMaster启动后根据本次job的描述信息,计算出需要的maptask实例数量,然后向集群申请机器启动相应数量的maptask进程

maptask进程启动之后,根据给定的数据切片范围进行数据处理,主体流程为:利用客户指定的inputformat来获取RecordReader读取数据,形成输入KV对将输入KV对传递给客户定义的map()方法,做逻辑运算,并将map()方法输出的KV对收集到缓存将缓存中的KV对按照K分区排序后不断溢写到磁盘文件

MRAppMaster监控到所有maptask进程任务完成之后,会根据客户指定的参数启动相应数量的reducetask进程,并告知reducetask进程要处理的数据范围(数据分区)

Reducetask进程启动之后,根据MRAppMaster告知的待处理数据所在位置,从若干台maptask运行所在机器上获取到若干个maptask输出结果文件,并在本地进行重新归并排序,然后按照相同key的KV为一个组,调用客户定义的reduce()方法进行逻辑运算,并收集运算输出的结果KV,然后调用客户指定的outputformat将结果数据输出到外部存储









四、Yarn任务调度

理想情况下,我们应用对Yarn资源的请求应该立刻得到满足,但现实情况资源往往是有限的,特别是在一个很繁忙的集群,一个应用资源的请求经常需要等待一段时间才能的到相应的资源。在Yarn中,负责给应用分配资源的就是Scheduler。其实调度本身就是一个难题,很难找到一个完美的策略可以解决所有的应用场景。为此,Yarn提供了多种调度器和可配置的策略供选择。



五、HBase

HBase应用场景

对象存储:我们知道不少的头条类、新闻类的的新闻、网页、图片存储在HBase之中,一些病毒公司的病毒库也是存储在HBase之中

时序数据:HBase之上有OpenTSDB模块,可以满足时序类场景的需求

推荐画像:特别是用户的画像,是一个比较大的稀疏矩阵,蚂蚁的风控就是构建在HBase之上

时空数据:主要是轨迹、气象网格之类,滴滴打车的轨迹数据主要存在HBase之中,另外在技术所有大一点的数据量的车联网企业,数据都是存在HBase之中

CubeDB OLAP:Kylin一个cube分析工具,底层的数据就是存储在HBase之中,不少客户自己基于离线计算构建cube存储在hbase之中,满足在线报表查询的需求

消息/订单:在电信领域、银行领域,不少的订单查询底层的存储,另外不少通信、消息同步的应用构建在HBase之上

Feeds流:典型的应用就是xx朋友圈类似的应用

NewSQL:之上有Phoenix的插件,可以满足二级索引、SQL的需求,对接传统数据需要SQL非事务的需求

HBase特性

容量巨大

相比传统的关系型数据库而言,如果数据记录在亿级别,查询和写入的性能会呈指数级下降,所以大量的数据

对于传统数据库而言是一种灾难。但Hbase存储百亿、千亿甚至更多数据不存在任何问题。

面向列

面向列存储和权限控制,支持独立检索,只访问查询涉及的列,可以大量的降低系统的IO

扩展性

Hbase的扩展性是热扩展,在不停止现有的服务前提下可以随时的添加和减少节点

高可靠性

Hbase提供WAL和Replication机制,前者保证数据写入时不会因为集群异常而导致写入数据丢失,后者保证

了在集群出现严重问题时,数据不会发生丢失或损坏。同时底层使用HDFS,加上了协调服务Zookeeper

高性能

底层的LSM数据结构(将对数据的修改增量保持在内存中,达到指定的大小限制后将这些修改操作批量写入磁

盘,不过读取的时候稍微麻烦,需要合并磁盘中历史数据和内存中最近修改操作,所以写入性能大大提升,读

取时可能需要先看是否命中内存,否则需要访问较多的磁盘文件)和rowkey有序排序设计结构使得Hbase有

很高的写性能。

Region的切分,主键索引和缓存机制使得Hbase在海里数据下具备一定的随机读取性能,该性能针对rowkey

的查询能够达到毫秒级别

HBase表结构

HBase的设计抛弃了传统RDBMS的行式数据模型,把索引和数据模型原生的集成在了一起

RowKey: 行键,可理解成MySQL中的主键列。

Column: 列,可理解成MySQL列。

ColumnFamily: 列族, HBase引入的概念:

将多个列聚合成一个列族。可以理解成MySQL的垂直分区(将一张宽表,切分成几张不那么宽的表)。

此机制引入的原因,是因为HBase相信,查询可能并不需要将一整行的所有列数据全部返回。就像在写SQL时往往不太会写select all一样)对应到文件存储结构(不同的ColumnFamily会写入不同的文件)。

TimeStamp:在每次跟新数据时,用以标识一行数据的不同版本(事实上,TimeStamp是与列绑定的。)

六:ZooKeeper功能和架构

Zookeeper是一个分布式协调服务;就是为用户的分布式应用程序提供协调服务

zookeeper是为别的分布式程序服务的

Zookeeper本身就是一个分布式程序(只要有半数以上节点存活,zk就能正常服务)

Zookeeper所提供的服务涵盖:主从协调、服务器节点动态上下线、统一配置管理、分布式共享锁、统一名称服务……

虽然说可以提供各种服务,但是zookeeper在底层其实只提供了两个功能:

管理(存储,读取)用户程序提交的数据;

并为用户程序提供数据节点监听服务;





相关内容