广告
返回顶部
首页 > 资讯 > 精选 >HDFS分布式文件系统如何设计
  • 916
分享到

HDFS分布式文件系统如何设计

2023-06-02 16:06:36 916人浏览 薄情痞子
摘要

这篇文章将为大家详细讲解有关hdfs分布式文件系统如何设计,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。正文HDFS的设计以及概念  HDFS集群是典型的 master/slave 架构,master 节

这篇文章将为大家详细讲解有关hdfs分布式文件系统如何设计,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

正文

HDFS的设计以及概念

  HDFS集群是典型的 master/slave 架构,master 节点叫做 Namenode,salve 节点叫做 DataNode。最简单的 HDFS 集群便是一个 NameNode 节点和多个 DataNode 节点,HDFS 集群的架构图如下:

HDFS分布式文件系统如何设计

  Block:数据块,HDFS 集群将存储的文件划分为多个分块,块作为独立的存储单元,默认大小为为 128M。如果某个文件超过集群单机存储容量,分块可以解决该问题;其次按照块进行存储、备份能简化系统的设计。默认块大小修改 hdfs-site.xml 文件中的 dfs.blocksize 配置。
  NameNode:HDFS 集群的 Master 节点,维护集群文件的目录结构(命名空间)和编辑日志文件,同时在内存中记录文件各个块所在的数据节点的信息。
  DataNode:HDFS 集群的 Slave 节点,负责存储实际的数据。根据需要存储和检索数据块,并定期向 NameNode 发送他们所存储的数据块列表。为了实现数据存储的高可靠,HDFS 将一个块存储在不同的 DataNode 节点, 默认是 3 个,可以通过 hdfs-site.xml 文件中的 dfs.replication 配置修改默认值。如果当前 DataNode 中的数据块损坏, 可以从其他 DataNode 节点复制一个正确的数据块。
  以上是架构图中显而易见的几个重要概念,接下来将结合架构设计中的高可用、可扩展性来介绍下架构图中隐藏的几个重要概念。
  联邦 HDFS:这个主要是为了解决可扩展性的问题,我们知道 NameNode 进程的内存中存放了数据与数据位置的对应关系,对于一个文件数据量多的集群来说,NameNode 的内存将成为集群规模扩大的瓶颈。因此,单一 NameNode 的集群并不可取。hadoop 2.x 的发行版引入了联邦 HDFS 允许向集群中添加 NameNode 节点实现横向扩展。每一个 NameNode 管理命名空间中的一部分,每个 NameNode 维护一个命名空间卷(namespace volume),命名空间卷之间相互独立,一个 NameNode 失效不会影响其他 NameNode 维护的命名空间。
  HDFS HA: 这个解决高可用,即 HDFS High Available。这一实现中配置了一对活动-备用(active-standby)NameNode。当活动的 NameNode 失效,备用 NameNode 会接管相应的任务,这一过程对用户透明。实现这一设计,需要在架构上做如下修改:
  1. HA 的两个 NameNode 之间通过高可用共享存储实现编辑日志的共享,目的是为了能够使备用 NameNode 接管工作后实现与主 NameNode 状态同步。QJM(日志管理器,quorum journal manager)是为提供一个高可用的日志编辑而设计的,被推荐用于大多数 HDFS 集群中。QJM 以一组日志节点的形式运行,一般是 3,每一次编辑必须写入多数日志节点,因此系统可以忍受任何一个节点丢失,日志节点便是 JournalNode。
  2. DataNode 需要同时向 2 个 NameNode 发送数据报告,因为数据块的映射信息存储在 NameNode 的内存中
  3. 客户端需要处理 NameNode 失效的问题,对用户透明

