请选择 进入手机版 | 继续访问电脑版

好程序员-千锋教育旗下高端IT职业教育品牌

400-811-9990
我的账户
好程序员

专注高端IT职业培训

亲爱的猿猿,欢迎!

已有账号,请

如尚未注册?

[BigData] 好程序员大数据培训教程分享HDFS总结

[复制链接]
叶子老师 发表于 2019-8-20 15:24:53 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
好程序员大数据培训教程分享HDFS总结HDFS介绍
HDFS(Hadoop Distributed File System)是分布式文件系统,Hadoop项目的核心子项目.
设计思想:将大文件、大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析。
HDFS的重要特性
1. HDFS中的文件在物理上是**分块存储**(block),块的大小可以通过配置参数( dfs.blocksize)来规定,默认大小在hadoop2.x版本中是128M,老版本中是64M
2. HDFS文件系统会给客户端提供一个**统一的抽象目录树**,客户端通过路径来访问文件
3. **目录结构及文件分块信息(元数据)**的管理由namenode节点承担
4. 文件的各个block的存储管理由datanode节点承担
5. HDFS是设计成适应一次写入,多次读出的场景,且不支持文件的修改
HDFS的优点
1. 高可靠性
   Hadoop按位存储和处理数据的能力强
2. 高扩展性
   Hadoop是在可用的计算机集群中分配数据完成计算计算任务  
3. 高效性
   Hadoop能够在节点之间动态的移动数据,并保证每个节点的动态平衡
4. 高容错性
   Hadoop能够自动保存的多个副本,并且能够自动将失败的任务重新分配
   
HDFS的缺点
1. 不适合低延迟访问,不能快速访问
   HDFS是单Master的,所有的对文件的请求都要经过它,当请求多时,肯定会有延时。它适合高吞吐率的场景,就是在某一时间内写入大量的数据
2. 无法高效存储大量小文件
   存储大量小文件的话,它会占用 NameNode大量的内存来存储文件、目录和块信息(元数据)
3. 不支持多用户写入即任意修改文件
   仅支持数据append(追加),不支持文件随意修改
