Hadoop3.2.0 HDFS 快照

HDFS快照

  • 概观
    <ul><li><span style="color:#000000;"><a href="#Snapshottable_Directories" rel="nofollow" target="_self">Snapshottable目录</a></span></li>
    	<li><span style="color:#000000;"><a href="#Snapshot_Paths" rel="nofollow" target="_self">快照路径</a></span></li>
    </ul></li>
    <li><span style="color:#000000;"><a href="#Upgrading_to_a_version_of_HDFS_with_snapshots" rel="nofollow" target="_self">使用快照升级到HDFS版本</a></span></li>
    <li><span style="color:#000000;"><a href="#Snapshot_Operations" rel="nofollow" target="_self">快照操作</a></span>
    <ul><li><span style="color:#000000;"><a href="#Administrator_Operations" rel="nofollow" target="_self">管理员操作</a></span>
    	<ul><li><span style="color:#000000;"><a href="#Allow_Snapshots" rel="nofollow" target="_self">允许快照</a></span></li>
    		<li><span style="color:#000000;"><a href="#Disallow_Snapshots" rel="nofollow" target="_self">禁止快照</a></span></li>
    	</ul></li>
    	<li><span style="color:#000000;"><a href="#User_Operations" rel="nofollow" target="_self">用户操作</a></span>
    	<ul><li><span style="color:#000000;"><a href="#Create_Snapshots" rel="nofollow" target="_self">创建快照</a></span></li>
    		<li><span style="color:#000000;"><a href="#Delete_Snapshots" rel="nofollow" target="_self">删除快照</a></span></li>
    		<li><span style="color:#000000;"><a href="#Rename_Snapshots" rel="nofollow" target="_self">重命名快照</a></span></li>
    		<li><span style="color:#000000;"><a href="#Get_Snapshottable_Directory_Listing" rel="nofollow" target="_self">获取Snapshottable目录列表</a></span></li>
    		<li><span style="color:#000000;"><a href="#Get_Snapshots_Difference_Report" rel="nofollow" target="_self">获取快照差异报告</a></span></li>
    	</ul></li>
    </ul></li>
    

概观

HDFS快照是文件系统的只读时间点副本。可以在文件系统的子树或整个文件系统上拍摄快照。快照的一些常见用例是数据备份,防止用户错误和灾难恢复。

HDFS快照的实施非常有效:

  • 快照创建是即时的:成本是O(1),不包括inode查找时间。

  • 仅当相对于快照进行修改时才使用附加内存:内存使用量为O(M),其中M是已修改文件/目录的数量。

  • 不复制datanode中的块:快照文件记录块列表和文件大小。没有数据复制。

  • 快照不会对常规HDFS操作产生负面影响:以反向时间顺序记录修改,以便可以直接访问当前数据。通过从当前数据中减去修改来计算快照数据。

Snapshottable目录

一旦将目录设置为snapshottable,就可以在任何目录上拍摄快照。快照目录可以容纳65,536个同步快照。快照目录的数量没有限制。管理员可以将任何目录设置为快照。如果快照目录中有快照,则在删除所有快照之前,既不能删除也不能重命名目录。

目前不允许嵌套的快照目录。换句话说,如果其祖先/后代之一是快照目录,则无法将目录设置为snapshottable。

快照路径

对于快照目录,路径组件“.snapshot”用于访问其快照。假设  /foo 是一个snapshottable目录  /foo/bar   是在一个文件/directory/foo,和  /foo 具有快照S0。然后,路径/foo/.snapshot/s0/bar引用/ foo / bar的快照副本。通常的API和CLI可以使用“.snapshot”路径。以下是一些例子。

  • 列出快照目录下的所有快照:

    <pre class="has" style="margin-left:7px;" name="code"><code class="language-source">hdfs dfs -ls /foo/.snapshot</code></pre>
    </li>
    <li>
    <p><span style="color:#000000;"><span style="color:#000000;">列出快照s0中的文件:</span></span></p>
    
    <pre class="has" style="margin-left:7px;" name="code"><code class="language-source">hdfs dfs -ls /foo/.snapshot/s0</code></pre>
    </li>
    <li>
    <p><span style="color:#000000;"><span style="color:#000000;">从快照s0复制文件:</span></span></p>
    
    <pre class="has" style="margin-left:7px;" name="code"><code class="language-source">hdfs dfs -cp -ptopax /foo/.snapshot/s0/bar /tmp</code></pre>
    
    <p><span style="color:#000000;"><span style="color:#000000;">请注意,此示例使用preserve选项来保留时间戳,所有权,权限,ACL和XAttrs。</span></span></p>
    </li>
    

使用快照升级到HDFS版本

HDFS快照功能引入了用于与快照交互的新保留路径名:.snapshot。从不支持快照的旧版HDFS升级时,需要首先重命名或删除名为.snapshot的现有路径,以避免与保留路径冲突。有关详细信息,请参阅HDFS用户指南中的升级部分。

快照操作