HDFS的基本操作

  命令行接口
  命令行接口操作 HDFS 是最简单、最方便的方式。HDFS 的命令与 linux 本地命令非常相似,可以通过 hadoop fs help 命令查看 HDFS 所支持所有命令,接下来介绍下常用的命令:

  hadoop fs -put <localsrc> <dst> #将本地文件上传至 HDFS;
  hadoop fs -ls <path> # 与 Linux ls命令类似;
  hadoop fs -cat <src> #查看 HDFS 文件数据;
  hadoop fs -text <path> # 同 cat 命令, 可以看 SequenceFile、压缩文件;
  hadoop fs -rm <src> # 删除 HDFS 文件或目录。

  以上是比较常用的 HDFS 命令,查看帮助文档可以在每个命令上增加一些命令行选项,输出不同的信息。以 ls 命令为例,看一下 HDFS 输出的文件信息。

  hadoop fs -ls /hadoop-ex/Wordcount/input
  -rw-r--r--   3 root supergroup         32 2019-03-03 01:34 /hadoop-ex/wordcount/input/words
  -rw-r--r--   3 root supergroup         28 2019-03-03 01:46 /hadoop-ex/wordcount/input/words2

  可以发现输出的内容与 Linux 下 ls 命令类似。第 1 部分显示文件类型与权限,第 2 部分是副本数量 3,第 3 、4部分是所属的用户和用户组,第 5 部分是文件大小,若是目录则为 0 ,第 6、7 部分是文件的修改日期和时间,第 8 部分是文件的路径和名称。 在 HDFS 中有个超级用户,即 启动 NameNode 的用户。
  Java 接口
  相对于命令行接口,Java接口更加灵活,更强大。但用起来不是很方便,一般可以在 MR 或者 spark 任务中使用 Java 接口读取 HDFS 上的数据。本章仅举一个读取 HDFS 文件数据的例子介绍一下 Java 接口的使用方式,主要使用 FileSystem api 来实现,更具体和更多的使用方法读者可以自行查阅。

package com.cnblogs.duma.hdfs;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;

import java.io.IOException;
import java.io.InputStream;
import java.net.URI;

public class FileSystemEx {
    public static void main(String[] args) throws IOException {
        Configuration conf = new Configuration();
        // uri 便是 core-site.xml 文件中 fs.defaultFS 配置的值
        FileSystem fs = FileSystem.get(URI.create("hdfs://hadoop0:9000"), conf);
        InputStream in = null;

        try {
            // 指定打开的文件
            in = fs.open(new Path("/hadoop-ex/wordcount/input/words"));
            // 将输入流拷贝到标准输出流
            IOUtils.copyBytes(in, System.out, 4096, false);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭输入流
            IOUtils.closeStream(in);
        }
    }
}

关于“HDFS分布式文件系统如何设计”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: HDFS分布式文件系统如何设计

