分布式文件存储系统hdfs

2019-08-08  本文已影响0人  康俊1024

hdfs基础知识

hadoop当中的文件系统是一个抽象类,里面有很多的子实现类,例如 hdfs,file:///, ftp等文件系统。

<property>
        <!-- 实际工作当中,这个路径不能随便写,需要首先确定我们的磁盘的挂载路径
                df  -lh   查看我们磁盘的挂载路径
        -->
        <name>dfs.namenode.name.dir</name>
        <value>file:///namenodeDatas</value>
</property>

dfs.namenode.edits.dir:定义了我们edits文件存储的路径

<property>
      <name>dfs.namenode.edits.dir</name>
       <value>file:///hadoopDatas/dfs/nn/edits</value>
</property>

hdfs的文件写入过程

角色:client(客服端),namenode、datanode
第一步:客户端发出请求,请求namneode需要上传写入数据;
第二步:namenode检测客户端是或否有权限上传;
第三步:客户端请求namenode第一个block块上传到哪里去(一个文件会拆分多个block块);
第四步:namenode找三个block块返回给客户端(默认三个replication副本);
第五步:客户端找datanode建立pipeline管道,主备上传数据,数据都是以packet包的形式通过管道上传到datanode上面去;
第六步:datanode保存好了之后,给客户端一个ack确认机制,客户端准备上传下一个block块,直到所有的block块上传完成,关闭文件流;

hdfs当中的小文件的处理

每一个小文件都会有一份元数据信息,元数据信息都保存在namenode的内存当中,如果有大量的小文件,会产生大量的元数据信息,造成namenode的内存压力飙升。实际工作当中,尽量不要造成大量的小文件存储到hdfs上面去,如果有大量的小文件,想办法,合并成大文件。
第一种解决方案:从源头上避免小文件,上传的时候都是一些大文件。如果真的有各种小文件,可以考虑上传的时候能不能合并到一个文件里面去。
第二种解决方案:sequenceFile
第三种解决方案:har文件 归档文件

上一篇下一篇

猜你喜欢

热点阅读