HDFS 的 block 块和副本机制
hdfs 将所有的文件全部抽象成为 block 块来进行存储,不管文件大小,全部一视同仁都是以 block 块的统一大小和形式进行存储,方便我们的分布式文件系统对文件的管理
所有的文件都是以 block 块的方式存放在 HDFS 文件系统当中,在 hadoop1 当中,文件的 block 块默认大小是 64M,hadoop2 当中,文件的 block 块大小默认是 128M,block 块的大小可以通过 hdfs-site.xml 当中的配置文件进行指定
1 抽象为 block 块的好处
一个文件有可能大于集群中任意一个磁盘 10T*3/128 = xxx 块 2T,2T,2T 文件方式存—–>多个 block 块,这些 block 块属于一个文件
使用块抽象而不是文件可以简化存储子系统
块非常适合用于数据备份进而提供数据容错能力和可用性
2 块缓存
通常 DataNode 从磁盘中读取块,但对于访问频繁的文件,其对应的块可能被显示的缓存在 DataNode 的内存中,以堆外块缓存的形式存在。默认情况下,一个块仅缓存在一个 DataNode 的内存中,当然可以针对每个文件配置 DataNode 的数量。作业调度器通过在缓存块的 DataNode 上运行任务,可以利用块缓存的优势提高读操作的性能。
例如:
连接(join)操作中使用的一个小的查询表就是块缓存的一个很好的候选。 用户或应用通过在缓存池中增加一个 cache directive 来告诉 namenode 需要缓存哪些文件及存多久。缓存池(cache pool)是一个拥有管理缓存权限和资源使用的管理性分组。
例如:
一个文件 130M,会被切分成 2 个 block 块,保存在两个 block 块里面,实际占用磁盘 130M 空间,而不是占用 256M 的磁盘空间
3 hdfs 的文件权限验证
hdfs 的文件权限机制与 linux 系统的文件权限机制类似
r:read w:write x:execute 权限 x 对于文件表示忽略,对于文件夹表示是否有权限访问其内容
如果 linux 系统用户 zhangsan 使用 hadoop 命令创建一个文件,那么这个文件在 HDFS 当中的 owner 就是 zhangsan
HDFS 文件权限的目的,防止好人做错事,而不是阻止坏人做坏事。HDFS 相信你告诉我你是谁,你就是谁
4 hdfs 的副本因子
为了保证 block 块的安全性,也就是数据的安全性,在 hadoop2 当中,文件默认保存三个副本,我们可以更改副本数以提高数据的安全性
在 hdfs-site.xml 当中修改以下配置属性,即可更改文件的副本数
版权声明: 本文为 InfoQ 作者【大数据技术指南】的原创文章。
原文链接:【http://xie.infoq.cn/article/9b710f3d1ab470f9a99b65b4c】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论