本文链接: https://www.lsjlt.com/news/230552.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • HDFS分布式文件系统如何设计
    这篇文章将为大家详细讲解有关HDFS分布式文件系统如何设计,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。正文HDFS的设计以及概念  HDFS集群是典型的 master/slave 架构,master 节...
    99+
    2023-06-02
  • 分布式文件系统HDFS的示例分析
    小编给大家分享一下分布式文件系统HDFS的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 从RAID说起大数据技术主要要解决的问题的是大规模数据的计算处理问题,那么首先要解决的就是大规模数据的存储问题。大规模数据存...
    99+
    2023-06-19
  • Hadoop分布式文件系统HDFS架构分析
    本文小编为大家详细介绍“Hadoop分布式文件系统HDFS架构分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Hadoop分布式文件系统HDFS架构分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Hadoo...
    99+
    2023-06-27
  • 如何实现J2EE分布式系统框架设计
    今天就跟大家聊聊有关如何实现J2EE分布式系统框架设计,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一,导言框架设计(Framework Design)是系统设计的重要组成部分,一个...
    99+
    2023-06-03
  • Java中如何处理分布式文件系统?
    随着互联网的发展,越来越多的应用需要处理大量的文件数据,而传统的单机文件系统已经无法满足这种需求。因此,分布式文件系统应运而生。分布式文件系统是一种能够将数据存储在多台服务器上的文件系统,通过将数据分散到不同的服务器上,可以提高数据的可靠...
    99+
    2023-07-28
    文件 分布式 numpy
  • 如何使用Python实现分布式文件系统?
    分布式文件系统是一种可以将文件储存在多个节点上的文件系统,它可以提高文件系统的可靠性和可扩展性。Python是一种非常流行的编程语言,它可以用来实现分布式文件系统。在本文中,我们将介绍如何使用Python实现分布式文件系统,并提供一些演示代...
    99+
    2023-06-02
    并发 文件 分布式
  • Apache和Python:如何搭建分布式文件系统?
    随着数据量的不断增加,传统的单机文件系统已经无法满足我们的需求。为了解决这个问题,分布式文件系统应运而生。分布式文件系统通过将数据存储在多个节点上,并允许多个用户同时访问这些数据,实现了高可用性和可伸缩性。在本文中,我们将介绍如何使用Ap...
    99+
    2023-07-31
    apache 文件 分布式
  • Go语言编程中分布式文件系统的设计原则是什么?
    随着互联网的快速发展,越来越多的企业和个人开始关注分布式系统的设计与实现。而分布式文件系统作为分布式系统中重要的组成部分,其设计原则也越来越受到人们的关注。 Go语言作为一门现代的高性能编程语言,越来越多的人开始使用Go语言来实现分布式文...
    99+
    2023-08-02
    编程算法 文件 分布式
  • linux有什么分布式文件系统
    今天小编给大家分享一下linux有什么分布式文件系统的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
    99+
    2023-03-22
    linux
  • Linux文件分布式系统是什么
    这篇文章主要介绍“Linux文件分布式系统是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Linux文件分布式系统是什么”文章能帮助大家解决问题。Lustre(www.lustre.org)  ...
    99+
    2023-06-28
  • Unix系统如何实现分布式计算?
    在计算机科学领域中,分布式计算是一个重要的概念。它是指将一个计算任务分配给多台计算机处理,从而提高计算效率和处理能力。而Unix系统,作为一个开源的操作系统,也提供了一些方法来实现分布式计算。 一、使用SSH进行分布式计算 SSH(Sec...
    99+
    2023-09-10
    unix 分布式 javascript
  • Django如何优化分布式文件系统的性能?
    随着互联网技术的不断发展,分布式文件系统被越来越多的企业采用。然而,分布式文件系统的性能问题一直是困扰开发人员的难题。本文将介绍如何通过Django优化分布式文件系统的性能。 一、使用缓存 缓存是提高分布式文件系统性能的有效手段之一。Dj...
    99+
    2023-09-29
    分布式 文件 django
  • 如何在分布式文件系统中使用Java和Numpy进行矩阵计算?
    分布式文件系统(Distributed File System,DFS)是一种将文件存储在多个计算机节点上的文件系统。在分布式系统中,矩阵计算是一个非常常见的任务。本文将介绍如何使用Java和Numpy在分布式文件系统中进行矩阵计算。 一、...
    99+
    2023-07-28
    文件 分布式 numpy
  • 怎样从Elasticsearch来看分布式系统架构设计
    本篇文章给大家分享的是有关怎样从Elasticsearch来看分布式系统架构设计,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。分布式系统类型多,涉及面非常广,不同类型的系统有不...
    99+
    2023-06-05
  • 数据库分布式系统设计策略是什么
    这篇文章主要讲解了“数据库分布式系统设计策略是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“数据库分布式系统设计策略是什么”吧!一:分布式系统设计策略分布式系统本质是通过低廉的硬件攒在一...
    99+
    2023-06-19
  • 分布式文件系统mogilefs的简单应用
    简介MogileFS是一个开源的分布式文件存储系统,由LiveJournal旗下的DangaInteractive公司开发。Danga团队开发了包括Memcached、MogileFS、Perlbal等多个...
    99+
    2022-10-18
  • 分布式与服务化的ERP系统架构设计分析
    本篇内容主要讲解“分布式与服务化的ERP系统架构设计分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“分布式与服务化的ERP系统架构设计分析”吧!ERP之痛曾几何时,我混迹于电商、珠宝行业4年多...
    99+
    2023-06-02
  • 如何使用Go编写高效的分布式文件系统?
    分布式文件系统是当今互联网时代必备的一种技术,它能够帮助我们在多个服务器上存储和管理大量数据,提高数据的可靠性和可用性。而Go语言作为一种高效且具有并发特性的编程语言,也成为了分布式文件系统开发的首选语言。下面,我们将介绍如何使用Go编写高...
    99+
    2023-08-02
    编程算法 文件 分布式
  • 分布式文件系统如何提高数据处理效率?
    随着数据量的不断增加,传统的文件系统已经无法满足大数据处理的需求。分布式文件系统的出现,为大规模数据处理提供了更好的解决方案。那么,分布式文件系统是如何提高数据处理效率的呢? 一、数据分布式存储 传统的文件系统将数据存储在单个节点上,当数...
    99+
    2023-06-02
    并发 文件 分布式
  • PHP分布式异步编程:如何在Linux系统中实现分布式计算?
    PHP是一种流行的服务器端编程语言,广泛应用于Web开发。但是,PHP也可以用于分布式计算,通过将计算任务分配给多台计算机来加速计算。本文将介绍如何在Linux系统中使用PHP进行分布式异步编程。 一、什么是分布式计算? 分布式计算是一种...
    99+
    2023-11-07
    分布式 异步编程 linux
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作