【HDFS联邦(1)】ViewFs与联邦理论知识详解

文章目录

  • 一.ViewFs介绍
  • 二. 联邦之前的旧世界
    • 1. 单个 namenode集群
    • 2. 路径使用逻辑
  • 三. 新世界 – 联邦与ViewFs
    • 1. How The Clusters Look
    • 2. 使用 ViewFs 为每个集群创建全局的Namespace
    • 2. 路径使用逻辑
    • 3. 路径使用最佳实践(ing)

本文主要想讨论

HDFS ViewFs的(1)定义 与无联邦时的区别、(2)管理多集群的逻辑、(3)具体怎么使用ViewFs:比如跨集群任务、文件跨集群传输等。

一.ViewFs介绍

The View File System (ViewFs)提供了一种管理多个hadoop namespaces的方式,即集群中有多个namenode,也就是hdfs的联邦集群时特别有用。ViewFs类似于某些Unix/Linux系统中的客户端挂载表。ViewFs可创建个性化的名称空间视图和每个集群的公共视图。

Namespace(命名空间):命名空间是指 HDFS 中用于组织和管理文件和目录的层次结构。
NameNode :负责管理文件系统的命名空间和控制文件的访问。

本文描述了hadoop系统有多个集群的内容,即每个集群可以联合到多namespaces中。
同时描述了如何在HDFS联邦集群中使用ViewFs来提供每一个集群的namespace,以便任务或应用在联邦集群中访问单个hdfs集群,称为pre-federation world。

 

二. 联邦之前的旧世界

1. 单个 namenode集群

HDFS Federation出现之前,一个集群中只有一个namenode,提供了单个namespace。
假设有多个集群。每个集群的文件系统名称空间完全独立,互不连接,并且物理存储不能跨集群共享(即datanode不能跨集群共享)。

core-site.xml 中,配置每个集群中的namenode

<property><name>fs.default.name</name><value>hdfs://namenodeOfClusterX:port</value>
</property>

此配置实现了:通过相对名称便能访问集群中的路径。例如,路径/foo/bar引用的是hdfs://namendeofcluster:port/foo/bar。

 

2. 路径使用逻辑

配置了fs.default.name 之后,可以通过以下方式访问路径:

  1. /foo/bar
    hdfs://namenodeOfClusterX:port/foo/bar 格式的路径,访问路径效果相同
  2. hdfs://namenodeOfClusterX:port/foo/bar
    有效的路径名,不过推荐使用/foo/bar,因为允许跨集群输出。
  3. hdfs://namenodeOfClusterY:port/foo/bar
    集群Y的有效路径。如下命令,实现从集群Y到集群Z的跨集群数据传输
    distcp hdfs://namenodeClusterY:port/pathSrc hdfs://namenodeClusterZ:port/pathDest
  4. webhdfs://namenodeClusterX:http_port/foo/bar
    通过webhdfs文件系统访问数据的URI。注意:使用namenode的HTTP端口,而不是RPC端口访问数据。
  5. http://namenodeClusterX:http_port/webhdfs/v1/foo/bar and http://proxyClusterX:http_port/foo/bar
    通过 WebHDFS REST API 和 HDFS 代理访问文件的 HTTP URL。

 
 

三. 新世界 – 联邦与ViewFs

1. How The Clusters Look

场景假设

假设有多个集群。每个集群有一个或多个namenodes。每个namenode都有自己的namespace。一个namenode只能属于一个集群,同一集群中的namenode共享该集群的物理存储。集群间的namespace和以前一样是独立的。

根据存储需求可以在集群中不同的namenode存储数据。例如,

  1. 将所有用户数据(/user/< username >)放在一个namenode中;
  2. 将所有feed数据(/data)放在另一个namenode中;
  3. 将所有项目(/projects)放在另一个namenode中。

 

2. 使用 ViewFs 为每个集群创建全局的Namespace

为了不影响旧世界,ViewFs file system 为每个集群创建了一个独立的namespace view,即旧世界的namespace。可以使用旧世界的命名约定,挂载新的namespace volumes。

如下图:以“/user”、“/data”、“/projects”和“/tmp”四个namespace volumes为例,挂载表如图所示。
在这里插入图片描述

挂载表的设置

在每个集群的配置中,fs.defaultFS设置为集群的挂载表(ing)。

