暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

HDFS用户指南(一)

杉沐先生 2020-11-30
473

 本文档作为使用Hadoop分布式文件系统(HDFS)的起点该系统既可以作为hadoop集群的一部分也可以作为一个独立的通用分布式文件系统使用


以下内容均翻译自官方文档。



01

目的


        本文档作为使用Hadoop分布式文件系统(HDFS)的起点,该系统既可以作为hadoop集群的一部分,也可以作为一个独立的通用分布式文件系统使用。虽然HDFS被设计成可以在许多环境中“正常工作”,但是了解HDFS的工作原理对于在特定集群上改进配置和诊断有很大帮助。


02

概述

    HDFS是Hadoop应用上使用的最主要的分布式存储,一个HDFS集群主要是由一个管理文件系统元数据的NameNode和多个存储实际数据的DataNode组成。HDFS体系结构指南详细描述了HDFS。本用户指南主要处理用户和管理员与HDFS集群的交互。HDFS架构图描述了NameNode、DataNode和客户机之间的基本交互。客户端联系NameNode获取文件元数据或文件修改,并直接通过DataNode进行实际的文件读写操作。

以下是许多用户可能会感兴趣的一些显著特性:

  • 包括HDFS在内的Hadoop非常适合使用商用硬件进行分布式存储和分布式处理。它具有容错性、可伸缩性,并且扩展极其简单。MapReduce以其简单性和对大型分布式应用程序集的适用性而闻名,它是Hadoop不可或缺的一部分。

  • HDFS具有高度可配置性,默认配置非常适合许多安装。大多数时候,配置只需要针对非常大的集群进行调优。

  • Hadoop是用java编写的,所有主要平台都支持。

  • Hadoop支持类似shell的命令来直接与HDFS交互。

  • NameNode和DataNode有一个内建的web服务器,通过这个web服务器可以方便的检查集群当前的状态。

  • HDFS经常实现新的特性和改进。以下是HDFS中有用功能的一个子集:

    • 文件权限和身份验证。

    • 机架感知:在调度任务和分配存储时考虑节点的物理位置。

    • 安全模式: 用于维护的管理模式。

    • fsck: 诊断文件系统运行状况的实用工具,可以查找丢失的文件或块。

    • fetchdt: 获取授权令牌并将其存储在本地文件的一个实用工具。

    • Balancer: 当数据在数据节点之间分布不均衡时,用来平衡集群的实用工具。

    • 升级和回退: 在软件升级后,如果出现意外问题,可以回滚到升级前的HDFS状态。

    • Secondary NameNode: 定期检查名称空间,并帮助将包含HDFS修改日志的文件的大小保持在NameNode的一定限制之内。

    • Checkpoint node: 定期执行命名空间和的检查点,并帮助最小化存储在NameNode上的日志的大小,其中包含对HDFS的更改。取代以前由Secondary NameNode填充的角色,尽管还没有经过严格的验证。NameNode允许同时有多个检查点节点,只要没有向系统注册的备份节点。

    • Backup node: 检查点节点的扩展。除了检查点之外,它还接收来自NameNode的编辑流,并维护自己的内存中的名称空间副本,该副本始终与活动的NameNode名称空间状态同步。一次只能向NameNode注册一个备份节点。



03


预备知识


        以下文档描述了如何安装和设置一个hadoop集群:


   1,Single Node Setup for first-time users.

   2,Cluster Setup for large, distributed clusters.


        后续我们假定读者是会设置和运行至少一个DataNode的HDFS。在本文中,NameNode和DataNode可以运行在同一台物理机器上。



04


Web接口


        NameNode和DataNode都运行一个内部web服务器,以显示关于集群当前状态的基本信息。默认配置情况下,NameNode启动页位于http://namenode-name:9870/。它列出了集群中的数据节点和集群的基本统计信息。web界面也可以用来浏览文件系统(使用NameNode首页上的“浏览文件系统”链接)。


05


