一步一步学习hadoop(五)
来源:互联网 发布:制图软件手机版 编辑:程序博客网 时间:2024/04/20 18:04
Hadoop分布式文件系统(HDFS)
首先介绍一下HDFS的特点:
1.擅长处理大文件,超大文件。几十G甚至PB级别的文件
2.擅长流式数据访问,一次写入多次读取是最高效的访问模式
3.可以运行在普通的机器上,一般只要求内存是ECC内存,可以对数据进行纠错。
4.擅长执行非实时的分析或者是近实时的数据处理,不擅长要求几十毫秒延迟的数据处理(因为作业下的任务的初始化要消耗时间)
5.不擅长处理包含大量小文件的数据处理,小文件很快就会耗光namenode的内存
6.不擅长处理多用户写入,任意修改文件,但这个在以后的版本可能会逐步解决。
HDFS的一些基本概念
1.数据块,其实这不是什么新鲜的东西,计算机系统中的缓存都是使用块来读写数据,并且按照存储器分层模型,越靠底层的块越大,主要是为了降低寻址或者寻道(对磁盘来说)的时间占用的比例。在HDFS中将这个继续发挥,设置这个大小为默认64M,这样就有效降低了寻道时间占用的比例,一般不会超过1%。
同时使用块对文件进行抽象,使文件可以大于任何一台机器的磁盘容量,同时简化了存储系统的设计,同时很容易对数据进行容错处理,只需将块进行冗余备份就可以实现数据的容错。
2.NameNode和DataNode
HDFS有一个NameNode和多个DataNode(这在最新版本中已经开始变化了,最新版允许有多个独立的NameNode),NameNode管理文件系统的命名空间,这些信息以两个本地文件形式保存在磁盘上,命名空间镜像文件和编辑日志文件。NameNode也记录每个文件中各个块所在的数据节点信息,但这些并不保存在文件中。
NameNode非常重要,一旦NameNode数据丢失则所有数据都丢失了,为了数据的安全性,采用两种方案
1'备份NameNode的文件到NFS中
2'启动备份NameNode即(SecondaryNameNode),备份NameNode是对NameNode的一个延迟备份(一般延迟30分钟),也就是说如果namenode失败,可能会丢失半小时的数据。
HDFS文件读取工作原理
1.客户端通过FileSystem对象的open方法打开希望读取的文件
2.DFS通过RPC来调用NameNode,确定文件起始块的位置,对于每一个数据块NameNode返回该块副本的DataNode位置,并根据与客户端的距离进行排序。DFS返回一个FSDataInputStream对象给客户端,作为一个读取文件的代理
3.客户端对FSDataInputStream调用read方法,内部查找距离最近的DataNode,读取数据,读完一个数据块数据,关闭与保存该数据块的DataNode的连接,然后寻找下一块数据继续读取。
4.客户端完成读取后,调用FSDataInputStream的close方法关闭连接
如果读取中遇到读取失败,则会尝试读取另一个最邻近的DataNode中的数据块,同时记录下这个故障,报告给NameNode。
这种设计的优点是NameNode只是告诉客户端每个块的最佳DataNode,客户端自己去和DataNode联系,并读取数据,这就使NameNode不会成为一个性能瓶颈。
HDFS文件写入工作原理
1.客户端通过DFS调用create函数来创建文件
2.DFS对NameNode创建一个RPC调用,在文件系统的命名空间创建一个新文件,此时文件只有名字还没有内容,返回一个FSDataOutputStream对象给客户端
3.客户端通过FSDataOutputStream在内部将写入数据分成一个一个的数据包,并保存在内部队列中,根据DataNode列表要求NameNode分配合适的新块来存储数据,然后数据包流式的传入管线中,当所有DataNode都确认保存成功后,将该数据包在列表中删除
如果在写入中DataNode出现故障,首先会将管线关闭,把队列中的数据都添加到队列的前端,为已经存储的数据指定一个新标识,并报告NameNode,以便NameNode在空闲时间删除这个数据。
首先介绍一下HDFS的特点:
1.擅长处理大文件,超大文件。几十G甚至PB级别的文件
2.擅长流式数据访问,一次写入多次读取是最高效的访问模式
3.可以运行在普通的机器上,一般只要求内存是ECC内存,可以对数据进行纠错。
4.擅长执行非实时的分析或者是近实时的数据处理,不擅长要求几十毫秒延迟的数据处理(因为作业下的任务的初始化要消耗时间)
5.不擅长处理包含大量小文件的数据处理,小文件很快就会耗光namenode的内存
6.不擅长处理多用户写入,任意修改文件,但这个在以后的版本可能会逐步解决。
HDFS的一些基本概念
1.数据块,其实这不是什么新鲜的东西,计算机系统中的缓存都是使用块来读写数据,并且按照存储器分层模型,越靠底层的块越大,主要是为了降低寻址或者寻道(对磁盘来说)的时间占用的比例。在HDFS中将这个继续发挥,设置这个大小为默认64M,这样就有效降低了寻道时间占用的比例,一般不会超过1%。
同时使用块对文件进行抽象,使文件可以大于任何一台机器的磁盘容量,同时简化了存储系统的设计,同时很容易对数据进行容错处理,只需将块进行冗余备份就可以实现数据的容错。
2.NameNode和DataNode
HDFS有一个NameNode和多个DataNode(这在最新版本中已经开始变化了,最新版允许有多个独立的NameNode),NameNode管理文件系统的命名空间,这些信息以两个本地文件形式保存在磁盘上,命名空间镜像文件和编辑日志文件。NameNode也记录每个文件中各个块所在的数据节点信息,但这些并不保存在文件中。
NameNode非常重要,一旦NameNode数据丢失则所有数据都丢失了,为了数据的安全性,采用两种方案
1'备份NameNode的文件到NFS中
2'启动备份NameNode即(SecondaryNameNode),备份NameNode是对NameNode的一个延迟备份(一般延迟30分钟),也就是说如果namenode失败,可能会丢失半小时的数据。
HDFS文件读取工作原理
1.客户端通过FileSystem对象的open方法打开希望读取的文件
2.DFS通过RPC来调用NameNode,确定文件起始块的位置,对于每一个数据块NameNode返回该块副本的DataNode位置,并根据与客户端的距离进行排序。DFS返回一个FSDataInputStream对象给客户端,作为一个读取文件的代理
3.客户端对FSDataInputStream调用read方法,内部查找距离最近的DataNode,读取数据,读完一个数据块数据,关闭与保存该数据块的DataNode的连接,然后寻找下一块数据继续读取。
4.客户端完成读取后,调用FSDataInputStream的close方法关闭连接
如果读取中遇到读取失败,则会尝试读取另一个最邻近的DataNode中的数据块,同时记录下这个故障,报告给NameNode。
这种设计的优点是NameNode只是告诉客户端每个块的最佳DataNode,客户端自己去和DataNode联系,并读取数据,这就使NameNode不会成为一个性能瓶颈。
HDFS文件写入工作原理
1.客户端通过DFS调用create函数来创建文件
2.DFS对NameNode创建一个RPC调用,在文件系统的命名空间创建一个新文件,此时文件只有名字还没有内容,返回一个FSDataOutputStream对象给客户端
3.客户端通过FSDataOutputStream在内部将写入数据分成一个一个的数据包,并保存在内部队列中,根据DataNode列表要求NameNode分配合适的新块来存储数据,然后数据包流式的传入管线中,当所有DataNode都确认保存成功后,将该数据包在列表中删除
如果在写入中DataNode出现故障,首先会将管线关闭,把队列中的数据都添加到队列的前端,为已经存储的数据指定一个新标识,并报告NameNode,以便NameNode在空闲时间删除这个数据。
- 一步一步学习hadoop(五)
- 一步一步学习hadoop(一)
- 一步一步学习hadoop(二)
- 一步一步学习hadoop(三)
- 一步一步学习hadoop(四)
- 一步一步学习hadoop(六)
- 一步一步学习hadoop(七)
- 一步一步学习hadoop(八)
- 一步一步学习hadoop(九)
- 一步一步学习hadoop(十)
- 一步一步学习hadoop(十二)
- 一步一步学习hadoop(十一)
- 一步一步学习ASP.NET 5 (五)- TypeScript
- 一步一步学Vue(五)
- 一步一步跟我学习hadoop(4)----hadoop Map/Reduce教程(1)
- 一步一步跟我学习hadoop(5)----hadoop Map/Reduce教程(2)
- Hadoop HDFS源码学习笔记(五)
- hadoop API 学习小结(五)
- USB_STM32 学习
- DES算法介绍
- spring视图解析类ResourceBundleViewResolver的用法
- 全排列
- ecshop实现鼠标滑过小图切换大图功能 .
- 一步一步学习hadoop(五)
- 贪婪算法
- 最短路径算法——Dijkstra算法
- 字符设备打开操作的过程详解
- UVA 11027 Palindromic Permutation
- Mongo db 与mysql 语法比较
- I/O复用之select与pselect
- 快,体现了真正的掌握
- 机器学习中的算法(2)-支持向量机(SVM)基础