温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Hadoop分布式文件系统中的HDFS是什么

发布时间:2021-10-20 16:22:32 来源:亿速云 阅读:125 作者:柒染 栏目:大数据

这期内容当中小编将会给大家带来有关Hadoop分布式文件系统中的HDFS是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

HDFS设计
  • 超大文件 PB 级

  • 流式数据访问

    • 一次写入,多次读取是最高效的访问模式

  • 商用硬件 (不需要高昂且高可用的硬件)

    • 节点故障率较高,某些应用不适合

  • 低时间延迟的数据访问

    • 要求低时间延迟的数据访问,例如几十毫秒范围不适合在HDFS上运行

  • 大量的小文件

    • namenode 将文件系统的元数据存储在内容中,因此该文件系统所能存储的文件总数受限于 namenode 的内存容量

    • 根据经验 每个文件、目录和数据块的存储信息大约占150字节

  • 多用户写入,任意 修改文件

    • HDFS中的文件只支持单个写入者,而且写操作总是以“只添加”方式在文件末尾写数据,它不支持多个写入者的操作,也不支持在文件的任意位置进行修改。

HDFS概念
  • 数据块 默认128mb

  • HDFS 小于一个块大小的文件不会占据整个块的空间

hdfs fsck / -files -blocks

  • namenode 和datanode

    • 1.备份那些组成文件系统元数据持久状态的文件,一般的配置是,将持久状态写入本地磁盘的同时,写入NFS

    • 运行辅助namenode 一般在单独的物理机运行。主节点挂了之后,启用辅助节点不能保证数据完整性

    • namenode 管理文件系统的命名空间。它维护着文件系统树及整棵树内所有的文件和目录。这些信息以两个文件形式永久保存在本地磁盘上:命名空间镜像文件和编辑日志文件。namenode 也记录着每个文件中各个块所在的数据节点信息,但它并不永久保存块的位置信息,因为这些信息会在系统启动时根据数据节点信息重建。

    • datanode 根据需要存储并检索数据块,并且定期向namenode发送它们所存储的块的列表

    • namenode 容错机制

  • 块缓存

    • 默认 一个块缓存在一个datanode的内存中

    • 提高读 的性能

    • 缓存池

  • 联邦HDFS

    • 联邦HDFS 允许系统通过添加namenode 实现扩展

    • 每个namenode 管理文件系统命名空间的一部分

    • 两两之间互不通信

  • HDFS 的高可用

    • namenode 之间需要通过高可用共享存储实现编辑日志的共享

    • datanode 需要同时向两个namenode 发送数据块处理报告,因为数据块的映射信息存储在namenode 内存中,而非磁盘

    • 客户端需要使用特定的机制来处理namenode 的失效问题,这一机制对用户是透明的

    • 辅助namenode的角色被备用namenode所包含

    • 共享存储的选择 NFS或群体日志管理器(QJM)

    • 故障切换与规避

    • 撤销namenode 访问共享存储目录的权限

    • 屏蔽网络端口

    • 断电等等...

    • 备份namenode 的方式无法实现高可用

    • HA 的架构支持

命令行接口
  • namenode 运行端口8020

  • 从本地copy 文件到 hdfs /user/hadoop/ 目录下

hadoop fs -copyFromLocal max_temperature.sh a.sh

  • 把文件复制回本地文件系统

hadoop fs -copyToLocal a.sh my.sh

md5sum max_temperature.sh my.sh

  • 新建目录

hadoop fs -mkdir books

hadoop fs -ls .

  • 默认情况下 安全措施处于停用状态,生产环境应该启用 dfs.premissions.enabled

  • 对文件而言 执行权限没有意义

hadoop 文件系统
  • HDFS 只是其中一种实现

  • Hadoop 文件系统 Local,HDFS,WebHDFS,Secure WebHDFS, HAR, View, FTP, S3, Azure, Swift

  • 列出本地文件系统根目录下的文件 hadoop fs -ls file:///

  • 尽管运行的MapReduce 程序可以访问任何文件系统,但在处理大数据集的时候,建议还是选择一个有数据本地化优势的分布式文件系统,如HDFS

  • 接口

    • 用户控件文件系统, 允许将用户空寂那实现的文件系统作为Unix 文件系统进行集成。

    • 通过使用Fuse-DFS 模块,HDFS均可以作为一个标准的本地文件系统进行挂载。

    • NFS 网关是更好的方案,应该选择

    • 使用hadoop 的NFSv3 网关将HDFS挂载为本地客户端的文件系统是可行的。

    • 可以使用Unix程序与该文件系统交互

    • HDFS仅能以追加模式写文件,因此可以往文件末尾添加数据,但不能随机修改文件

    • HTTP接口比原生的Java客户端要慢,不要用它来传出特大数据

    • 访问方式 直接访问(namenode 和 datanode 内嵌的 web服务器作为 WebHDFS 的端节点运行 dfs.webhdfs.enabled 设置为true)

    • 通过代理访问

    • HttpFS代理提供和 WebHDFS 相同的HTTp接口 使用httpfs.sh 脚本

    • HTTP

    • c 语言(libhdfs,libwebhdfs)底层代码都是java

    • NFS

    • FUSE

  • java接口

    hadoop jar hadoopdemo-1.0-SNAPSHOT.jar URLCat hdfs:///user/hadoop/output/part-r-00000

    public class FileSystemCat {
       public static void main(String[] args) throws Exception {
          String uri = args[0];
          Configuration conf = new Configuration();
          FileSystem fs = FileSystem.get(URI.create(uri), conf);
          InputStream in = null;
          try {
                in = fs.open(new Path(uri));
                IOUtils.copyBytes(in, System.out, 4096, false);
          } finally {
                IOUtils.closeStream(in);
          }
       }
    }


    hadoop jar hadoopdemo-1.0-SNAPSHOT.jar FileSystemCat hdfs:///user/hadoop/output/part-r-00000

    hadoop jar hadoopdemo-1.0-SNAPSHOT.jar FileSystemDoubleCat hdfs:///user/hadoop/output/part-r-00000

    • 新建文件

    • FSDataOutputStream

    • 目录 public boolean mkdirs(Path f) throws IOException

    • 查询文件系统

    • FileStatus 类封装了文件系统中文件和目录的元数据

    • public boolean exists(Path f) throws IOException

    • 写入数据

         FSDataOutputStream create(FileSystem fs,Path file, FsPermission permission) throws IOException
      
         FSDataOutputStream append(Path f) throws IOException
      
         //代码
          String localSrc = args[0];
        String dst = args[1];
        InputStream in = new BufferedInputStream(new FileInputStream(localSrc));
      
        Configuration conf = new Configuration();
        FileSystem fs = FileSystem.get(URI.create(dst), conf);
        OutputStream out = fs.create(new Path(dst), new Progressable() {
            public void progress() {
                System.out.println(".");
            }
        });
        IOUtils.copyBytes(in, out, 4096, false);


    • FSDataInputStream seek()是一个相对高开销的操作,需要谨慎使用,建议用流数据来构建应用的访问模式,而非执行大量的seek()方法 hadoop jar hadoopdemo-1.0-SNAPSHOT.jar FileSystemDoubleCat hdfs:///user/hadoop/output/part-r-00000

    • 通过 FileSystem

    • 通过URL读取数据 FsUrlStreamHandlerFactory IOUtils

上述就是小编为大家分享的Hadoop分布式文件系统中的HDFS是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI