Hadoop 文档

General

Common

HDFS

MapReduce

MapReduce REST APIs

YARN

YARN REST APIs

YARN Service

Submarine

Hadoop Compatible File Systems

Auth

Tools

Reference

Configuration

提供的存储允许将HDFS外部存储的数据映射到HDFS并从中寻址。它通过将新的存储类型PROVIDED引入数据节点中的媒体集,从而在异构存储基础上构建。访问PROVIDED存储中的数据的客户端可以在本地媒体中缓存副本,强制执行HDFS不变式(例如,安全性,配额),并且可以处理比群集在连接到DataNodes的存储中持久的数据更多的数据。该架构在HDFS集群是短暂的场景(例如,云场景)和/或需要读取其他存储系统中存储的数据(例如,blob存储)的场景中特别有用。

提供的存储是HDFS中的一项实验功能。

介绍

在撰写本文时,支持将外部存储安装为PROVIDED块仅限于创建实现org.apache.hadoop.fs.FileSystem接口的远程名称空间的只读映像,并启动NameNode服务该映像。具体来说,支持从远程名称空间的快照读取。在此版本中不提供将远程名称空间添加到现有/正在运行的名称节点,刷新远程快照,卸载和写入的功能。可以使用ViewFRBF将带有PROVIDED存储的名称空间集成到现有部署中。

使用提供的存储创建HDFS群集

可以使用fs2img工具创建远程名称空间的快照。给远程的路径文件系统,该工具创建一个图像镜像命名空间和一个别名地图映射所生成的图像中块标识为FileRegion在远程文件系统。甲FileRegion包含足够的信息,以解决在远程固定字节序列文件系统(例如,文件,偏移,长度)和随机数验证区域是不变的,因为被产生的图像。

创建NameNode映像和别名映射之后,必须将NameNode和DataNodes配置为一致地引用此地址空间。当DataNode向附加的PROVIDED存储注册时,NameNode认为所有外部块都可以通过该DataNode寻址,并且可以开始将客户端定向到该外部节点。对称地,DataNode必须能够将PROVIDED存储中的每个块映射到远程数据。

部署详细信息取决于配置的别名映射实现。

提供的配置

每个NameNode支持一个别名映射。当提供的是使能的存储,关于NameNode和的DataNodes配置的存储ID必须匹配。所有其他详细信息都在别名映射实现的内部。

启用PROVIDED存储的配置如下。别名映射实现可用的配置选项如下。

<配置>

  <属性>
    <name> dfs.namenode.provided.enabled </ name>
    <value> true </ value>
    <description>启用了Namenode上提供的存储</ description>
  </ property>

  <属性>
     <name> dfs.datanode.data.dir </ name>
     <value> [DISK] / local / path / to / blocks /,[已提供] remoteFS:// remoteFS-authority / path / to / data / </ value>
  </ property>

  <属性>
      <name> dfs.provided.storage.id </ name>
      <value> DS提供的</ value>
      <description>用于集群中提供的存储的存储ID。</ description>
  </ property>

  <属性>
    <name> dfs.provided.aliasmap.class </ name>
    <value> org.apache.hadoop.hdfs.server.common.blockaliasmap.impl.TextFileRegionAliasMap </ value>
  </ property>

</ configuration>

fs2img工具

fs2img工具“走出去”通过远程命名空间通过远程URI的递归枚举孩子产生的FsImage。某些属性可以由插件控制,例如从远程文件系统到HDFS的所有者/组映射以及文件到HDFS块的映射。

运行该工具可用的各种选项包括:

选项 属性 默认 描述
-o,-- outdir dfs.namenode.name.dir 文件:// $ {hadoop.tmp.dir} / dfs / name 输出目录
-b,-- blockclass dfs.provided.aliasmap.class 空块图 块输出类
-u,-- ugiclass hdfs.image.writer.ugi.class SingleUGIResolver UGI解析器类
-i,-- blockidclass hdfs.image.writer.blockresolver.class FixedBlockResolver 块解析器类
-c,-- cachedirs hdfs.image.writer.cache.entries 100 最大活动差额
-cid,-- clusterID 集群ID
-bpid,-- blockPoolID 块池ID

例子

