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

news2025/4/16 13:19:12

文章目录

  • 一.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.coloradmin.cn/o/1330864.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于JSP+Servlet+Mysql的调查管理系统

基于JSPServletMysql的调查管理系统 一、系统介绍二、功能展示1.项目内容2.项目骨架3.数据库3.登录4.注册3.首页5.系统管理 四、其它1.其他系统实现五.获取源码 一、系统介绍 项目名称&#xff1a;基于JSPServlet的调查管理系统 项目架构&#xff1a;B/S架构 开发语言&#…

MT3608 高效率1.2MHz2A升压转换器和MT3608L 高效率1.2MHz 2.5A升压转换器 MT3608L和MT3608的区别

MT3608是一个恒定的频率&#xff0c;6引脚SOT23电流模式升压转换器的小&#xff0c;低功耗应用的目的。该MT3608开关在1.2MHz&#xff0c;并允许微小的&#xff0c;低成本的电容器和电感器使用2毫米或更小的高度内部软启动浪涌电流的结果&#xff0c;并延长电池寿命。 …

Jenkins拉去Gitlab代码ssh方式凭证及私钥凭证

Jenkins要从Gitlab拉去代码&#xff0c;则需要在Jenkins配置凭证&#xff0c;同时在配置私钥 Jenkins->凭证->系统->全局凭证->添加凭证 同上图路径进入全局凭证配置页面 点击全局 再点左侧的添加凭证 选择"Username with password"&#xff0c;输入…

w15初识php基础

一、计算100之内的偶数之和 实现思路 所有的偶数除2都为0 代码实现 <?php # 记录100以内的偶数和 $number1; $num0; while($number<100){if($number%20){ $num$number;}$number1; } echo $num; ?>输出的结果 二、计算100之内的奇数之和 实现思路 所有的奇数除…

dubbo线程池为什么耗尽

文章概述 大家可能都遇到过DUBBO线程池打满这个问题&#xff0c;报错如下&#xff0c;本文我们就一起分析DUBBO线程池打满这个问题。 cause: org.apache.dubbo.remoting.RemotingException: Server side(10.0.0.100,20881) thread pool is exhausted, detail msg:Thread pool …

IDEA的facets和artifacts

在软件开发领域&#xff0c;IDEA 是指 JetBrains 公司的 IntelliJ IDEA&#xff0c;是一款流行的集成开发环境&#xff08;Integrated Development Environment&#xff09;。在 IntelliJ IDEA 中&#xff0c;"facets" 和 "artifacts" 是两个概念&#xff…

【学习代码】PyTorch代码 练习

文章目录 AttentionSEAttention【显式地建模特征通道之间的相互依赖关系】【easy】CBAM Attention【SEAttention通道注意力 空间注意力】【middle】SelfAttention【重点&#xff1a;理解意义 and 实践&#xff01;】【hard】 Attention SEAttention【显式地建模特征通道之间的…

找到字符串中所有字母异位词--滑动窗口

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 本体题目链接https://leetcode.cn/problems/VabMRr/description/ 算法原理 滑动窗口其实就是种双指针&#xff0c;只是这种双指针只向后移动&#xff0c;不会回退&#xff0c;具有单调性&#xff0c;也就是说&#xff0c;…

C语言的分支和循环语句

各位少年&#xff0c;今天和大家分享的是分支语句循环体语句&#xff0c;C语言是结构体的程序设计语言&#xff0c;这里的结构指的是&#xff08;顺序结构&#xff09;&#xff08;选择结构&#xff09;&#xff08;循环结构&#xff09;C语言是能够实现这三种结构的&#xff0…

了解树和学习二叉树

1.树 1.1 概念 树是一种 非线性 的数据结构&#xff0c;它是由 n &#xff08; n>0 &#xff09;个有限结点组成一个具有层次关系的集合。 把它叫做树是因为它看 起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的 。 注意&#xff1a;树形结构中…

html网页编写语言

html是一门语言&#xff0c;所有的网页都是用html这门语言编写出来的。 HTML&#xff08;HyperText Markup Language&#xff09;&#xff1a;超文本标记语言。 超文本&#xff1a;超越了文本的限制&#xff0c;比普通文本更强大。除了文字信息&#xff0c;还可以定义图片&…

产品原型设计软件 Axure RP 9 mac支持多人写作设计

axure rp 9 mac是一款产品原型设计软件&#xff0c;它可以让你在上面任意构建草图、框线图、流程图以及产品模型&#xff0c;还能够注释一些重要地方&#xff0c;axure rp汉化版可支持同时多人写作设计和版本管理控制&#xff0c;这款交互式原型设计工具可以帮助设计者制作出高…

【YOLOV8预测篇】使用Ultralytics YOLO进行检测、分割、姿态估计和分类实践

目录 一 安装Ultralytics 二 使用预训练的YOLOv8n检测模型 三 使用预训练的YOLOv8n-seg分割模型 四 使用预训练的YOLOv8n-pose姿态模型 五 使用预训练的YOLOv8n-cls分类模型 <

linux运维的面试题一

1.linux启动过程 1加电 2加载主板bios设置 3加载多重操作系统启动管理器grub 4加载内核系统到内存当中 5加载配置文件 6加载内核模块 7完成相应的初始化工作和启动相应的服务 8启动系统进程 9出现登录界面 10开机启动完成 2.安装过操作系统吗&#xff1f;怎么安装? 1.小批量设…

波奇学Linux:进程替换

单进程替换 excel使得能够在文件中运行系统指令 int excel (系统文件地址&#xff0c;系统指令&#xff0c;指令参数&#xff0c;NULL)&#xff1b; 成功时无返回值&#xff0c;失败时返回-1 如图进程成功运行第一个printf后再运行指令&#xff0c;但没有输出第二个printf的内容…

Jenkins 插件管理指南

目录 常用插件 插件安装 已安装插件 installed plugins 常用插件 Docker Plugin&#xff1a; 这个插件让Jenkins能够与Docker容器平台进行集成。它允许在Jenkins构建过程中创建、管理和销毁Docker容器&#xff0c;为需要Docker化的项目提供了极大的便利性。对于需要在容器中…

Leetcode—1491.去掉最低工资和最高工资后的工资平均值【简单】

2023每日刷题&#xff08;六十八&#xff09; Leetcode—1491.去掉最低工资和最高工资后的工资平均值 实现代码 class Solution { public:double average(vector<int>& salary) {double sum 0;int n salary.size();sort(salary.begin(), salary.end());for(int i…

全部没有问题(三)

C语言 吞空格 一共三种办法&#xff1a; fflush(stdin), while(getchar()!\n), scanf("%*c") p.s visual studio已经移除gets函数了&#xff0c;要换编译器/函数&#xff0c;visual C可以的 #include <stdio.h>int main() {char x[100], y[100], z[100];i…

贪吃蛇(十)贪吃蛇吃食物

上节讲到限制蛇身回头&#xff0c;本节要实现吃食物功能 实现思路 在存储上食物方面可以复用蛇的结构体。初始化食物的时候&#xff0c;我们设置食物的坐标&#xff0c;每次调用这个函数的时候&#xff0c;坐标发生一些规律的变化。另外我们需要扫描食物的函数&#xff0c;这…

数据大模型与低代码开发:赋能技术创新的黄金组合

在当今技术领域&#xff0c;数据大模型和低代码开发已经成为两个重要的趋势。数据大模型借助庞大的数据集和强大的计算能力&#xff0c;助力我们从海量数据中挖掘出有价值的洞见和预测能力。与此同时&#xff0c;低代码开发通过简化开发流程和降低编码需求&#xff0c;使得更多…