<property><name>fs.defaultFS</name><value>viewfs://clusterX</value>
</property>

viewfs:// 后面跟挂载表名,推荐使用集群名称来命名挂载表,比如clusterX。所有的网关和服务机器都会包含集群中所有的挂载表,这样每个集群拿到的都是自己的 default file systemfs.defaultFS

 

挂载点的设置

  1. 挂载表的挂载点在hadoop配置文件中配置,挂载点的配置入口以fs.viewfs.mounttable 为前缀。挂载点通过使用link tags来连接其他文件系统。

  2. 建议将文件系统中链接的目标位置来命名挂载点。

  3. 对于有些namespace没有配置到挂载表中,通过linkFallback可以获取没在挂载表中的namespaces。

例子:

在下面的挂载表配置中,

  • /data命名空间链接到文件系统hdfs://nn1-clusterx.example.com:8020/data,
  • /project链接到文件系统hdfs://nn2-clusterx.example.com:8020/project。
  • 所有未在挂载表中配置的命名空间,如/logs,都链接到文件系统hdfs://nn5clusterx.example.com:8020/home。
<configuration><property><name>fs.viewfs.mounttable.ClusterX.link./data</name><value>hdfs://nn1-clusterx.example.com:8020/data</value></property><property><name>fs.viewfs.mounttable.ClusterX.link./project</name><value>hdfs://nn2-clusterx.example.com:8020/project</value></property><property><name>fs.viewfs.mounttable.ClusterX.link./user</name><value>hdfs://nn3-clusterx.example.com:8020/user</value></property><property><name>fs.viewfs.mounttable.ClusterX.link./tmp</name><value>hdfs://nn4-clusterx.example.com:8020/tmp</value></property><property><name>fs.viewfs.mounttable.ClusterX.linkFallback</name><value>hdfs://nn5-clusterx.example.com:8020/home</value></property>
</configuration>
  1. 我们还可以使用linkMergeSlash,将一个挂载表的root filesystem 与另外一个文件系统的root filesystem 合并到一起,如下:将ClusterY’s的根与 hdfs://nn1-clustery.example.com:8020.root filesystem 合并到一起。
<configuration><property><name>fs.viewfs.mounttable.ClusterY.linkMergeSlash</name><value>hdfs://nn1-clustery.example.com:8020/</value></property>
</configuration>

 

2. 路径使用逻辑

因此对于集群X,core-site.xml 设置的default fs 作为集群的挂载表,典型的路径如下:

  1. /foo/bar
    路径等同于:viewfs://clusterX/foo/bar. 。如果这样的路径/foo/bar用于无联邦的环境下,它将会转换为联邦环境。
  2. viewfs://clusterX/foo/bar
    是一个有效的路径名称,推荐使用/foo/bar,因为允许传输数据时到另外一个集群。
  3. viewfs://clusterY/foo/bar
    Cluster Y的路径URI。特别的跨集群传输文件时,使用如下命令:
    distcp viewfs://clusterY/pathSrc viewfs://clusterZ/pathDest
  4. viewfs://clusterX-webhdfs/foo/bar
    WebHDFS file system的路径URI
  5. http://namenodeClusterX:http_port/webhdfs/v1/foo/bar and http://proxyClusterX:http_port/foo/bar
    与之前相同:通过 WebHDFS REST API 和 HDFS 代理访问文件的 HTTP URL。

 

3. 路径使用最佳实践(ing)

当位于集群内时,建议使用上面类型 (1) 的路径名,而不是像 (2) 这样的完全限定 URI。此外,应用程序不应使用挂载点的知识,也不应使用 hdfs://namenodeContainingUserDirs:port/joe/foo/bar 之类的路径来引用特定名称节点中的文件。应该使用 /user/joe/foo/bar 来代替。

 
 
 
参考:【hadoop】ViewFs Guide

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/295130.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3. 结构型模式 - 组合模式

亦称&#xff1a; 对象树、Object Tree、Composite 意图 组合模式是一种结构型设计模式&#xff0c; 你可以使用它将对象组合成树状结构&#xff0c; 并且能像使用独立对象一样使用它们 问题 如果应用的核心模型能用树状结构表示&#xff0c; 在应用中使用组合模式才有价值。 …

C++ Qt开发:Charts折线图绘制详解

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍QCharts折线图的常用方法及灵活运用。 折线图…