将所有文件分配给“ rmarathe”所有,并写入gzip压缩文本:

hadoop org.apache.hadoop.hdfs.server.namenode.FileSystemImage \
  -Dhdfs.image.writer.ugi.single.user = rmarathe \
  -Ddfs.provided.aliasmap.text.codec = gzip \
  -Ddfs.provided.aliasmap.text.write.dir = file:/// tmp /
  -b org.apache.hadoop.hdfs.server.common.blockaliasmap.impl.TextFileRegionAliasMap \
  -u org.apache.hadoop.hdfs.server.namenode.SingleUGIResolver \
  -o file:/// tmp / name \
  hdfs:// afreast / projects / ydau / onan

根据LevelDB中的自定义UGIResolver分配所有权:

hadoop org.apache.hadoop.hdfs.server.namenode.FileSystemImage \
  -Ddfs.provided.aliasmap.leveldb.path = / path / to / leveldb / map / dingos.db \
  -b org.apache.hadoop.hdfs.server.common.blockaliasmap.impl.LevelDBFileRegionAliasMap \
  -o file:/// tmp / name \
  -u CustomResolver \
  hdfs:// enfield / projects / ywqmd / incandenza

别名地图实现

使用dfs.provided.aliasmap.class参数配置要使用的别名映射实现。当前,支持以下两种类型的别名映射。

InMemoryAliasMap

这是一个基于LevelDB的别名映射,在Namenode中作为单独的服务器运行。别名映射本身可以使用fs2img工具使用-Ddfs.provided.aliasmap.leveldb.path = file:///path/to/leveldb/map/dingos.db -b org.apache.hadoop.hdfs创建像上面的示例中那样.server.common.blockaliasmap.impl.LevelDBFileRegionAliasMap

数据节点使用org.apache.hadoop.hdfs.server.aliasmap.InMemoryAliasMapProtocol协议联系此别名映射。

组态

<配置>
  <属性>
    <name> dfs.provided.aliasmap.inmemory.batch-size </ name>
    <value> 500 </ value>
    <说明>
      遍历支持别名映射的数据库时的批处理大小
    </ description>
  </ property>

  <属性>
    <名称> dfs.provided.aliasmap.inmemory.dnrpc地址</名称>
    <value> namenode:rpc-port </ value>
    <说明>
      Aliasmap服务器将要运行的地址
    </ description>
  </ property>

  <属性>
    <名称> dfs.provided.aliasmap.inmemory.leveldb.dir </名称>
    <value> /path/to/leveldb/map/dingos.db </ value>
    <说明>
      将保留leveldb文件的目录
    </ description>
  </ property>

  <属性>
    <name> dfs.provided.aliasmap.inmemory.enabled </ name>
    <value> true </ value>
    <description>在NameNode上启用内存别名映射。默认为false。</ description>
  </ property>

  <属性>
    <name> dfs.provided.aliasmap.class </ name>
    <value> org.apache.hadoop.hdfs.server.common.blockaliasmap.impl.InMemoryLevelDBAliasMapClient </ value>
  </ property>
</ configuration>

TextFileRegionAliasMap

此别名映射实现在一个分隔的文本文件中存储从blockIDFileRegion的映射。此格式对于测试环境(尤其是单节点)很有用。

组态

<配置>
  <属性>
    <name> dfs.provided.aliasmap.text.delimiter </ name>
    <value>,</ value>
    <说明>
        将别名映射指定为时使用的定界符
        文本文件。
    </ description>
  </ property>

  <属性>
    <name> dfs.provided.aliasmap.text.read.file </ name>
    <value> file:///path/to/aliasmap/blocks_blocPoolID.csv </ value>
    <说明>
        将别名映射指定为文本文件的路径,
        指定为URI。
    </ description>
  </ property>

  <属性>
    <name> dfs.provided.aliasmap.text.codec </ name>
    <value> </ value>
    <说明>
        用于解压缩别名映射的编解码器。默认值为空。
    </ description>
  </ property>

  <属性>
    <name> dfs.provided.aliasmap.text.write.dir </ name>
    <value>文件:/// path / to / aliasmap / </ value>
    <说明>
        别名映射应以文本形式写入的路径
        文件,指定为URI。
    </ description>
  </ property>
</ configuration>