好程序员大数据学习路线分享HDFS学习总结

好程序员大数据学习路线分享 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 设计,还支持 Master Failover ,而且 Block 大小改为 1M ,有意要调优处理小文件。( Alibaba DFS 的设计,也是多 Master 设计,它把 Metadata 的映射存储和管理分开了,由多个 Metadata 存储节点和一个查询 Master 节点组成。)

2.   使用缓存或多 master 设计可以降低 client 的数据请求压力,以减少延时。

3. 横向扩展,一个 Hadoop 集群能管理的小文件有限,那就把几个 Hadoop 集群拖在一个虚拟服务器后面,形成一个大的 Hadoop 集群。 google 也是这么干过的。

 

HDFS Shell 命令

 

| **-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 文件系统路径 本地文件系统路径 `      *< 易错 >*  ps HDFS 有一个和 put get 类似的而方法 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. 检查点节点,表面上看 SecondaryNameNode NameNode 的备份 , 实际上 SecondaryNameNode 的主要作用并不是备份

2. 主要职责:定期合并 fsimage edit log ,并推送给 NameNode

 

问题引入:一个已经 运行十年的集群,最近的fsimage (镜像)是 NameNode 十年前格式化产生,这么多年的操作日志被 edit log (日志)记录已达几百 T 。那么问题来了,如果我要重启这个集群,这么大日志文件,必定要重启很久,我们的时间并不充裕该 如何解决这个问题?

 

*< 问题提取:只要 NameNode 不格式化或重新启动 ,fsimage 将保持原始状态 ,edits 会不断的增加 >*

 

此时我们引入Secondary NameNode , 把 PN 中的 edit log  fsimage SN merge, 此时 PN 还会继续产生新的日志 , 记录合并和合并期间的操作 , 合并之后新 fsimage 会拷贝回 PN , 循环上面的操作 . 以此能保持 edit log 文件处于比较小的状态 ,fsimage 的时间点也不会太久远

 

**fsimage 是如何产生的呢? **

 

HDFS 系统要开始运行的时候需要先对 NameNode 进行一次格式化 , 那么第一次格式化就会产生一个 fsimage 文件 , 但是这个文件是个空文件 ,NameNode 启动的时候会加载 fsimage  然后执行 edit log 加载到内存中 , 然后立刻向磁盘中写一个新的 fsimage 文件 , 这个 fsimage 就是一个最新的储存信息

 

** 紧急情况时,可以辅助恢复 NameNode**

 

namenode secondary namenode 的工作目录存储结构完全相同,所以,当 namenode 故障退出需要重新恢复时,可以从 secondary namenode 的工作目录中将 fsimage 拷贝到 namenode 的工作目录,以恢复 namenode 的元数据

 

HDFS 读写数据流程

 

HDFS 读数据流程

 

简单版本

 

客户端将要读取的文件路径发送给namenode namenode 获取文件的元信息(主要是 block 的存放位置信息)返回给客户端,客户端根据返回的信息找到相应 datanode 逐个获取文件的 block 并在客户端本地进行数据追加合并从而获得整个文件


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69913892/viewspace-2654309/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/69913892/viewspace-2654309/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值