管理员操作

本节中描述的操作需要超级用户权限。

允许快照

允许创建目录的快照。如果操作成功完成,则该目录将变为快照。

  • 命令:

    <pre class="has" style="margin-left:7px;" name="code"><code class="language-source">hdfs dfsadmin -allowSnapshot &lt;path&gt;</code></pre>
    </li>
    <li>
    <p><span style="color:#000000;"><span style="color:#000000;">参数:</span></span></p>
    
    <div class="table-box"><table style="margin-left:-2px;"><tbody><tr><td>path</td>
    			<td style="vertical-align:top;"><span style="color:#000000;"><span style="color:#333333;">快照目录的路径。</span></span></td>
    		</tr></tbody></table></div></li>
    

另请参见相应的Java API 无效allowSnapshot(路径路径)在HdfsAdmin。

禁止快照

不允许创建目录的快照。在禁止快照之前,必须删除目录的所有快照。

  • 命令:

    <pre class="has" style="margin-left:7px;" name="code"><code class="language-source">hdfs dfsadmin -disallowSnapshot &lt;path&gt;</code></pre>
    </li>
    <li>
    <p><span style="color:#000000;"><span style="color:#000000;">参数:</span></span></p>
    
    <div class="table-box"><table style="margin-left:-2px;"><tbody><tr><td style="vertical-align:top;"><span style="color:#000000;"><span style="color:#333333;">path</span></span></td>
    			<td style="vertical-align:top;"><span style="color:#000000;"><span style="color:#333333;">快照目录的路径。</span></span></td>
    		</tr></tbody></table></div></li>
    

另请参见相应的Java API 无效disallowSnapshot(路径路径)在HdfsAdmin。

用户操作

该部分描述了用户操作。请注意,HDFS超级用户可以执行所有操作,而无需满足各个操作中的权限要求。

创建快照

创建快照目录的快照。此操作需要快照目录的所有者权限。

  • 命令:

    <pre class="has" style="margin-left:7px;" name="code"><code class="language-source">hdfs dfs -createSnapshot &lt;path&gt; [&lt;snapshotName&gt;]</code></pre>
    </li>
    <li>
    <p><span style="color:#000000;"><span style="color:#000000;">参数:</span></span></p>
    
    <div class="table-box"><table style="margin-left:-2px;"><tbody><tr><td style="vertical-align:top;"><span style="color:#000000;"><span style="color:#333333;">path</span></span></td>
    			<td style="vertical-align:top;"><span style="color:#000000;"><span style="color:#333333;">快照目录的路径。</span></span></td>
    		</tr><tr><td style="vertical-align:top;"><span style="color:#000000;"><span style="color:#333333;">snapshotName</span></span></td>
    			<td style="vertical-align:top;"><span style="color:#000000;"><span style="color:#333333;">快照名称,是可选参数。省略时,使用格式为“'s'yyyyMMdd-HHmmss.SSS”的时间戳生成默认名称,例如“s20130412-151029.033”。</span></span></td>
    		</tr></tbody></table></div></li>
    

另请参见相应的Java API 路径createSnapshot(路径路径)和路径createSnapshot(路径路径字符串snapshotName)在文件系统快照路径在这些方法返回。

删除快照

从快照目录中删除快照。此操作需要快照目录的所有者权限。

  • 命令:

    <pre class="has" style="margin-left:7px;" name="code"><code class="language-source">hdfs dfs -deleteSnapshot &lt;path&gt; &lt;snapshotName&gt;</code></pre>
    </li>
    <li>
    <p><span style="color:#000000;"><span style="color:#000000;">参数:</span></span></p>
    
    <div class="table-box"><table style="margin-left:-2px;"><tbody><tr><td style="vertical-align:top;"><span style="color:#000000;"><span style="color:#333333;">path</span></span></td>
    			<td style="vertical-align:top;"><span style="color:#000000;"><span style="color:#333333;">快照目录的路径。</span></span></td>
    		</tr><tr><td style="vertical-align:top;"><span style="color:#000000;"><span style="color:#333333;">snapshotName</span></span></td>
    			<td style="vertical-align:top;"><span style="color:#000000;"><span style="color:#333333;">快照名称。</span></span></td>
    		</tr></tbody></table></div></li>
    

另请参见相应的Java API 无效deleteSnapshot(路径路径字符串snapshotName)的文件系统

重命名快照

