您的位置:首页 > 大数据 > Hadoop

HDFS概述与架构

2019-02-25 14:09 239 查看

概述

 

HDFS即Hadoop分布式文件系统。源自GFS论文。

有以下特点:

        1、高容错性的分布式文件系统。

        2、可构建在廉价机器上,通过多副本机制,提高可靠性。

       3、易扩展、为用户提供性能不错的文件存储服务。

 

缺点: 

      1、不适合低延时数据访问,比如毫秒级的存储数据,是做不到的。

      2、无法高效的对大量小文件进行存储。

      3、不支持并发写入,不支持文件的随机修改(仅支持append)

 

HDFS为什么不适合存储小文件?

      1、HDFS中存储的数据的元数据信息会加载到NameNode的内存中,每个块大概占用内存中的150字节,存储大量小文件的话,它会占用NameNode大量的内存。因为NameNode的内存是有限的, 所以这样容易挤爆NameNode。

      2、一般来说,NN会不断跟踪并检查每个数据块的存储位置(通过DN的心跳信息)。数据节点需要上报的block越多,则也会消耗越多的网络带宽/时延。

      3、小文件存储的寻址时间会超过读取时间,它违反了HDFS的设计目标。

 

      解决方法: 合并小文件(合并后大小最好接近并小于等于块大小)

           

 

块(block)   

     HDFS中的文件在物理上是分块存储(block),块的大小可以通过配置参数( dfs.blocksize)来规定,默认大小在hadoop2.x版本中是128M,1.x中是64M。块的副本数是根据参数(dfs.replication)来规定的。

     HDFS的块比磁盘的块大,其目的是为了最小化寻址开销。如果块设置得足够大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。因而,传输一个由多个块组成的文件的时间取决于磁盘传输速率。

     假一个文件260M,块大小为128,副本系数为3,则应有 3 * 3 个块,实际占用的空间为260M * 3  。

     注:当一个4M的文件存在128M的块中时,实际占用的空间是4M。

 

HDFS架构

 

        这种架构主要由四个部分组成,分别为HDFS Client、NameNode、DataNode和Secondary NameNode。其中Rack代表机架。

1)Client:客户端。

        (1)文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的Block,然后进行存储;

        (2)与NameNode交互,获取文件的元数据信息;

        (3)与DataNode交互,读取或者写入数据;

        (4)Client提供一些命令来管理HDFS,比如启动、关闭、访问HDFS;

2)NameNode:NN 。管理文件系统的命名空间(namespace),以及客户端对文件的访问。

        (1)管理 文件名称、文件目录结构、文件属性(创建时间、权限、副本数)等;

          注:上述信息会以fsimage、editlog的方式持久化在硬盘上,启动时加载到内存中。

        (2)管理 每个文件的块列表以及块所在的DataNode;

          注: NN不会持久化存储以上这种映射关系,DN周期性得发送心跳信号和块状况报告(blockReport)给NN,NN在内存中动态维护这种映射关系。

        (3)文件操作,NameNode 负责文件元数据的操作,DataNode负责处理文件内容的读写请求,跟文件内容相关的数据流不经过NameNode,只会询问它跟那个DataNode联系。

                  

3) DataNode:DN。NameNode下达命令,DataNode执行实际的操作。

        (1)存储一个是数据本身,一个是元数据(数据块的长度、校验和、时间戳);

        (2)每隔3秒发送一次心跳。如果超过10分钟没有收到某个DataNode 的心跳,则认为该节点不可用。

        (3)执行数据块的读/写操作。

 

4) Secondary NameNode:SNN。NN的冷备份。

        (1)辅助NameNode,分担其工作量;

        (2)定期合并Fsimage和Edits为新的fsimage文件,并推送给NameNode;(checkpoint机制)

                 参数:dfs.namenode.checkpoint.period  3600s  (默认一小时备份一次。不可靠)

        (3)在紧急情况下,可辅助恢复NameNode(不能马上替换)。

 

HDFS常用命令

1. 单独启动和关闭hadoop服务

启动名称节点

#hadoop-daemon.sh start namenode

启动数据节点

#hadoop-daemons.sh start datanode slave

启动secondarynamenode

#hadoop-daemon.sh start secondarynamenode

 

启动resourcemanager

#yarn-daemon.sh start resourcemanager

启动nodemanager

#bin/yarn-daemons.sh start nodemanager

停止数据节点

#hadoop-daemons.sh stop datanode

 

2. 常用的命令 

创建目录

#hdfs dfs -mkdir /xxx

查看

#hdfs dfs  -ls 

递归查看

#hdfs dfs ls -R 

上传

#hdfs dfs -put  

下载

#hdfs dfs -get 

删除

#hdfs dfs -rm 

 

从本地剪切粘贴到hdfs

#hdfs fs -moveFromLocal /input/xx.txt /input/xx.txt

从hdfs剪切粘贴到本地

#hdfs fs -moveToLocal /input/xx.txt /input/xx.txt

追加一个文件到另一个文件到末尾

#hdfs fs -appedToFile ./hello.txt /input/hello.txt

 

查看文件内容

#hdfs fs -cat /input/hello.txt

显示一个文件到末尾

#hdfs fs -tail /input/hello.txt

以字符串的形式打印文件的内容

#hdfs fs -text /input/hello.txt

 

修改文件权限

#hdfs fs -chmod 666 /input/hello.txt

修改文件所属

#hdfs fs -chown ruoze.ruoze  /input/hello.txt

 

从本地文件系统拷贝到hdfs里

#hdfs fs -copyFromLocal /input/hello.txt /input/

从hdfs拷贝到本地

#hdfs fs -copyToLocal /input/hello.txt /input/

 

从hdfs到一个路径拷贝到另一个路径

#hdfs fs -cp /input/xx.txt /output/xx.txt

从hdfs到一个路径移动到另一个路径

#hdfs fs -mv /input/xx.txt /output/xx.txt

 

统计文件系统的可用空间信息

#hdfs fs -df -h /

统计文件夹的大小信息

#hdfs fs -du -s -h /

统计一个指定目录下的文件节点数量

#hadoop  fs -count /aaa

 

设置hdfs的文件副本数量

#hadoop fs -setrep 3 /input/xx.txt

 

     

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: