一、大数据概论
- 大数据概论
- 大数据(big data):指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。主要解决,海量数据的存储和海量数据的分析计算问题。
- 自我认为:大数据就是在短时间内快速产生大量**多种多样的有价值**的信息。
- 大数据的特点
- 大量
- 高速
- 多样
- 低价值密度
- 大数据能干啥
- O2O
- 零售
- 旅游
- 商品广告推荐
- 保险
- 金融、房产
- 人工智能……
二、Hadoop框架或Hadoop生态圈
1. Hadoop是什么?
1)Hadoop是一个由Apache基金会所开发的分布式系统基础架构
2)主要解决,海量数据的存储和海量数据的分析计算问题。
3)HADOOP通常是指一个更广泛的概念——HADOOP生态圈
2. Hadoop发展史
Hadoop官网:http://hadoop.apache.org/
1)Lucene–Doug Cutting开创的开源软件,用java书写代码,实现与Google类似的全文搜索功能,它提供了全文检索引擎的架构,包括完整的查询引擎和索引引擎
2)2001年年底成为apache基金会的一个子项目
3)对于大数量的场景,Lucene面对与Google同样的困难
4)学习和模仿Google解决这些问题的办法 :微型版Nutch
5)可以说Google是hadoop的思想之源(Google在大数据方面的三篇论文)
GFS —>HDFS 分布式文件系统(分布式的存储)
MapReduce —>MR 分布式的处理
BigData —>Hbase
6)2003-2004年,Google公开了部分GFS和Mapreduce思想的细节,以此为基础Doug Cutting等人用了2年业余时间实现了DFS和Mapreduce机制,使Nutch性能飙升
7)2005 年Hadoop 作为 Lucene的子项目 Nutch的一部分正式引入Apache基金会。2006 年 3 月份,Map-Reduce和Nutch Distributed File System (NDFS) 分别被纳入称为 Hadoop 的项目中
8)名字来源于Doug Cutting儿子的玩具大象
9)Hadoop就此诞生并迅速发展,标志这云计算时代来临
3. Hadoop的优势
1)高可靠性:因为Hadoop假设计算元素和存储会出现故障,因为它维护多个工作数据副本,在出现故障时可以对失败的节点重新分布处理。
2)高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点。
3)高效性:在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度。
4)高容错性:自动保存多份副本数据,并且能够自动将失败的任务重新分配。
4、Hadoop的组成
1)HDFS:分布式文件系统
它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。
HDFS的设计适合一次写入,多次读出的场景,且不支持文件的修改。适合用来做数据分析,并不适合用来做网盘应用。
2)MapReduce:基于Yarn的系统,并用于处理大型数据集。用于批处理(类似商场里的直梯)
Mapreduce是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析应用”的核心框架。
Mapreduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个hadoop集群上。
3)Yarn:作业调度和集群资源管理的框架。
4)HadoopCommon:支持其他Hadoop模块额常用实用程序。
其他还有
Spark:
Spark core
SparkSql---------可以使用sql处理
SparkStreaming------流式处理(类似手扶梯)
Mllib-------机器学习库 包含一些算法 可以直接拿来用
Graphx-------spark停止维护
对以上组成的支撑有:
1、Kafka
2、Zookeeper--------协调服务
3、Flume 类似kafka 比kafka的有点 kafka类似水管里的冰块,flume类似水管中的水流
4、Hive----------------大型数据库—利用sql语句
5、Flink
6、Storm
7、Hbase
……
Apache的其他Hadoop相关项目包括:
4.1 HDFS架构概述
这种架构主要由四个部分组成,分别为HDFS Client、NameNode、DataNode和Secondary NameNode。下面我会分别介绍这四个组成部分。HDFS是一个主从架构。
1)NameNode(nn):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限),以及每个文件的块列表和块所在的DataNode等。
NameNode:就是Master,它是一个主管、管理者。个人理解为一个公司的老板。
主要功能:
- 1、掌控全局 管理DN(datanode)的信息 管理元数据
- 个人理解
- 源数据 就是数据。
- 元数据 就是描述数据的数据。
- 2、与DN之间进行相应的通信
- 3、接受Client(个人理解为NameNode的秘书)的请求 读写
2)DataNode(dn):就是Slave。NameNode下达命令,DataNode执行实际的操作。在本地文件系统存储文件块数据,以及块数据的校验和。个人理解为公司的员工。
个人理解
- 1、干活的-------存储数据。存储实际的数据块。
- 2、汇报自己的情况
- 3、接受Client(秘书)的一个安排。执行数据块的读/写操作。、
- 3)Secondary NameNode(2nn):用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照
- 4)Client:就是客户端。个人理解为公司的秘书。
- (1)文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的Block,然后进行存储;
- (2)与NameNode交互,获取文件的位置信息;
- (3)与DataNode交互,读取或者写入数据;
- (4)Client提供一些命令来管理HDFS,比如启动或者关闭HDFS;
- (5)Client可以通过一些命令来访问HDFS;
- 可以从读写操作请求来理解,存文件和读文件:构成hdfs的读写机制。
- 写操作:
- 1、首先要有一个大文件
- 2、然后Client会将大文件进行切块,以block块的形式将大文件进行相应的存储
- HDFS中的文件在物理上是分块存储(block),块的大小可以通过配置参数( dfs.blocksize)来规定,默认大小在hadoop2.x版本中是128M,老版本中是64M。
- 1.X 64M
- 2.X 128M
- 切块的公式:(大文件的大小)/(block的大小(128M))=block块数
- 这里默认的块大小为128MB,可以根据自己的业务需求调整block的大小
- 文件线性切割成块(Block):
- 偏移量 offset(byte)
- Block分散存储在集群节点上
- 单一文件block大小一致,文件与文件可以不一致
- 3、向NN(NameNode)汇报 ,汇报的内容有如下:
- 1)块数
- 2)整个大文件的大小
- 3)文件的权限
- 4)文件的属主
- 5)文件的上传时间
- 以下操作会循环操作
- For(Block block:blocks){
- 4、client切下一块128M
- 5、Client会向NN去申请资源-----------资源为 DN的信息
- 6、NN会返回一批负载不高的DN给client
- 7、Client会向DN里面发送block并且做好备份
- 8、DN存放block块之后会向NN汇报情况
- }
- 读请求:
- 1、NN会向client发送一个请求,client接收到请求之后,会向NN去申请节点信息(block id)
- 2、NN会向client发送一些节点信息
- 3、Client获取到节点信息之后去DN上拿取数据--------拿数据的原则为 就近原则
- Pipeline管道
- 1、NN再返回给client一些DN的信息之后
- 2、Client会和这些DN形成一个管道,并且将block切割成一个个ackPackage(64k)
- 3、Dn会从管道中拿取相应的数据进行存储
- 4、当存储完成之后,DN会向NN进行汇报
- 备份机制:
- 备份:为了解决安全问题
- 1、
- 集群内提交在提交的节点上放置block
- 集群外提交选择一个负载不高的节点进行存放
- 2、放置在与第一个备份不同机架的任意节点
- 3、放置在第二个机架不同节点上
推荐学习文章:Hadoop教程