重命名快照。此操作需要快照目录的所有者权限。

  • 命令:

    <pre class="has" style="margin-left:7px;" name="code"><code class="language-source">hdfs dfs -renameSnapshot &lt;path&gt; &lt;oldName&gt; &lt;newName&gt;
    




  • 参数:

  • <div class="table-box"><table style="margin-left:-2px;"><tbody><tr><td style="vertical-align:top;"><span style="color:#000000;"><span style="color:#333333;">path</span></span></td>
    			<td style="vertical-align:top;"><span style="color:#000000;"><span style="color:#333333;">快照目录的路径。</span></span></td>
    		</tr><tr><td style="vertical-align:top;"><span style="color:#000000;"><span style="color:#333333;">oldName</span></span></td>
    			<td style="vertical-align:top;"><span style="color:#000000;"><span style="color:#333333;">旧快照名称。</span></span></td>
    		</tr><tr><td style="vertical-align:top;"><span style="color:#333333;">newName</span></td>
    			<td style="vertical-align:top;"><span style="color:#000000;"><span style="color:#333333;">新快照名称。</span></span></td>
    		</tr></tbody></table></div></li>
    

    另请参见相应的Java API 无效renameSnapshot(路径路径,字符串使用oldName,字符串newName)将在文件系统

    获取Snapshottable目录列表

    获取当前用户有权使用snapshtos的所有快照目录。

    • 命令:

      <pre class="has" style="margin-left:7px;" name="code"><code class="language-source">hdfs lsSnapshottableDir</code></pre>
      </li>
      <li>
      <p>Arguments&nbsp;<span style="color:#000000;"><span style="color:#000000;">:无</span></span></p>
      </li>
      

    另请参见相应的Java API SnapshottableDirectoryStatus [] getSnapshottableDirectoryListing()中DistributedFileSystem。

    获取快照差异报告

    获取两个快照之间的差异。此操作需要两个快照中所有文件/目录的读访问权限。

    • 命令:

      <pre class="has" style="margin-left:7px;" name="code"><code class="language-source">hdfs snapshotDiff &lt;path&gt; &lt;fromSnapshot&gt; &lt;toSnapshot&gt;</code></pre>
      </li>
      <li>
      <p><span style="color:#000000;"><span style="color:#000000;">参数:</span></span></p>
      
      <div class="table-box"><table style="margin-left:-2px;"><tbody><tr><td style="vertical-align:top;"><span style="color:#333333;">path</span></td>
      			<td style="vertical-align:top;"><span style="color:#000000;"><span style="color:#333333;">快照目录的路径。</span></span></td>
      		</tr><tr><td style="vertical-align:top;"><span style="color:#000000;"><span style="color:#333333;">fromSnapshot</span></span></td>
      			<td style="vertical-align:top;"><span style="color:#000000;"><span style="color:#333333;">起始快照的名称。</span></span></td>
      		</tr><tr><td style="vertical-align:top;"><span style="color:#000000;"><span style="color:#333333;">toSnapshot</span></span></td>
      			<td style="vertical-align:top;"><span style="color:#000000;"><span style="color:#333333;">结束快照的名称。</span></span></td>
      		</tr></tbody></table></div><p><span style="color:#000000;"><span style="color:#000000;">请注意,snapshotDiff可用于获取两个快照之间或快照与目录当前状态之间的差异报告。用户可以使用“。”来表示当前状态。</span></span></p>
      </li>
      <li>
      <p><span style="color:#000000;"><span style="color:#000000;">结果:</span></span></p>
      
      <div class="table-box"><table style="margin-left:-2px;"><tbody><tr><td style="vertical-align:top;"><span style="color:#000000;"><span style="color:#333333;">+</span></span></td>
      			<td style="vertical-align:top;"><span style="color:#000000;"><span style="color:#333333;">文件/目录已创建。</span></span></td>
      		</tr><tr><td style="vertical-align:top;"><span style="color:#000000;"><span style="color:#333333;">-</span></span></td>
      			<td style="vertical-align:top;"><span style="color:#000000;"><span style="color:#333333;">文件/目录已被删除。</span></span></td>
      		</tr><tr><td style="vertical-align:top;"><span style="color:#333333;">M</span></td>
      			<td style="vertical-align:top;"><span style="color:#000000;"><span style="color:#333333;">文件/目录已被修改。</span></span></td>
      		</tr><tr><td style="vertical-align:top;"><span style="color:#000000;"><span style="color:#333333;">R</span></span></td>
      			<td style="vertical-align:top;"><span style="color:#000000;"><span style="color:#333333;">文件/目录已重命名。</span></span></td>
      		</tr></tbody></table></div></li>
      

    一个RENAME条目表示一个文件/目录已被重命名,但仍然是相同的snapshottable目录下。如果文件/目录已重命名为snapshottble目录之外,则报告为已删除。从snapshottble目录外部重命名的文件/目录将报告为新创建的。

    快照差异报告不保证相同的操作顺序。例如,如果我们将目录“/ foo”重命名为“/ foo2”,然后将新数据附加到文件“/ foo2 / bar”,则差异报告将为:

    R. /foo -> /foo2
    M. /foo/bar

    即,使用重命名之前的原始路径(在上面的示例中为“/ foo / bar”)报告重命名目录下的文件/目录的更改。

    另请参见相应的Java API SnapshotDiffReport getSnapshotDiffReport(路径路径,字符串fromSnapshot,字符串toSnapshot)在DistributedFileSystem。

     

    原文链接: https://hadoop.apache.org/docs/r3.2.0/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值