医学实验室检验科LIS信息系统源码

实验室信息管理是专为医院检验科设计的一套实验室信息管理系统&#xff0c;能将实验仪器与计算机组成网络&#xff0c;使病人样品登录、实验数据存取、报告审核、打印分发&#xff0c;实验数据统计分析等繁杂的操作过程实现了智能化、自动化和规范化管理。 实验室管理系统功能介…

12.18构建哈夫曼树(优先队列),图的存储方式,一些细节(auto,pair用法,结构体指针)

为结构体自身时&#xff0c;用.调用成员变量&#xff1b;为结构体指针时&#xff0c;用->调用成员变量 所以存在结构体数组时&#xff0c;调用数组元素里的成员变量&#xff0c;就是要用. 结构体自身只有在new时才会创建出来&#xff0c;而其指针可以随意创建 在用new时&…

【3D生成与重建】SSDNeRF:单阶段Diffusion NeRF的三维生成和重建

系列文章目录 题目&#xff1a;Single-Stage Diffusion NeRF: A Unified Approach to 3D Generation and Reconstruction 论文&#xff1a;https://arxiv.org/pdf/2304.06714.pdf 任务&#xff1a;无条件3D生成&#xff08;如从噪音中&#xff0c;生成不同的车等&#xff09;、…

Proxmox VE 超融合集群不停服务新增配置(磁盘)

五个节点的Proxmox VE超融合集群&#xff0c;创建了两个Ceph Pool,一个是高速的Nvme存储池&#xff0c;另一个是大容量SATA存储池。现在需要将原有的SATA磁盘全部拔出来&#xff0c;换成高速Nvme磁盘。 ​ ​ 首先&#xff0c;先销毁由SATA机械盘组成的“hdd_pool”&#xff…

本地使用 docker 运行OpenSearch + Dashboard + IK 分词插件

准备基础镜像 注意一定要拉取和当前 IK 分词插件版本一致的 OpenSearch 镜像: https://github.com/aparo/opensearch-analysis-ik/releases 写这篇文章的时候 IK 最新版本 2.11.0, 而 dockerhub 上 OpenSearch 最新版是 2.11.1 如果版本不匹配的话是不能用的, 小版本号对不上…

探索栈数据结构:深入了解其实用与实现(c语言实现栈)

上次结束了链表部分的内容&#xff1a;链接未来&#xff1a;深入理解链表数据结构&#xff08;二.c语言实现带头双向循环链表&#xff09; 然而&#xff0c;当我们涉及特定问题时&#xff0c;另一个非常有用的数据结构也开始显得至关重要——栈 栈与链表有着截然不同的特性&a…

用友U8CRM系统help2 任意文件读取漏洞复现

用友U8CRM系统的help2文件中接口存在任意文件读取漏洞&#xff0c;攻击者在未登录情况下即可进行漏洞利用。 1.1 漏洞级别 高危 1.2 快速检索 fofa语法&#xff1a; title"用友U8CRM"1.3 漏洞复现 该漏洞利用非常简单&#xff0c;只需构造get请求 访问该地址即可…

STL中优先队列的模拟实现与仿函数的介绍

文章目录 仿函数优先队列的模拟实现 仿函数 上回我们说到&#xff0c;优先队列的实现需要用到仿函数的特性 让我们再回到这里 这里我们发现他传入的用于比较的东西竟然是一个类模板&#xff0c;而不是我们所见到的函数 我们可以先创建一个类&#xff0c;用于比较大小 struc…

使用Velero备份、恢复k8s集群上的资源

一、Velero简介 Velero提供备份和恢复 Kubernetes 集群资源和持久卷的工具。 Velero功能&#xff1a; 对群集进行备份&#xff0c;并在丢失时进行还原。将集群资源迁移到其他集群。 Velero 包括&#xff1a; 在群集上运行的服务器在本地运行的命令行客户端 开源地址&…

【MySQL】MySQL的数据类型

MySQL的数据类型 一、数据类型分类二、数值类型1、整数类型2、bit类型3、小数类型 三、字符串类型四、时间日期类型五、enum和set类型enum和set查找 数据类型的作用&#xff1a; 决定了存储数据时应该开辟的空间大小和数据的取值范围。决定了如何识别一个特定的二进制序列。 …