Shell命令


       Hadoop包含各种类似shell的命令,这些命令可以直接与HDFS以及Hadoop支持的其他文件系统交互。bin/hdfs dfs -help列出了Hadoop shell支持的命令。此外,bin/hdfs dfs -help [命令名称] 显示该命令的更详细帮助。这些命令支持大多数常规的文件系统操作,如复制文件、更改文件权限等。它还支持一些HDFS特定的操作,比如更改文件副本。有关更多信息,请参阅 File System Shell Guide 。

    

        DFSAdmin命令

       bin/hdfs dfsadmin命令支持一些hdfs管理相关的操作。bin/hdfs dfsadmin -help命令列出当前支持的所有命令。如下:

  • -report报告HDFS的基本统计信息。有些信息也可以在NameNode首页上找到。

  • -safemode: 虽然通常不是必需的,但管理员可以手动进入或离开Safemode。

  • -finalizeUpgrade: 删除上次升级时对集群进行的以前备份。

  • -refreshNodes: 使用允许连接到namenode的datanode集更新namenode。默认情况下namenode 会重新读取定义在dfs.hosts文件中的datanode主机名,在dfs.hosts中定义的dfs.hosts.exclude 主机也是集群的一部分datanode.如果dfs.hosts中定义有datanode条目,那么只有这些datanode才被允许向namenode注册那些定义在dfs.hosts.exclude中的datanode是要被停止使用的.或者,如果dfs.namenode.hosts.provider.classname被设置为org.apache.hadoop.hdfs.server.blockmanagement.CombinedHostFileManager。所有包含和排除主机都在dfs.hosts定义的JSON文件中指定。当数据节点中的所有副本都被复制到其他数据节点时,数据节点完成退役。退役节点不会自动关闭,也不会选择写入新的副本。

  • -printTopology: 打印集群的拓扑结构。显示由NameNode查看的连接到轨道的机架和数据节点树。




06

Secondary NameNode


        NameNode将对文件系统的修改以edits日志的方式追加存储在本地文件系统文件中。当NameNode启动时,它从文件fsimage中读取HDFS的状态,然后应用edits日志文件中的编辑项。然后,它将新的HDFS状态写入fsimage,并以一个空的编辑文件启动正常操作。由于NameNode只在启动时合并fsimage和edits文件,因此在繁忙的集群中,随着时间的推移,edits日志文件可能会变得非常大。较大的edits文件的另一个副作用是,下一次重新启动NameNode需要更长的时间。


        Secondary NameNode定期合并fsimage和edits日志文件,并将edits日志大小限制在一定范围内。它通常运行在与主NameNode不同的机器上,因为它的内存需求与主NameNode的顺序相同。


        Secondary NameNode上检查点进程的触发是由两个配置参数控制。


  • dfs.namenode.checkpoint.period: 默认设置为1小时,指定两个连续检查点之间的最大延迟。

  • dfs.namenode.checkpoint.txns: 默认设置为1 million,在NameNode上定义将强制执行紧急检查点的未检查点事务的数量,即使检查点周期尚未到达。


        Secondary NameNode将最新的检查点存储在一个目录中,该目录的结构与主NameNode的目录相同。因此,如果需要,主NameNode可以随时读取校验点image。


07

检查点节点


        NameNode使用两个文件来保存它的名称空间:fsimage和edits,前者是名称空间的最新检查点,后者是记录检查点之后名称空间变化的日志。当NameNode启动时,它会合并fsimage和edits日志,以提供文件系统元数据的最新视图。然后NameNode用新的HDFS状态覆盖fsimage,并开始一个新的edits日志。

        检查点节点定期创建名称空间的检查点。它从活动的NameNode下载fsimage并进行编辑,在本地合并它们,然后将新图像上传回活动的NameNode。检查点节点通常运行在与NameNode不同的机器上,因为它的内存需求与NameNode的顺序相同。检查点节点由配置文件中指定的节点上的bin/hdfs namenode -checkpoint启动。

       检查点(或备份)节点及其相应的web接口的位置是通过dfs.namenode.backup.address和dfs.namenode.backup.http-address配置变量配置的。

