在信息时代,数据的增长速度不断增加,曾经只能飞信、QQ的我们,随着4G、5G的到来,可以用智能手机刷视屏、听歌、玩手游、购物等等的事情都可以在通过网络实现。而这一个个的实现有大量的数据产生,原来的邮件、信息最多也就几百KB;而现在的一个音乐视屏少说也要好几MB。这10多倍的数据增长,为数据的存储和使用带来的难题,大数据就是因此出现在人们的视线。
一、大数据
个人对大数据的理解是:短时间内快速产生的量多种多样有价值的信息。
特性:
大数据的5V特性 Vokume(大量)、Velocity(高速)、Variety(多样)、Value(低价值价值密度)、Veracity(准确)
解决数据量过大的问题 :
两种解决办法:
垂直扩展:改变电脑内存的硬盘量,由于电脑银盘装载有极限,所以配 合横向扩展使用。
横向扩展:简单廉价的服务器或者PC端就可以。(优选)
二、hadoop:
hadoop是当前大数据开发的一个生态圈,起初它能对大数据的计算进行离线的批量处理,现下还能够支持在线的基于内存和实时的流进行分析处理。
hadoop官网: hadoop的浏览官网老版的地址
http://hadoop.apache.org/old/,及当下的hadoop官网址
http://hadoop.apache.org/进入可查看介绍应用。
1.主要构成来源:
根据谷歌三大论文衍生出:
GFS 衍生出 HDFS分布式文件系统,主要进行分布式的存储
MapReduce 主要进行分布式的处理
BigData 衍生出 HBase
常用机制:
1) HDFS 分布式文件存储系统
主节点(Namenode)、从节点(Datenode)、client
HDFS的读写机制
存文件:分布式将文件存储在多台服务器上,为了确保数据安全会有备份文件;
读文件: 查找数据所在服务器,在找到相应服务器进行抓取;
注:为了解决安全问题数据会备份三分;
2)yarn----资源和任务调度
3)为了让MapReduce(批处理)处理更快,产生了spark
spark有多种
1)Spark Core
2 ) SparkSql--可以使用sql处理
3 )SparkStreaming --流失处理
4)Mllib --机器学习库
5 )graphx --Spark已经停止维护
用到的软件:
kafka 分布式的消息通讯工具
zookeeper --协调服务
flume 可靠的日志采集工具
hive --使用sql语句惊醒查询 --大型数据库
flink 由Java和Scala编写的分布式流数据流引擎;开源流处理框架
storm 免费的开源分布式实时计算系统
hbase 分布式的、面向列的开源数据库,是非关系型的数据库
2、HDFS主从架构:
1) 构成:
主节点(Namenode)、从节点(Datanode)、委托(client)
2)hdfs的读写机制:
存文件:以block块的形式进行存储,当处理复杂的、大量批量的数据时,会用到委托client;存储时会进行一个汇报。
读文件:当处理数据小时Namenode会直接从Datenode中获取 要读取的数据;当数据流很大时,Namenode会先将操作委托给client 去执行,再有client从Datenode中抓取数据。
备份*1:为了解决安全问题。首先,第一份数据存储会存储在主节点上,主节点的服务器仍能同时设置一个从节点;第二份数据会存 在,另一台机架(非主节点的机架)的从节点上;第三份数据会存在,第二份数据存储的同一机架的不同从节点位置上。
3、理解存储机制
1)hadoop是以block块的形式将大文件进行相应的存储 1.x版本的时候默认块的大小为64M,而2.x版本之后默认的块的大小均为128M
2 ) 文件线性切割块(Block):从第一个块开始切割成若干个大小相同的块,块的大小由切割第一个块时设定的块的大小决定;偏移量offset(byte):存储位置信息,如第几个块。
3)单一文件Block大小一致、文件与文件可以不一致(同一个文件的切割块大小是一致的,不同文件的切割可以另行设定)
4 )Block可以设置副本个数,副本分散值不同节点中(在安全机制中,会将存储的块进行备份默认是三分存储,默认存储位置见*1)
5 )副本数不要超过节点数量(显然一个副本要对应存储在一个服务器上,若节点数小于备份副本数时,就会出现)
6 )文件上传可以设置Block大小和副本数
7 )已上传可以设置Block大小和副本数
8 )已经上传的文件Block副本数可以调整,大小不变
9 )只支持一次写入多次读取 同时只有一个写入者
4、 hadoop中的个成员作用
1)Namenode 主节点
a、起掌控、控制的作用;管理DataName的信息;管理数据元数据(补充:元数据 是 描述数据的数据; 源数据 是 指普通的数据)。
b、接受client(委托)的请求、读写
c、与DataName之间进行相应的同信
2) DataNode 从节点
a、进行具体的数据块的存储
b、汇报自己的概况
c、接受client(委托)的一个安排
5、写的操作经过的具体流程
a、大文件→→→b、client(委托)会将大文件进行切块(文件块的大小默认为128M也可自行设置)→→→c、向主节点汇报(汇报的数据有:1、块数;2、文件的大小;3、文件的权限;4、文件的主属;5、文件的上传时间)→→→
d、client切下一块例128M→→→e、client会向Namenode去申请资源---Datanode的信息→→→f、Namenode会返回一批负载不高的Datanode给client→→→g、client会向Datanode里面发送block并且做好备份→→→h、Datanode存放block块之后会向Namenode汇报情况
注:其中d→f是切块存储的循环过程,可放在for(Block block:blocks){}中直到切完为止。
6、读取请求:
1、Namenode会向client发送一个请求,client接受到请求之后,会向Namenode去申请节点信息(blockid)
2、Namenode会向clientf发送一些节点信息
3、client获取到节点信息之后去Datanode上拿去数据 ------(就近原则:会去 最近的存储副本块的节点获取)
7、备份机制
a、 1)集群内提交:在提交节点上放置block
2 ) 集群内提交: 选择一个复制不高的节点进行存放
b、 放置在与第一个备份不同机制的任意节点上
c、 放置在第二个机架的不同节点上
8、pipeline管道
1)、Namenode在返回给client一些Datanode的信息 之后
2)、client会和这些Datanode形成一个管道,并且将block切割成一个个ackPackage(64k)
3 )、 Datanode会从管道中拿取相应的数据进行存储
4)、当存储完成之后,Datanode会向Namenode进行汇报