文章目录
- 一 基础
- 二 HDFS
- 1.什么是HDFS
- 2.HDFS的原理
- ⑴hdfs数据块
- ⑵hdfs结构
- ①Client 客户端
- ②NameNode 就是 master,它是一个主管、管理者,namenode内存中存储的是=fsimage+edits。其中fsimage是指NameNode启动时对整个文件系统的快照,在NameNode启动后,我们对文件系统的改动都会存到edits里面。只有在NameNode重启时,edits才会合并到fsimage
- ③上面讲过,只有在NameNode重启时,edits才会合并到fsimage。如果我们长时间不重启,那么edits岂不会是变的很大?这时候Secondary NameNode就起作用了。
- ④DataNode 文件系统的工作节点,根据需要存储和检索数据块,定期向namenode发送它们所存储的块的列表,NameNode 下达命令,DataNode 执行实际的操作
- ⑤fsimage 元数据镜像文件(文件系统的目录树。)
- ⑥edits 元数据的操作日志(针对文件系统做的修改操作记录)
- ⑶hdfs写入
- ⑷hdfs读取
- 3.HDFS命令行操作
- 三 MapReduce
一 基础
1.hadoop简介
Hadoop是使用Java编写,允许分布在集群,使用简单的编程模型的计算机大型数据集处理的Apache的开源框架。
2.hadoop架构设计
⑴hadoopcommon hadoop基础设施模块
⑵hdfs 分布式文件系统
⑶mapreduce 实现在很多机器上分布式并行运算
⑷yarn 帮用户调度大量的mapreduce程序,并合理分配运算资源
3.hadoop的优缺点
⑴优点
- 高可靠性 具有按位存储和处理数据能力
- 高扩展性 过可用的计算机集群分配数据,这些集群可以方便地扩展到数以千计的节点中
- 高容错性 能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配
- 高效性 能够在节点之间进行动态地移动数据,并保证各个节点的动态平衡,处理速度非常快,具有高效性。
- 低成本 可以运行在普通商用机上
⑵缺点
- 不能做到低延迟 没有针对低延迟数据访问做一些优化,如果要求低延迟, 可以看看Hbase。
- 不适合大量的小文件存储 由于NameNode把文件的MetaData存储在内存中,所以大量的小文件会产生大量的MetaData。这样的话百万级别的文件数目还是可行的,再多的话就有问题了。
- 不适合多用户写入文件,修改文件 Hadoop现在还不支持多人写入,任意修改的功能。也就是说每次写入都会添加在文件末尾。
4.hadoop名词以及他们之间的关系
这里先简单说说,具体以后仔细说
⑴hbase hive hdfs hue
HDFS是一种文件格式,像FAT32,NTFS之类的,是底层的;
HBase是数据库,可以建在HDFS上,也可以不在这上面,不过按照设计,是推荐运行在HDFS上的;
Hive 基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的 sql 查询功能
Hue 通过使用Hue我们可以在浏览器端的Web控制台上与Hadoop集群进行交互来分析处理数据,例如操作HDFS上的数据,运行MapReduce Job,执行Hive的SQL语句,浏览HBase数据库等等。
⑵spark mapreduce
Mapreduce和spark是数据处理层两大核心,Spark出现慢慢替代Mapreduce.
⑶yarn
是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。
二 HDFS
1.什么是HDFS
HDFS是什么:HDFS即Hadoop分布式文件系统(Hadoop Distributed Filesystem),以流式数据访问模式来存储超大文件,运行于商用硬件集群上,是管理网络中跨多台计算机存储的文件系统。
HDFS不适合用在:要求低时间延迟数据访问的应用,存储大量的小文件,多用户写相同文件,任意修改文件。
2.HDFS的原理
⑴hdfs数据块
HDFS上的文件被划分为块大小的多个分块,作为独立的存储单元,称为数据块,起初默认大小是64MB,从2.7.3版本改成了128MB,这个块大小可以在hdfs-site.xml修改它的大小。对任何数据块都是3份,2份在同一机架,1份在另一个机架,一个机架可有多个datanode.
①使用数据块的好处:
- 一个文件的大小可以大于网络中任意一个磁盘的容量
- 使用抽象块概念而非整个文件作为存储单元,大大简化存储子系统的设计
- 提高可用性,可以确保在块、磁盘或机器发生故障后数据不会丢失。如果发现一个块不可用,系统会从其他地方读取另一个副本。
②数据块为什么不能太大
- 重启过程中,数据块越大,系统加载时间越长
- 数据量的大小与问题解决的复杂度呈线性关系。对于同一个算法,处理的数据量越大,时间复杂度越高。
- 在Map Reduce框架里,Map之后的数据是要经过排序才执行Reduce操作的。这通常涉及到归并排序,而归并排序的算法思想便是“对小文件进行排序,然后将小文件归并成大文件”,因此“小文件”不宜过大。
- ⑷数据量的大小与问题解决的复杂度呈线性关系。对于同一个算法,处理的数据量越大,时间复杂度越高。
③数据块为什么不能太小
- 减少硬盘寻道时间 如果数据块太多,会增加底层硬盘的寻道时间,这是数据量不能太小的根本原因
- 减少NameNode内存消耗 数据块信息太多,会增加namenode的内存消耗
⑵hdfs结构
①Client 客户端
- 文件切分。文件上传 HDFS 的时候,Client 将文件切分成 一个一个的Block,然后进行存储。
- 与 NameNode 交互,获取文件的位置信息
- 与 DataNode 交互,读取或者写入数据。
- Client 提供一些命令来管理 HDFS,比如启动或者关闭HDFS
- Client 可以通过一些命令来访问 HDFS
②NameNode 就是 master,它是一个主管、管理者,namenode内存中存储的是=fsimage+edits。其中fsimage是指NameNode启动时对整个文件系统的快照,在NameNode启动后,我们对文件系统的改动都会存到edits里面。只有在NameNode重启时,edits才会合并到fsimage
- 管理 HDFS 的名称空间
- 管理数据块(Block)映射信息
- 配置副本策略
- 处理客户端读写请求
③上面讲过,只有在NameNode重启时,edits才会合并到fsimage。如果我们长时间不重启,那么edits岂不会是变的很大?这时候Secondary NameNode就起作用了。
- SecondaryNameNode通知NameNode准备提交edits文件,此时主节点将新的写操作数据记录到一个新的文件edits.new中。
- SecondaryNameNode通过HTTP GET方式获取NameNode的fsimage与edits文件(在SecondaryNameNode的current同级目录下可见到 temp.check-point或者previous-checkpoint目录,这些目录中存储着从namenode拷贝来的镜像文件)
- SecondaryNameNode开始合并获取的上述两个文件,产生一个新的fsimage文件fsimage.ckpt。
- SecondaryNameNode用HTTP POST方式发送fsimage.ckpt至NameNode。
- NameNode将fsimage.ckpt与edits.new文件分别重命名为fsimage与edits,然后更新fstime,整个checkpoint过程到此结束。
从工作过程可以看出,SecondaryNameNode的重要作用是定期通过编辑日志文件合并命名空间镜像,以防止编辑日志文件过大。SecondaryNameNode一般要在另一台机器上运行,因为它需要占用大量的CPU时间与namenode相同容量的内存才可以进行合并操作。它会保存合并后的命名空间镜像的副本,并在namenode发生故障时启用。
④DataNode 文件系统的工作节点,根据需要存储和检索数据块,定期向namenode发送它们所存储的块的列表,NameNode 下达命令,DataNode 执行实际的操作
- 存储实际的数据块
- 执行数据块的读/写操作
⑤fsimage 元数据镜像文件(文件系统的目录树。)
⑥edits 元数据的操作日志(针对文件系统做的修改操作记录)
⑶hdfs写入
- 客户端向NameNode发出写文件请求,namenode检查目标文件是否已存在,父目录是否存在
- namenode返回是否可以上传
- client会先对文件进行切分,比如一个blok块128m,文件有300m就会被切分成3个块,一个128M、一个128M、一个44M
- 每一个块先写一个到DataNode上面,然后由它创建一个线程复制到其他的datanode,这样做的好处是速度会提高很多
- 更新元数据
⑷hdfs读取
- 跟namenode通信查询元数据(block所在的datanode节点),找到文件块所在的datanode服务器
- 挑选一台datanode(就近原则,然后随机)服务器,请求建立socket流
- datanode开始发送数据(从磁盘里面读取数据放入流,以packet为单位来做校验),这里要如果是很多块,那么是并发读的。
- 客户端以packet为单位接收,先在本地缓存,然后写入目标文件,后面的block块就相当于是append到前面的block块最后合成最终需要的文件。
3.HDFS命令行操作
本地文件提交
hadoop fs -put 文件 hdfs路径
从HDFS获取
hadoop fs -get 目录/文件 本地位置/名字
三 MapReduce
1.什么是MapReduce
分布式计算框架,更适合做离线计算,它是移动计算,而不是移动数据的,是处理超大数据,因为高昂的维护成本和达不到用户期待的时间性能已经被淘汰了
2.MapReduce的优缺点
⑴优点
- 易于编程
- 良好的扩展性
- 高容错性
- 离线处理
⑵缺点
- 无法实时计算,它是非常耗时的
- 无法流式计算,它的各个流程是有依赖关系的,map没做完reduce也做不了。
- 不适合DAG(有向图)计算,