本篇文章是对于大数据的一些基本看法,以便让一些想学习大数据的朋友进一步去了解。
近年来大数据异常火爆,随着科技的不断更新迭代,大数据,成为了每天议论的热门话题。
去找度娘问什么是大数据,显示出来的结果长篇大论令人应接不暇,而且回答都比较偏抽象,一时半会儿也难以理解大数据到底是一个什么样的方向,所以我在这里给大家一些我个人对于大数据的理解和看法:
1)什么是大数据
大数据是在短时间内快速产生大量多种多样的有价值的
2)数据量过于巨大常规处理方法无法处理
垂直扩展:改变电脑内存的硬盘量,由于电脑硬盘装载有极限,所以在数据量巨大时也会发生问题。
横向扩展:指的是采购新的设备,和现有设备一起提供更强的负载能力。
3)大数据的5V特性
大数据的5V特点(IBM提出):Volume(大量)、Velocity(高速)、Variety(多样)、Value(低价值密度)、Veracity(真实性)。
4)大数据时代带来什么巨大问题
大数据时代的问题是数据量多且大,这就使得存储的管理面临着挑战。基础架构是大数据首先面临的挑战,,虽然目前基础架构面临的挑战还小,但是随着大数据行业的发展,这种数据的增长将呈现爆炸式,就对传统的架构形成压迫。
根据谷歌三大论文衍生出几种编程模型
MapReduce 分布处理 大规模的算法图形处理 文字处理
为了让MapReduce处理更快,产生了Spark
Spark类型有多种,分别如下:
Spark Core
SparkSql
SparkStreaming
Mllib
Graphx(Spark已经对其停止维护)
GFS→HDFS 作为Apache Nutch的基础架构 是拥有高容错性的分布式文件系统
Bigtable→BHBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统
下面介绍一下HDFS的原理以及数据的读写和备份
在了解数据的读写之前首先要知道NameNode和DataNode分别负责什么:
Namenode 掌控全局 管理DataNode的信息 管理元数据 接收读写请求 与DataNode之间进行相应的通信
Datenode 存储数据 汇报自己的情况 接受client发出的安排
1、HDFS的组成:
NameNode:Master节点(也称元数据节点),是系统唯一的管理者。负责元数据的管理(名称空间和数据块映射信息);配置副本策略;处理客户端请求
DataNode:数据存储节点(也称Slave节点),存储实际的数据;执行数据块的读写;汇报存储信息给NameNode
Sencondary NameNode:分担namenode的工作量;是NameNode的冷备份;合并fsimage和fsedits然后再发给namenode。注意:在hadoop 2.x 版本,当启用 hdfs ha 时,将没有这一角色
client:系统使用者,调用HDFS API操作文件;与NameNode交互获取文件元数据;与DataNode交互进行数据读写。注意:写数据时文件切分由Client完成
热备份:b是a的热备份,如果a坏掉。那么b立即运行代替a的
冷备份:b是a的冷备份,如果a坏掉。那么b不能立即代替a工作。但是b上存储a的一些信息,减少a坏掉之后的损失
2、HDFS构架原则:
元数据与数据分离:文件本身的属性(即元数据)与文件所持有的数据分离
主/从架构:一个HDFS集群是由一个NameNode和一定数目的DataNode组成
一次写入多次读取:HDFS中的文件在任何时间只能有一个Writer。当文件被创建,接着写入数据,最后,一旦文件被关闭,就不能再修改
移动计算比移动数据更划算:数据运算,越靠近数据,执行运算的性能就越好,由于hdfs数据分布在不同机器上,要让网络的消耗最低,并提高系统的吞吐量,最佳方式是将运算的执行移到离它要处理的数据更近的地方,而不是移动数据
3、数据的写:
接收文件
client会将文件进行切块 文件的大小/128M=block块数
向NameNode汇报块数 文件大小 文件权限 文件属主 文件上传时间
client切下一块128M的block块(默认128M,可以修改)
client会向NameNode去申请DataNode的信息
Natenode会返回一批负载不高的DateNode给client
client会向DataNode里面发送block并且做好备份
DateNode存放block块之后会像NameNode汇报情况
4、数据的读:
Namenode会像client发送一个请求,client接受请求之后,会像Namenode申请节点信息(blockid)
Namenode会像client发送一些节点信息
client获取到节点信息之后去Datanode上拿去数据–就近原则(不会汇报给Namenode)
5、关于数据备份的注意事项:
在存储时文件会切割成块(block):偏移量offset(byte)
Block分散存储在集群节点中
单一文件Bloca切割大小必须一致,文件和文件可以不一致
Bloca可以设置副本数,副本分三种不同节点中
副本数不要超过节点数量
文件上传可以设置Block副本数可以调整,大小不变
只支持一次写入多次读取,同一时刻只有一个写入者
6、关于数据备份的机制:
-
集群内提交 在提交的节点上防止block 由Namenode直接提交给Datanode
集群外提交 选择一个负载不高的节点进行存放 由Namenode让client去提交给Datanode 就近原则 -
放置在与第一个备份不同机架的任意节点上
-
放置在第二个机架的不同节点上
-
client使用pipelien管道进行备份
NameNode返回给client一些DataNode的信息后
client会和这些DataNode形成一个管道,并且将block切割成一个个ackPackage(64K)
DataNode会从管道中拿取相应的数据进行存储
当存储完成之后,DataNode会向NameNode进行汇报
大数据使用到的一些基础应用程序
- kafka
- zookeeper
- flume
- hive
- fink
- storm
- hbase