参考:
课程教学(林子雨老师)
程序羊大数据学习路线
HDFS入门
Hbase入门
NoSql入门
文章目录
- 一、大数据概述
-
-
- 1.1大数据时代
- 1.2大数据的概念和影响
- 1.3大数据的应用
- 1.4大数据的关键技术
- 1.5大数据,物联网和云计算
-
- 检测题
- 二、大数据处理架构Hadoop
-
- 2.1hello,Hadoop
-
- 2.1.1Hadoop简介
- 2.1.2Apache Hadoop版本演变
- 2.2Hadoop项目结构
- 2.3Linux和Hadoop的安装
-
- 2.3.1安装Linux虚拟机
- 2.3.2安装Hadoop
- 2.4Hadoop集群的部署和使用
- 三、分布式文件系统HDFS
-
- 3.1 [分布式文件系统HDFS简介](https://www.cnblogs.com/gzshan/p/10981007.html)
- 3.2HDFS相关概念
-
- 块
- HDFS集群的节点分为两类:namenode和datanode
- 3.3 HDFS体系结构
- 3.4 HDFS存储原理
- 3.5HDFS数据读写过程
-
- 3.5.1 HDFS读数据过程
- 3.5.2 HDFS写数据过程
- 3.6[HDFS编程实践](https://blog.csdn.net/Moliay/article/details/129450964)
-
- 3.6.1HDFS常用命令
- 3.6.2安装Eclipse
- 3.6.3 HDFS常用Java API及应用实例
- 四、 分布式数据库HBase
-
- 4.1 HBase简介
- 4.2 HBase数据模型
- 4.3 HBase的实现原理
- 4.4 HBase运行机制
- 4.5 HBase应用方案
- 4.6 [HBase的安装和编程实践](https://blog.csdn.net/Moliay/article/details/129617128)
- 五、NoSQL数据库
-
- 5.1 NoSQL数据库
- 5.2 NoSQL与关系数据库的比较
- 5.3 四大类型NoSQL数据库
-
- 5.3.1键值数据库和列族数据库
- 5.3.1键值数据库和列族数据库
- 5.4 NoSQL数据库的理论基石
- 5.5 从NoSQL到NewSQL数据库
- 5.6 文档数据库MongoDB
一、大数据概述
1.1大数据时代
三次信息化浪潮
1.2大数据的概念和影响
1.3大数据的应用
(谷歌预测流感,大数据)
1.4大数据的关键技术
1.5大数据,物联网和云计算
1.5.1 云计算
- 解决了两个核心问题,即海量数据的分布式存储和分布式处理问题
- 典型特征是虚拟化和多租户
(老朋友 自来水)
(公有云:例如百度)
1.5.2物联网
- 物联网的关键技术:识别&感知
- 大数据(此时指数据处理技术,非数据本身):如何存储&如何处理
(三者不断融合发展,相辅相成)
检测题
- 单位换算
1KB (Kilobyte 千字节)=1024B,
1MB (Megabyte 兆字节 简称“兆”)=1024KB,
1GB (Gigabyte 吉字节 又称“千兆”)=1024MB,
1TB (Trillionbyte 万亿字节 太字节)=1024GB,其中1024=2^10 ( 2 的10次方),
1PB(Petabyte 千万亿字节 拍字节)=1024TB,
1EB(Exabyte 百亿亿字节 艾字节)=1024PB,
1ZB (Zettabyte 十万亿亿字节 泽字节)= 1024 EB,
1YB (Yottabyte 一亿亿亿字节 尧字节)= 1024 ZB,
1BB (Brontobyte 一千亿亿亿字节)= 1024 YB.
(k m g t p e z y b 提屁姨,贼一笔)
二、大数据处理架构Hadoop
2.1hello,Hadoop
2.1.1Hadoop简介
- Hadoop发展历程
Apache软件基金会旗下的开源分布式平台,基于Java语言开发,具有很好的跨平台性
核心是分布式文件系统HDFS和MapReduce(分别实现了海量数据的分布式存储&处理)
Hadoop源自始于Apache Nutch项目。
- Hadoop的特性
高可靠性、高效性、高可扩展性、高容错性、成本低、运行在Linux平台、支持多种编程语言。
2.1.2Apache Hadoop版本演变
Hadoop2.0增加了HDFS HA和YARN两个系统。
2.2Hadoop项目结构
-
HDFS:负责分布式文件存储
-
YARN框架:对计算机资源(例如带宽、内存啥的)进行管理和调度
-
MapReduce:离线 批处理计算
-
Tez:把作业 分析优化后 构建有向无环图,得出哪些工作先做哪些工作可以后做 以获得最好的工作效率
-
Spark:类似于Hadoop MapReduce的通用并行框架
区别 Spark基于内存,因而效率比后者高一个数量级
MapReduce基于磁盘
-
Hive:Hadoop上的数据仓库
支持SQL语句,可以把SQL语句转化为一堆mapreduce作业
-
Pig:实现流数据处理
提供轻量级的数据分析
(虽说MapReduce已经屏蔽了很多底层的复杂性,但还是很复杂
所以有了Pig这一轻量级的脚本语言)
-
Oozie:作业流调度系统
-
ZooKeeper:提供分布式协调一致性(例如分布式锁,集群管理啥的)
-
HBase列族数据库:支持随机读写,进而支持实时应用(快男)
-
Flume:日志收集分析框架(例如淘宝借助其进行流数据的收集)
-
Sqoop:数据导入导出
-
Ambari:安装部署工具
2.3Linux和Hadoop的安装
2.3.1安装Linux虚拟机
2.3.2安装Hadoop
2.4Hadoop集群的部署和使用
主要是考虑两大核心组件的底层硬件的需求是啥
(其余感觉比较散,之后看情况补充)
三、分布式文件系统HDFS
3.1 分布式文件系统HDFS简介
HDFS:小弟不才,解决了两大核心问题之一
- 分布式文件系统
数据量上去了,进而有了分布式
集群是个物理形态,分布式是个工作方式。
只要是一堆机器,就可以叫集群,他们是不是一起协作着干活,这个谁也不知道;一个程序或系统,只要运行在不同的机器上,就可以叫分布式,C/S架构也可以叫分布式。集群一般是物理集中、统一管理的,而分布式系统则不强调这一点。所以,集群可能运行着一个或多个分布式系统,也可能根本没有运行分布式系统;分布式系统可能运行在一个集群上,也可能运行在不属于一个集群的多台(2台也算多台)机器上。
作者:Wang Xu
链接:https://www.zhihu.com/question/20004877/answer/13632513
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
- HDFS实现目标:
- 兼容廉价的硬件设备
以企业可以承担的成本,可以使用普通的PC机构成集群。设计之初,就要考虑到能够兼容廉价的硬件设备。
- 实现流数据读写
区别于传统文件系统(以块数据为单位)之处。满足批量处理数据或海量数据处理的需求。
- 支持大数据集
- 支持简单的文件模型
为支持高效的数据读写,对文件进行了简化。牺牲了相关性能,但获得了批处理特性。只允许追加,不允许修改。
- 强大的跨平台兼容性
基于Java实现
- HDFS自身的局限性
- 不适合低延迟数据访问
是为了面向大规模的流式读写,一次读大批量或者全部数据。所以当想要读某条数据时,需要读大量数据,再筛选出来,故实时性不高(HBase具备随机读写特性,实时性处理需求)。
- 无法高效储存大量 小文件
小文件多,索引结构庞大,进而索引效率低
- 不支持多用户写入及修改文件
只允许追加,不允许修改
3.2HDFS相关概念
块
默认一个块(block)的大小为128MB(HDFS的块这么大主要是为了最小化寻址开销),要在HDFS中存储的文件可以划分为多个分块,每个分块可以成为一个独立的存储单元。
与本地磁盘不同的是,HDFS中小于一个块大小的文件并不会占据整个HDFS数据块。
块并非一味的大就是好
- 优点:
-
支持大规模文件存储
可以把大文件进行切割,各个小块可以分布式的存储在不同机器上,则可以突破单机存储容量上限。
-
简化系统设计
使用抽象的块,而不是整个文件作为存储单元,可以简化存储管理,使得文件的元数据可以单独管理。
-
适合数据备份
冗余备份。数据块非常适合用于数据备份,进而可以提供数据容错能力和提高可用性。每个块可以有多个备份(默认为三个),分别保存到相互独立的机器上去,这样就可以保证单点故障不会导致数据丢失。
HDFS集群的节点分为两类:namenode和datanode
以管理节点-工作节点的模式运行,即一个namenode和多个datanode.
- namenode管理节点:整个HDFS集群的管家
(管理文件系统命名空间,管理文件系统树以及树中的所有目录和文件)
FsImage不维护文件在具体的哪个节点(是通过数据节点和名称节点运行过程中不断地沟通,来实时维护)
保存元信息的种类有:
* 文件名目录名及其之间的层级关系
* 文件目录的所有者及其权限
* 每个文件块的名及文件由哪些块组成
第二名称节点Secondary Namenode:名称节点的冷备份,实现对EditLog的处理
- datanode工作节点:存储实际数据(保存到本地的Linux文件系统中)
3.3 HDFS体系结构
中从架构。
- 机架之间通过光纤高速连接
- 缺点(第四点因为Secondary Namenode是冷备份)
(冷:不能保证一发生故障就能立刻顶上来)
3.4 HDFS存储原理
底层架构在廉价的集群之上,而廉价的机器们最致命的缺点就是会不断出故障。所以HDFS中的数据都被冗余保存,一般默认为三份(当然也可以自定义其他数值)
- 数据冗余保存的优点
- 加快数据传输速度
并行传输
- 检查数据错误
互为参照
- 保证数据可靠性
存放策略:
第一个副本:存放在上传这个文件的节点上(无需再通过网络传到其他机器上),若提交请求不是来自集群内部而是外部的某个数据节点时,存放在一个磁盘不太满,CPU不太忙的节点
第二个副本:存放在另一个机架上(不同于第一个的机架)
第三个副本:存放在第一个机架的不同节点上
(若还有其他副本,可通过随机算法)
数据读取
- 机架内部通信代价很小且较快
3.5HDFS数据读写过程
3.5.1 HDFS读数据过程
- client访问NameNode,查询元数据信息,获得这个文件的数据块位置列表,返回输入流对象。
- 就近挑选一台datanode服务器,请求建立输入流 。
- DataNode向输入流中中写数据,以packet为单位来校验。
- 关闭输入流
其中,方框内对用户屏蔽,系统自动封装完成。
hadoop中设置了通用文件系统 抽象基类FileSystem
- 通常用的方法有
- open返回的是输入流
3.5.2 HDFS写数据过程
- 客户端向NameNode发出写文件请求。
- 检查是否已存在文件、检查权限。若通过检查,直接先将操作写入EditLog,并返回输出流对象。
(注:WAL,write ahead log,先写Log,再写内存,因为EditLog记录的是最新的HDFS客户端执行所有的写操作。如果后续真实写操作失败了,由于在真实写操作之前,操作就被写入EditLog中了,故EditLog中仍会有记录,我们不用担心后续client读不到相应的数据块,因为在第5步中DataNode收到块后会有一返回确认信息,若没写成功,发送端没收到确认信息,会一直重试,直到成功)
- client端按128MB的块切分文件。
- client将NameNode返回的分配的可写的DataNode列表和Data数据一同发送给最近的第一个DataNode节点,此后client端和NameNode分配的多个DataNode构成pipeline管道,client端向输出流对象中写数据。client每向第一个DataNode写入一个packet,这个packet便会直接在pipeline里传给第二个、第三个…DataNode。
(注:并不是写好一个块或一整个文件后才向后分发)
- 每个DataNode写完一个块后,会返回确认信息。
(注:并不是每写完一个packet后就返回确认信息,个人觉得因为packet中的每个chunk都携带校验信息,没必要每写一个就汇报一下,这样效率太慢。正确的做法是写完一个block块后,对校验信息进行汇总分析,就能得出是否有块写错的情况发生)
- 写完数据,关闭输输出流。
- 发送完成信号给NameNode。
(注:发送完成信号的时机取决于集群是强一致性还是最终一致性,强一致性则需要所有DataNode写完后才向NameNode汇报。最终一致性则其中任意一个DataNode写完后就能单独向NameNode汇报,HDFS一般情况下都是强调强一致性)
3.6HDFS编程实践
(点开本节标题链接,详细展开)
3.6.1HDFS常用命令
启动Hadoop(启动失败的解决之一)
cd /usr/local/hadoop
./sbin/start-dfs.sh
jps
3.6.2安装Eclipse
3.6.3 HDFS常用Java API及应用实例
四、 分布式数据库HBase
4.1 HBase简介
HBase是BigTable的开源实现。
BigTable
- 引入目的:解决谷歌公司内部大规模网页搜索问题
- 网页搜索的两种方式
- 实现
不是直接在底层磁盘上存储,而是架构在谷歌分布式文件系统GFS之上。
- 优点
HBase是高可靠,高性能,面向列,可伸缩的分布式数据库。最主要的特点是用来存储半结构化和非结构化的松散数据
-
产生原因:为了满足不断增长的数据存储需求
-
HBase vs BigTable
-
HBase vs 关系数据库
- 访问接口
- what
Hbase是一种分布式存储的数据库。
- Hbase是一种NoSQL数据库,即它和传统的RDBMS数据库那种支持SQL作为查询语言 不同
- 技术上讲,它更像是分布式存储而非分布式数据库,缺少很多RDBMS系统的特点。如列类型,辅助索引,触发器和高级查询语言等待。
- 特点
- 强读写一致
但不是“最终一致性”的数据存储,使得它很适合高速的计算聚合
- 自动分片
通过Region分散在集群中,当行数增长的时候,Region也会自动的切分和再分配
- 自动的故障转移
- Hadoop/HDFS集成,和HDFS开箱即用,不用太麻烦的衔接
- 丰富的“简洁、高效”API
Thrift/REST API,Java API
- 块缓存,布隆过滤器,可以高效的列查询优化
- 操作管理
Hbase提供了内置的web界面来操作,还可以监控JMX指标
- when
- 数据库量要足够多
数据量小的话,真正能工作的机器量少,剩余的机器都处于空闲的状态。
因此,当有十亿及百亿行数据,适合Hbase;
当只有几百万行甚至更少的数据量,适合RDBMS
- 不需要辅助索引,静态类型的列,事务等特性。
一个已经用RDBMS的系统想要切换到Hbase,则需要重新设计系统
- 保证硬件资源足够
每个HDFS集群在少于5个节点的时候,都不能表现得很好。因为HDFS默认的复制数量是3,再加上一个Name Node(上一章的老朋友)
Hbase在单机环境也能运行,但在开发环境的时候使用就好。
4.2 HBase数据模型
HBase是一个稀疏的多维度(四个维度(行键,列族,列限定符,时间戳))的排序的映射表。
其中:
- 列限定符也可以称为列
- 一个行可以有一个行键和任意多列
- 每一个值都是未经解释的字符串也就是Bytes数组
- 列族可以支持动态扩展,且保留旧的版本(追加时间戳)。
面向行的存储
- 缺:分析某个特征时都是针对一个列去分析,每次取出一整行代价大
4.3 HBase的实现原理
三级寻址可采用缓存,加快寻址速度。但是随着数据更新,缓存可能失效。
4.4 HBase运行机制
4.5 HBase应用方案
- HBase之上如何构建SQL引擎和HBase二级索引
4.6 HBase的安装和编程实践
五、NoSQL数据库
5.1 NoSQL数据库
5.2 NoSQL与关系数据库的比较
-
不同角度的比较
-
数据库原理
- 关系数据库:具有完备的关系代数理论作为基础√
- NoSQL数据库:NoSQL数据库缺乏理论基础
-
数据规模
- 关系数据库:很难实现横向扩展,纵向扩展非常有限
- NoSQL数据库:具有非常好的水平可扩展性√
-
数据库模式
- 关系数据库:要定义严格的数据库模式,且要严格遵守事先定义的数据库模式
- NoSQL数据库:数据模型非常灵活√
-
查询效率
- 关系数据库:适当数量级查询效率高,数量级增大查询效率下降√
- NoSQL数据库:未构建面向复杂查询的索引查询性能差
-
事务一致性
- 关系数据库:遵循ACID事务模型可以保证事务强一致性√
- NoSQL数据库:只能保证事务的最终执行,而不能保证事务强一致性
-
数据完整性
- 关系数据库:具有保证完整性的完备机制
- NoSQL数据库:不能实现完整性约束
-
可扩展性
- 关系数据库:扩展性一般较差
- NoSQL数据库:水平扩展性非常好
-
可用性
- 关系数据库:随着规模增大,为了保证严格的一致性,可用性方面就被削弱了
- NoSQL数据库:具有非常好的可用性,能够在短时间内迅速返回所需的结果
-
标准化
- 关系数据库:遵循SQL标准,标准化较为完善
- NoSQL数据库:未形成通用的行业标准
-
技术支持
- 关系数据库:很多都是商业数据库,可获得强大的技术和后续服务支持
- NoSQL数据库:很多都是属于开源产品,处于整个发展的初期阶段
-
可维护
- 关系数据库:需要管理员维护
- NoSQL数据库:没有成熟的基础和实践操作规范,维护较为复杂
-
应用不是非此即彼,通常采用混合型架构
-
NoSQL数据库
-
关系数据库
- 优点
- 具有非常完备的关系代数理论作为基础
- 有严格的标准
- 支持事务一致性
- 可以借助索引机制实现高效的查询
- 缺
5.3 四大类型NoSQL数据库
5.3.1键值数据库和列族数据库
5.3.1键值数据库和列族数据库
5.4 NoSQL数据库的理论基石
5.5 从NoSQL到NewSQL数据库
5.6 文档数据库MongoDB
本周课程没完成,继续见