hadoop(3)HDFS概念

2018-10-08  本文已影响10人  Tomy_Jx_Li

1 什么是分布式文件系统

因为当下的数据量越来越大,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统 。

2 分布式文件系统的特性

3 常见分布式文件系统

常见的分布式文件系统有,GFS、HDFS、Lustre 、Ceph 、GridFS 、mogileFS、TFS、FastDFS等。各自适用于不同的领域。它们都不是系统级的分布式文件系统,而是应用级的分布式文件存 储服务。详情参考常见的分布式文件系统介绍

4 HDFS

HDFS只是分布式文件系统中的一种。适用于一次写入多次查询的情况,不支持并发写情况,小文件不合适。不支持的原因:
1、小文件过多,会过多占用namenode的内存,并浪费block。

2、文件过小,寻道时间大于数据读写时间,这不符合HDFS的设计:
HDFS为了使数据的传输速度和硬盘的传输速度接近,则设计将寻道时间(Seek)相对最小化,将block的大小设置的比较大,这样读写数据块的时间将远大于寻道时间,接近于硬盘的传输速度。

4.1 Shell

调用文件系统(FS)Shell命令应使用 bin/hdfs dfs 的形式。
所有的FS shell命令使用URI路径作为参数。URI格式是scheme://authority/path。HDFS的scheme是hdfs,对本地文件系统,scheme是file。其中scheme和authority参数都是可选的,如果未加指定,就会使用配置中指定的默认scheme。也就是配置文件core-site.xml中的fs.defaultFS配置项的值。
大多数FS Shell命令的行为和对应的Unix Shell命令类似

4.2 fs命令

这是2.9.1的所有命令,大部分加上了注解,也可以参考官方网站

        [-appendToFile <localsrc> ... <dst>] 给目标文件追加一个或多个本地文件的内容
        [-cat [-ignoreCrc] <src> ...] 查看目标文件
        [-checksum <src> ...] 返回文件的校验信息,文件读取时使用
        [-chgrp [-R] GROUP PATH...] 修改文件所属组
        [-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...] 修改文件权限
        [-chown [-R] [OWNER][:[GROUP]] PATH...] 修改文件的所有者
        [-copyFromLocal [-f] [-p] [-l] [-d] <localsrc> ... <dst>] 上传文件,同put
        [-copyToLocal [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>] 下载文件,同get
        [-count [-q] [-h] [-v] [-t [<storage type>]] [-u] [-x] <path> ...] 
        [-cp [-f] [-p | -p[topax]] [-d] <src> ... <dst>] 复制
        [-createSnapshot <snapshotDir> [<snapshotName>]] 创建快照
        [-deleteSnapshot <snapshotDir> <snapshotName>] 删除快照
        [-df [-h] [<path> ...]] 显示存储情况
        [-du [-s] [-h] [-x] <path> ...] 显示文件或者目录大小
        [-expunge] 
        [-find <path> ... <expression> ...] 查找文件
        [-get [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>] 下载
        [-getfacl [-R] <path>] 查询文件或者目录的访问和控制权限
        [-getfattr [-R] {-n name | -d} [-e en] <path>] 查询文件或者目录的扩展属性名和值
        [-getmerge [-nl] [-skip-empty-file] <src> <localdst>] 合并文件内容并输出
        [-help [cmd ...]]
        [-ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [<path> ...]] 查询目录
        [-mkdir [-p] <path> ...] 创建文件夹
        [-moveFromLocal <localsrc> ... <dst>] 本地文件剪切到hdfs目录
        [-moveToLocal <src> <localdst>] hdfs文件剪切到本地
        [-mv <src> ... <dst>] 移动文件
        [-put [-f] [-p] [-l] [-d] <localsrc> ... <dst>] 上传文件
        [-renameSnapshot <snapshotDir> <oldName> <newName>] 重命名快照
        [-rm [-f] [-r|-R] [-skipTrash] [-safely] <src> ...] 删除文件
        [-rmdir [--ignore-fail-on-non-empty] <dir> ...] 删除文件夹
        [-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]] 设置文件或目录的访问和控制权限
        [-setfattr {-n name [-v value] | -x name} <path>] 设置文件的扩展属性,如
        hdfs dfs -getfattr -n user.attr /a.txt,但是呢自测的时候,属性名必须是user.xx,其他的不行
        [-setrep [-R] [-w] <rep> <path> ...] 设置文件的备份数
        [-stat [format] <path> ...] 以特殊的格式查看文件的统计信息,如%u是所有者,%o是大小,hdfs dfs -stat "type:%F perm:%a" /a.txt
        [-tail [-f] <file>] 显示文件尾部
        [-test -[defsz] <path>] 测试命令,但是自测时未返回正确信息
        [-text [-ignoreCrc] <src> ...] 查看文件内容
        [-touchz <path> ...] 创建一个新文件
        [-truncate [-w] <length> <path> ...] 删除所有匹配的文件
        [-usage [cmd ...]] 和help一样

4.3 体系结构

1.NameNode
2.DataNode
3.Secondary NameNode

4.3.1 NameNode

NameNode是整个文件系统的管理节点。它维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表。接收用户的操作请求。

NameNode的结构图
NameNode的文件存储在hdfs-site.xml文件的dfs.namenode.name.dir属性配置的值下,如果没有设置,那么默认是file://${hadoop.tmp.dir}/dfs/name。这些文件都是保存在linux的文件系统下的。
这里的文件包括
1.fsimage:元数据镜像文件。存储某一时段NameNode内存元数据信息。
2.edits:操作日志文件。
3.fstime:保存最近一次checkpoint的时间这个应该是早期的版本有这个文件,但是2.9.1里没有

工作特点

4.3.2 DataNode

DataNode提供真实文件数据的存储服务,最基本的存储单位是文件块(block)。
对于文件内容而言,一个文件的长度大小是size,那么从文件的0偏移开始,按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block。HDFS默认Block大小是128MB,以一个256MB文件,共有256/128=2个Block。
但是不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间。
需要注意的是,可能在页面展示的时候会如下图:

文件管理页面展示
但是我们实际情况是下图:
后台查看文件实际大小
同时DataNode是多副本的,也就是hdfs-site.xml的dfs.replication属性配置的值。默认是3。

4.3.3 Secondary NameNode

Secondary NameNode是高可用(HA)的一个解决方案。但不支持热备。配置即可。它会从NameNode上下载元数据信息(fsimage,edits),然后把二者合并,生成新的fsimage,在本地保存,并将其推送到NameNode,替换旧的fsimage.

工作流程


Secondary NameNode工作时机
Secondary NameNode会在何时进行文件的合并呢,主要有两个参数

上一篇 下一篇

猜你喜欢

热点阅读