针对HDFS缺点可能的改进措施
1. Master设计,正在研发中的GFS II也要改为分布式多Master设计,还支持MasterFailover,而且Block大小改为1M,有意要调优处理小文件。(Alibaba DFS的设计,也是多Master设计,它把Metadata的映射存储和管理分开了,由多个Metadata存储节点和一个查询Master节点组成。)
2.  使用缓存或多master设计可以降低client的数据请求压力,以减少延时。
3. 横向扩展,一个Hadoop集群能管理的小文件有限,那就把几个Hadoop集群拖在一个虚拟服务器后面,形成一个大的Hadoop集群。google也是这么干过的。
HDFSShell命令
| **-help** 输出命令的手册                                     |
| :----------------------------------------------------------- |
| **-ls** 显示目录信息   `hadoop fs -ls   hdfs://hadoop-server01:9000/`   ps:这些参数中,所有的hdfs**路径都可以简写   -->`hadoop fs -ls /`   等同于上一条命令的效果 |
| **-put**  HDSF上传文件 `hdfs dfs -put 本地文件路径 HDFS文件系统路径` *<易错:记 源路径→目的路径>* |
| **-get**  HDFS文件系统中的文件下载回来  `hdfs dfs -get HDFS文件系统路径 本地文件系统路径`      *<易错>*  psHDFS有一个和putget类似的而方法 copyFromlocal 相当于put copyTolocal 相当于 get |
| **-cat**  查看HDFS文件系统中的文件内容  `hdfs dfs -cat HDFS文件系统中文件的路径`  ps:不要查看非文件 |
| **-cp**   HDFS文件系统中进行复制操作  `hdfs dfs -cp HDFS文件系统中的文件路径 目标HDFS文件系统中的路径` |
| **-mv**  HDFS文件系统中的文件进行移动操作  `hdfs dfs -mv HDFS文件系统中的文件路径 目标HDFS文件系统中的路径` ps: 将源文件移动目标路径,这个命令可允许有多个源路径,此时目标路径必须是一个文件夹(目录)不允许不同的文件系统互相移动文件 |
| **-du**   查看HDFS文件系统中文件的大小   `hdfs dfs -du HDFS文件系统中路径中的一个文件` |
| **-mkdir**   HDSF系统中创建文件夹 mkdir 创建文件夹  ps:递归创建+`-p` |
| **-rm**   删除HDFS文件系统中的目录或文件  `hdfs dfs -rm HDFS文件系统路径`   `hdfs dfs -rm -r HDFS文件系统路径`  ps: 只能是单个文件 或 空目录,若参数文件夹中有多个文件 加 -r |
| **-chmod**   更改文件的权限  `hdfs dfs -chmod -R 权限值 HDFS文件系统路径下的文件夹` ps: 所有每三位可以作为一个八进制处理 777是满权限 rwx +R之后, 文件夹下的所有子文件和文件夹都会被修改 |
| **-appendTofile**  追加一个文件到已经存在文件的末尾 `hadoop fs -appendTofile ./hello.txt /hello.txt` |
| **-getmerge**  合并下载多个文件 `hadoop fs -getmerge /aaa/log.* ./log.sum` |
| **-df**  统计文件系统的可用空间信息 `hadoop fs -df -h /`     |
|                                                              |
HDFS的工作机制
在了解工作机制之前,我们先来看看几个重要角色:
NameNode
1. master,它是一个管理者,维护着整个文件系统的文件目录树
2. 储存数据库(Block)映射信息,保存元数据信息包括:文件的所属权,文件的权限,文件大小,时间(Block列表,Block偏移量),位置信息
3. 主要职责:处理客户端读写请求,收集DateNode汇报的Block列表信息<*不会保存到本地系统中*>
**DateNode**
1. Slave,它是一个从节点,简单理解就是NameNode的奴隶
2. 存储用户的文件块数据
3. 主要职责:定期向NameNode汇报自身所持有的block信息(心跳机制),执行数据块的读/写操作
Secondary NameNode
1. 检查点节点,表面上看SecondaryNameNodeNameNode的备份,实际上SecondaryNameNode的主要作用并不是备份
2. 主要职责:定期合并fsimageedit log ,并推送给NameNode
问题引入:一个已经 运行十年的集群,最近的fsimage(镜像)是NameNode十年前格式化产生,这么多年的操作日志被edit log(日志)记录已达几百T。那么问题来了,如果我要重启这个集群,这么大日志文件,必定要重启很久,我们的时间并不充裕该 如何解决这个问题?
*<问题提取:只要NameNode不格式化或重新启动,fsimage将保持原始状态,edits会不断的增加 >*       
此时我们引入Secondary NameNode, 把PN中的edit log fsimageSNmerge,此时PN还会继续产生新的日志,记录合并和合并期间的操作,合并之后新fsimage会拷贝回PN,循环上面的操作.以此能保持edit log文件处于比较小的状态,fsimage的时间点也不会太久远
**fsimage是如何产生的呢?**
HDFS系统要开始运行的时候需要先对NameNode进行一次格式化,那么第一次格式化就会产生一个fsimage文件,但是这个文件是个空文件,NameNode启动的时候会加载fsimage 然后执行edit log加载到内存中,然后立刻向磁盘中写一个新的fsimage文件,这个fsimage就是一个最新的储存信息
**紧急情况时,可以辅助恢复NameNode**
namenodesecondary namenode的工作目录存储结构完全相同,所以,当namenode故障退出需要重新恢复时,可以从secondary namenode的工作目录中将fsimage拷贝到namenode的工作目录,以恢复namenode的元数据
HDFS读写数据流程
HDFS读数据流程
简单版本
客户端将要读取的文件路径发送给namenodenamenode获取文件的元信息(主要是block的存放位置信息)返回给客户端,客户端根据返回的信息找到相应datanode逐个获取文件的block并在客户端本地进行数据追加合并从而获得整个文件。
好程序员大数据培训官网:http://www.goodprogrammer.org/

精彩内容,一键分享给更多人!
回复

使用道具 举报

您需要登录后才可以回帖

本版积分规则

关注我们
好程序员
千锋好程序员

北京校区(总部):北京市海淀区宝盛北里西区28号中关村智诚科创大厦

深圳西部硅谷校区:深圳市宝安区宝安大道5010号深圳西部硅谷B座A区605-619

杭州龙驰智慧谷校区:浙江省杭州市下沙经济技术开发区元成路199号龙驰智慧谷B座7层

郑州校区:郑州市二七区航海中路60号海为科技园C区10层、12层

Copyright 2007-2019 北京千锋互联科技有限公司 .All Right

京ICP备12003911号-5 京公安网11010802011455号

请您保持通讯畅通1对1咨询马上开启