检查点节点上检查点进程的触发是由两个配置参数控制。

 

  • dfs.namenode.checkpoint.period: 默认设置为1小时,指定两个连续检查点之间的最大延迟.

  • dfs.namenode.checkpoint.txns: 默认设置为1 million,在NameNode上定义将强制执行紧急检查点的未检查点事务的数量,即使检查点周期尚未到达。


      检查点节点将最新的检查点存储在与NameNode目录结构相同的目录中。这使得NameNode在必要时总是可以读取检查点image。详情参见”Import checkpoint”小节。


        可以在集群配置文件中指定多个检查点节点。



08

备份节点


        备份节点提供与检查点节点相同的检查点功能,并在内存中维护着始终与活动NameNode状态同步的文件系统名称空间的最新副本。除了从NameNode接受文件系统edits日志流并将其持久化到磁盘之外,备份节点还将这些edits应用到内存中自己的名称空间副本中,从而创建名称空间的备份。

        备份节点不需要从激活的NameNode下载fsimage和edits文件来创建检查点,而检查点节点或Secondary NameNode则需要这样做,因为它在内存中已经拥有了最新的名称空间状态。备份节点检查点过程更有效,因为它只需要将名称空间保存到本地fsimage文件中并重置edits。

由于备份节点在内存中维护名称空间的副本,因此它的RAM需求与NameNode相同。

        NameNode每次支持一个备份节点。如果正在使用备份节点,则不能注册任何检查点节点。将来会支持同时使用多个备份节点。

备份节点的配置方式与检查点节点相同。它以bin/hdfs namenode -backup开始。

       备份(或检查点)节点及其相应的web接口的位置是通过dfs.namenode.backup.address和dfs.namenode.backup.http-address配置变量配置的。

使用备份节点提供了在不使用持久存储的情况下运行NameNode的选项,并将持久化namespace 状态的所有责任委托给备份节点。为此,请使用 -importCheckpoint 选项启动 NameNode,同时为 NameNode 配置指定类型为 ds.namenode.edit.dir 的非持久存储目录。


09

Import Checkpoint


        如果image的所有其他副本和edits文件丢失,可以将最新的检查点导入到NameNode。为了做到这一点,我们应该:


  • 在dft .namenode.name.dir配置变量中创建一个空目录;

  • 在配置变量

    dfs.namenode.checkpoint.dir中指定检查点目录的位置;

  • 并使用-importCheckpoint选项启动NameNode。

 

       NameNode将从

dfs.namenode.checkpoint.dir目录上传检查点,然后将其保存到dfs.namenode.name.dir中设置的NameNode目录. 如果dfs.namenode.name.dir中包含合法image,NameNode将失败. NameNode验证dfs.namenode.checkpoint.dir中的image是否一致的,但不以任何方式修改它。


10

平衡器Balancer


        HDFS数据可能并不总是跨DataNode均匀地放置。一个常见的原因是向现有集群添加新的数据节点。在放置新块时(文件的数据存储为一系列块),NameNode在选择接收这些块的datanode之前会考虑各种参数。其中一些考虑因素是:


  • 以将块的一个副本与写入块的节点保持在同一节点上;

  • 需要在机架上分散不同的块副本,以便集群在失去整个机架后能够存活;

  • 其中一个副本通常被放在与写入文件的节点相同的机架上,这样就减少了跨机架的网络I/O;

  • HDFS数据均匀地分布在集群中的数据节点上。


        由于多种竞争考虑,数据可能不能均匀地跨数据节点放置。HDFS为管理员提供了一个工具,用于分析块的位置,并跨DataNode重新分配数据。在HADOOP-1652上有一个关于平衡器的简单管理员指南。


(未完待续)



文章转载自杉沐先生,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论