大数据
定义:在短时间内快速产生大量多种多样的有价值的信息
由于大数据的数据量非常大所以在数据信息存储的时候会有两种方式去解决这种问题,一是垂直扩展,一是横向扩展,横向扩展可以用简单廉价的服务器或者PC端就可以
大数据的产生是根据谷歌的三大论文产生的
MapReduce
http://blog.csdn.net/active1001/archive/2007/07/02/1675920.aspx
GFS
http://blog.csdn.net/xuleicsu/archive/2005/11/10/526386.aspx
BigTale
http://blog.csdn.net/accesine960/archive/2006/02/09/595628.aspx
GFS为HDFS分布式文件系统(分布式存储)
MapReduce为分布式的处理
BigData-------HBase
http://hadoop.apache.org/ -----hadoop官网
hdfs
yarn— 资源和任务调度
mapreduce—批处理
spark :
- spark core
- sparkSQL----可以使用sql处理
- sparkStreaming—流式处理
- milib —机器学习裤
- graphx ---- spark已经停止维护
Hdfs
HDFS 源于 Google 在2003年10月份发表的GFS(Google File System) 论文。 它其实就是 GFS 的一个克隆版本
优点
1、高容错性
数据自动保存多个副本。它通过增加副本的形式,提高容错性。
某一个副本丢失以后,它可以自动恢复,这是由 HDFS 内部机制实现的,我们不必关心。
2、适合批处理
它是通过移动计算而不是移动数据。
它会把数据位置暴露给计算框架。
3、适合大数据处理
处理数据达到 GB、TB、甚至PB级别的数据。
能够处理百万规模以上的文件数量,数量相当之大。
能够处理10K节点的规模。
4、流式文件访问
一次写入,多次读取。文件一旦写入不能修改,只能追加。
它能保证数据的一致性。
5、可构建在廉价机器上
它通过多副本机制,提高可靠性。
它提供了容错和恢复机制。比如某一个副本丢失,可以通过其它副本来恢复。
HDFS的存储方式
以block块的形式将大文件进行相应的存储
HDFS 采用Master/Slave的架构来存储数据,这种架构主要由四个部分组成,分别为HDFS Client、NameNode、DataNode和Secondary NameNode。下面我们分别介绍这四个组成部分
- Client
文件切分。文件上传 HDFS 的时候,Client 将文件切分成 一个一个的
Block,然后进行存储。
与 NameNode 交互,获取文件的位置信息。
与 DataNode 交互,读取或者写入数据。
Client 提供一些命令来管理 HDFS,比如启动或者关闭HDFS。
Client 可以通过一些命令来访问 HDFS。
- Namenode
管理DataNode的信息,管理元数据(描述数据的数据)
接受client的读写请求
与DataNode之间进行相应的通信
- Datanode
存储数据
汇报自身情况
接受client发送过来的请求(读、写)
与DataNode之间进行相应的通信
- **Secondary NameNode:**并非 NameNode 的热备。当NameNode
挂掉的时候,它并不能马上替换 NameNode 并提供服务
辅助 NameNode,分担其工作量。
定期合并 fsimage和fsedits,并推送给NameNode。
在紧急情况下,可辅助恢复 NameNode。
1.× 64M
2.× 128M
文件线性切割成块(Block) :偏移量 offset (byte)
block分散存储在集群节点中
单一文件Block大小一致,文件与文件也可以不一致
Block可以设置副本数,副本分散在不同节点中
副本数不能超过节点数量
文件上传可以设置Block大小和副本数
已上传的文件Block副本数可以调整,大小不变
只支持一次写入但可以多次读取,同一时刻只有一个写入者
HDFS主从架构
主节点 —Namenode
从节点 —Datanode
客户端 —客户端
hdfs的读写机制 : 存文件 读文件
备份--------解决安全问题
写操作
- 有一个大文件
- client将大文件进行切块
- 向Namenode汇报 (1).切割完成的总块数
(2).文件的大小
(3).文件的权限
(4).文件的属主
(5). 文件的上传时间 - client切下一块 128M
- client会向Namenode申请资源 --Namenode的信息
- Namenode会返回一批负载不高的Datanode给client
- client会向Datanode里面发送block并且做好备份
- datanode存放block块之后会向Namenode汇报情况
读请求
- namenode会向client发送一个请求,client接受到请求之后,会向Namenode申请节点信息
- nameNode会向client发送一些节点信息
- client获取到节点信息之后去DN上拿取数据 —就近原则
备份机制
- 集群内提交 在提交的节点上放置block
集群外提交 选择一个负载不高的节点进行存放 - 放置在与第一个备份不同的机架的任意节点上
- 放置在第二个机架不同节点上
pipeline管道
- Namenode在返回client一些DataNode的信息之后
- client会和这些DataNode形成一个管道,并且将block切割成一个个ackpackage(64K)
- datanode会从管道中拿取相应的数据进行存储
- 当存储完成之后,datanode会向Namenode进行汇报