HDFS HA启用

翻译: https://www.cloudera.com/documentation/enterprise/latest/topics/cdh_hag_hdfs_ha_enabling.html

HDFS高可用性(HA)群集使用两个NameNode(活动NameNode和备用NameNode)。在任意时刻只有一个NameNode处于活动状态。HDFS HA维护一份名称空间修改日志,两个NameNode 都可以访问得到,在发生故障时,备用NameNode可以获取最新的名称空间修改日志和集群中块的位置信息。
重要提示:启用和禁用HA会导致HDFS服务和依赖于HDFS的所有服务中断服务。在启用或禁用HA之前,请确保群集上没有运行作业。

阅读:

使用Cloudera Manager启用HDFS HA

最低要求的角色: 群集管理员(也由完全管理员提供)

您可以使用Cloudera Manager为CDH 5群集配置HDFS HA的自动进行故障转移。在Cloudera Manager 5中,HA使用Quorum-based的存储实施。Quorum-based的存储依赖于一组JournalNodes,每个JournalNode都维护一个本地目录,用来记录对名称空间元数据的修改。启用高可用性启用自动故障转移作为同一命令的一部分。

重要:

  • 启用或禁用HA会导致先前的监控历史记录变得不可用。
  • 一旦启用JobTracker HA,一些参数将被自动设置。如果您想要更改这些参数的默认值,请使用高级配置。
    • mapred.jobtracker.restart.recover:true
    • mapred.job.tracker.persist.jobstatus.active:true
    • mapred.ha.automatic-failover.enabled:true
    • mapred.ha.fencing.methods:shell(true)

启用高可用性和自动故障转移

启用高可用性的工作流程将引导您完成添加第二个(备用)NameNode和配置JournalNodes。

  1. 执行HDFS HA硬件配置下描述的所有配置和设置任务。
  2. 确保你有一个ZooKeeper服务。
  3. 转到HDFS服务。
  4. 选择Actions > Enable High Availability。显示有资格运行备用NameNode和JournalNodes的主机的页面。
    a. 为名称服务指定一个名称,然后单击继续。注意:为名称服务使用唯一名称。
    b. 在NameNode主机字段中,单击选择主机。显示主机选择对话框。
    c. 选中要设置备用NameNode的主机旁边的复选框,然后单击OK。备用NameNode不能与活动NameNode位于同一主机上,并且所选主机应具有与活动NameNode相同的硬件配置(RAM,磁盘空间,内核数量等)。
    d. 在JournalNode主机字段中,单击选择主机。显示主机选择对话框。
    e. 选中奇数个主机旁边的复选框(至少三个)作为JournalNodes,然后单击确定。JournalNodes应托管在与NameNodes具有相似硬件规格的主机上。Cloudera建议您将JournalNode分别放置在与活动和备用NameNode相同的主机上,以及类似硬件上的第三个JournalNode,例如JobTracker。
    f. 点击继续。
    g. 在JournalNode的编辑目录属性中,将JournalNode编辑目录的目录位置输入到每个JournalNode主机的字段中。
    * 每个JournalNode只能输入一个目录。每个JournalNode上的路径不需要相同。
    * 您指定的目录应该是空的。
    * 目录所有者应该是hdfs:hadoop,并且必须具有读取,写入和执行权限(drwx ------)。
    h. 额外选项:决定Cloudera Manager是否应清除ZooKeeper,备用NameNode和JournalNodes中的现有数据。如果目录不为空(例如,您重新启用先前的HA配置),则Cloudera Manager不会自动删除内容 - 您可以通过保持默认复选框选择来选择删除内容。建议的默认值是清除目录。如果您选择不这样做,数据应该在JournalNodes的编辑目录中同步,并且应该具有与NameNodes相同的版本数据。
    i. 点击继续。
    Cloudera Manager执行一组命令来停止相关服务,根据需要删除,创建和配置角色和目录,创建名称服务和故障转移控制器,重新启动相关服务以及部署新的客户端配置。

重要 :如果操作已完成,某些步骤(如格式化NameNode)可能会报告失败。但是,配置步骤可以继续执行。

  1. 如果要配置群集中的其他服务使用HA,请按照配置其他CDH组件使用HDFS HA

重要提示:如果更改NameNode服务RPC端口(dfs.namenode.servicerpc-address),同时启用自动故障转移,这会导致保存在ZooKeeper中的NameNode地址不匹配/hadoop-ha znode和故障切换控制器配置的NameNode地址。这将阻止故障切换控制器重新启动。如果您需要在启用自动故障切换后更改NameNode Service RPC端口,则必须执行以下操作重新初始化znode:

  1. 停止HDFS服务。

  2. 配置服务RPC端口:
    a. 转到HDFS服务。
    b. 单击Configuration 选项卡。
    c. 选择Scope > NameNode。
    d. 选择 Category > Ports and Addresses.。
    e. 找到NameNode Service RPC端口属性或通过在搜索框中输入名称来搜索它。
    f. 根据需要更改端口值。
    要根据需要将此配置属性应用于其他角色组,请编辑相应角色组的值。请参阅使用Cloudera Manager修改配置属性

  3. 在ZooKeeper服务器主机上运行zookeeper-client.。
    a. 执行以下操作删除配置的名称服务。这个例子假设nameservice的名字是nameservice1。您可以在HDFS Instances 选项卡上的 Federation and High Availability 标识名称服务:rmr /hadoop-ha/nameservice1

  4. 单击Instances 选项卡。

  5. 选择 Actions > Initialize High Availability State in ZooKeeper.

  6. 启动HDFS服务。

隔离方法Fencing Methods

为确保一次只有一个NameNode处于活动状态,共享编辑目录需要使用fencing methods 。在故障转移期间,fencing methods负责确保先前活动的NameNode不再有权访问共享编辑目录,以便新的活动NameNode可以安全地继续写入。

默认情况下,Cloudera Manager将HDFS配置为使用 fencing method (shell(true)))。

fencing 参数位于 HDFS服务配置属性下的 Service-Wide > High Availability 类别中。

有关CDH 5提供的fencing方法以及如何配置fencing的详细信息,请参阅fencing配置

使用命令行启用HDFS HA

重要:

  • 在不使用Cloudera Manager配置时,遵循这些命令行指示信息。
  • 此信息特别适用于CDH 5.14.x。有关其他版本的信息,请参阅Cloudera文档

本节介绍CDH 5中HDFS HA所需的软件配置,并介绍如何设置配置属性并使用命令行来部署HDFS HA。

为HDFS HA配置文件

配置概述

HA配置向后兼容,并允许现有的单一NameNode配置在无需更改情况下即可工作。新配置的设计使群集中的所有节点都可以具有相同的配置,而无需根据节点的类型将不同的配置文件部署到不同的机器。

HA群集重用Nameservice ID来标识由多个HA NameNode组成的单个HDFS实例。另外,还有一个名为NameNode ID的新抽象。群集中每个不同的NameNode都有一个不同的NameNode ID。配置文件的参数需要包括Nameservice ID和NameNode ID以支持所有NameNode使用同一个配置文件。

对现有配置参数的更改

对于YARN实现,以下配置参数已更改:

fs.defaultFS - 以前为 fs.default.name ,这是Hadoop FS客户端在未给出任何前缀时使用的默认路径前缀。(fs.default.name 参数已经被YARN弃用,但仍然有效。)

或者,您可以将Hadoop客户端的默认路径配置为使用启用HA的逻辑URI。例如,如果你使用myCluster 作为Nameservice ID,如下所示,这将是所有HDFS路径的权威部分的值。你可以在你的core-site.xml配置文件中设置默认路径:

  • 对于YARN:
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://mycluster</value>
</property>
  • 对于MRv1:
<property>
  <name>fs.default.name</name>
  <value>hdfs://mycluster</value>
</property>

新的配置参数

要配置HA NameNodes,您必须在hdfs-site.xml中添加多个配置选项。

您设置这些配置的顺序不重要,但是dfs.nameservices and dfs.ha.namenodes.[Nameservice ID]的值非常关键。这意味着您应该在设置其余配置选项之前决定这些值。

配置dfs.nameservices

dfs.nameservices - 这个名字服务的逻辑名称

例如,为此名称服务选择一个逻辑名称 myCluster,并使用此逻辑名称作为此配置选项的值。你选择的名字是任意的。它将用于配置,也将作为群集中HDFS的绝对路径。

配置dfs.ha.namenodes.[nameservice ID]

dfs.ha.namenodes.[nameservice ID] - 名称服务中每个NameNode的唯一标识符

配置逗号分隔的NameNode ID列表。这将由DataNode用于确定群集中的所有NameNode。例如,如果你使用myCluster 作为NameService ID,并且您想使用NN1 和 NN2 作为NameNodes的个体ID,您可以按如下方式进行配置:

<property>
  <name>dfs.ha.namenodes.mycluster</name>
  <value>nn1,nn2</value>
</property>

注意:在此版本中,您可以为每个名称服务配置最多两个NameNode。

配置dfs.namenode.rpc-address.[nameservice ID]

dfs.namenode.rpc-address.[nameservice ID].[name node ID]- 每个NameNode侦听的完全限定的RPC地址

对于前面配置的两个NameNode ID,请设置NameNode进程的完整地址和RPC端口。请注意,这会导致两个单独的配置选项。例如:

<property>
  <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  <value>machine1.example.com:8020</value>
</property>
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  <value>machine2.example.com:8020</value>
</property>

注意:如有必要,您可以类似地配置 servicerpc-address。

配置dfs.namenode.http-address.[nameservice ID]

dfs.namenode.http-address.[nameservice ID].[name node ID] - 每个NameNode监听的全限定HTTP地址

与上面的rpc-address类似,为两个NameNode的HTTP服务器设置侦听地址。例如:

<property>
  <name>dfs.namenode.http-address.mycluster.nn1</name>
  <value>machine1.example.com:50070</value>
</property>
<property>
  <name>dfs.namenode.http-address.mycluster.nn2</name>
  <value>machine2.example.com:50070</value>
</property>

注意:如果您启用了Hadoop Kerberos安全功能,并且您打算使用HSFTP,则还应该设置 https-address 。

配置dfs.namenode.shared.edits.dir

dfs.namenode.shared.edits.dir - 共享存储目录的位置

配置供JournalNodes使用的共享编辑存储地址,由Active NameNode写入并由Standby NameNode读取,以保持两个 NameNode所做的所有文件系统更改一致。尽管您必须指定多个JournalNode地址,但您应该只配置其中一个URI。该URI应该采用以下格式:

qjournal://<host1:port1>;<host2:port2>;<host3:port3>/<journalId> 

日志ID是此名称服务的唯一标识符,它允许一组JournalNodes为多个联邦名称系统提供存储。尽管这不是要求,但重用名称服务标识是个好主意。

例如,如果该群集的JournalNodes在机器 node1.example.com, node2.example.com, 和 node3.example.com 上运行,并且nameservice ID是 myCluster,您可以使用以下值作为此设置的值(JournalNode的默认端口为8485):

<property>
  <name>dfs.namenode.shared.edits.dir</name>
 <value>qjournal://node1.example.com:8485;node2.example.com:8485;node3.example.com:8485/mycluster</value>
</property>

配置dfs.journalnode.edits.dir

dfs.journalnode.edits.dir - JournalNode守护进程将存储其本地状态的路径

在每个JournalNode机器上,配置JournalNodes使用的用于编辑和存储其他本地状态信息的绝对路径; 每个JournalNode只使用一个路径。(其他JournalNodes提供冗余;您也可以在本地连接的RAID-1或RAID-10阵列上配置此目录。)

例如:

<property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/data/1/dfs/jn</value>
</property>

创建目录(如果它不存在)并确保它的所有者是hdfs
$ sudo mkdir -p /data/1/dfs/jn
$ sudo chown -R hdfs:hdfs /data/1/dfs/jn

客户端故障转移配置

dfs.client.failover.proxy.provider.[nameservice ID] - HDFS客户端用于联系Active NameNode的Java类

配置DFS客户端将用于确定哪个NameNode是当前活动的Java类的名称,以及哪个NameNode当前正在为客户端请求提供服务。目前Hadoop附带的唯一实现是 ConfiguredFailoverProxyProvider,所以使用这个,除非你使用自定义的。例如:

<property>
  <name>dfs.client.failover.proxy.provider.mycluster</name>
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

fencing 配置

dfs.ha.fencing.methods - 一个脚本或Java类的列表,它们将用于在故障转移期间对活动NameNode进行篱笆划分

系统理想是,在任何给定的时间只有一个NameNode处于活动状态。

当您使用Quorum-based的存储时,只有一个NameNode将被允许写入JournalNodes,因此在“裂脑”场景中不会破坏文件系统元数据。为dfs.ha.fencing.methods 属性配置的默认值 shell(true) ,它并没有明确地尝试隔离备用NameNode。

在没有明确屏蔽的情况下,有一个狭窄的时间窗口,以前活动的NameNode可能会提供对来自客户端的读取的过时响应。当以前活动的NameNode试图写入JournalNodes时,此窗口结束,此时NameNode关闭。

由于没有裂脑的危险,这种时间窗口很少成为应用程序的问题。在需要强读取一致性的罕见或特殊情况下,请使用明确的屏蔽方法,如agent-based fencer。

注意:如果您选择使用agent-based fencer ,则仍应配置shell(true) ,因为如果agent-based fencer失败时其他NameNode没有响应。

故障切换期间使用的防护方法将配置为以回车分隔的列表,并且会按顺序尝试这些方法,直到其中一个表明防护已成功为止。

有关实现自己的自定义fencing 的信息,请参阅 org.apache.hadoop.ha.NodeFencer class.。

配置外壳防护方法

shell - 运行任意的shell命令来隔离活动的NameNode

shell fencing方法运行一个任意的shell命令,你可以像下面这样配置它:

<property>
  <name>dfs.ha.fencing.methods</name>
  <value>shell(/path/to/my/script.sh arg1 arg2 ...)</value>
</property>

'('和')'之间的字符串直接传递给bash shell ,不能包括任何结束括号。

执行时,配置脚本的第一个参数将是要被隔离的NameNode的地址,后面是在配置中指定的所有参数。

shell命令将在启动时包含hadoop环境中所有的配置遍历,将配置项中的_替换为. 。例如, dfs_namenode_rpc-address 将包含目标节点的RPC地址,即使配置可能将该变量指定为 dfs.namenode.rpc-address.ns1.nn1。

变量 描述
$ target_host 要隔离的节点的主机名
$ target_port 围绕节点的IPC端口
$ TARGET_ADDRESS 以上两个变量组合为port
$ target_nameserviceid 要被隔离的NameNode的名称服务ID
$ target_namenodeid 要被隔离的NameNode的NameNode ID

要fencing的目标节点的以下变量也可用:

变量 描述
$ target_host 要隔离的节点的主机名
$ target_port 围绕节点的IPC端口
$ TARGET_ADDRESS 以上两个变量组合为port
$ target_nameserviceid 要被隔离的NameNode的名称服务ID
$ target_namenodeid 要被隔离的NameNode的NameNode ID

您也可以使用这些环境变量作为shell命令本身的替代。例如:

<property>
  <name>dfs.ha.fencing.methods</name>
  <value>shell(/path/to/my/script.sh --nameservice=$target_nameserviceid $target_host:$target_port)</value>
</property>

如果shell命令返回0的退出码,则确定防护成功。如果它返回任何其他退出代码,则防护未成功,并尝试列表中的下一个防护方法。

注意:此防护方法不会实现任何超时。如果超时是必要的,它们应该在shell脚本中实现(例如,通过分支子shell在几秒钟内杀死它的父代)。

自动故障转移配置

以上各节介绍如何配置手动故障转移。在该模式下,即使主动节点发生故障,系统也不会自动触发从活动节点到备用节点的故障转移。本节介绍如何配置和部署自动故障转移。有关如何实现自动故障转移的概述,请参阅自动故障转移

部署ZooKeeper

在典型的部署中,ZooKeeper守护进程被配置为在三个或五个节点上运行。由于ZooKeeper本身具有轻量资源需求,因此可以在与HDFS NameNode和Standby节点上配置ZooKeeper节点。使用MapReduce v2(MRv2)的操作员经常选择在与YARN ResourceManager相同的节点上部署第三个ZooKeeper进程。建议将ZooKeeper节点的数据存储与HDFS元数据的存储分开,以获得最佳性能和隔离。

有关如何设置ZooKeeper集成的说明,请参阅ZooKeeper文档。在下面的章节中,我们假设您已经建立了一个在三个或更多节点上运行的ZooKeeper集群,并通过使用ZooKeeper命令行界面(CLI)进行连接来验证其正确的操作。

配置自动故障转移

注意:在开始配置自动故障转移之前,您必须关闭群集。当集群正在运行时,不支持从手动故障转移设置转换为自动故障转移设置。

配置自动故障转移需要两个额外的配置参数。在hdfs-site.xml 文件,添加:

<property>
  <name>dfs.ha.automatic-failover.enabled</name>
  <value>true</value>
</property>

这指定应将群集设置为自动故障转移。
在core-site.xml文件,添加:

<property>
  <name>ha.zookeeper.quorum</name>
  <value>zk1.example.com:2181,zk2.example.com:2181,zk3.example.com:2181</value>
</property>

这列出了运行ZooKeeper服务的主机端口对。

与本文档前面介绍的参数一样,这些设置可以通过在名称服务的基础上配置 nameservice ID后缀来配置。例如,在启用了联合的群集中,您可以通过设置仅显式启用其中一个名称服务的自动故障转移dfs.ha.automatic-failover.enabled.my-nameservice-id 。

还有其他几个配置参数可以用来控制自动故障转移的行为,但它们在大多数安装中不是必需的。有关详细信息,请参阅Hadoop文档的配置部分。

初始化ZooKeeper中的HA状态

添加配置密钥后,下一步是在ZooKeeper中初始化所需的状态。您可以通过从其中一个NameNode主机运行以下命令来完成此操作。

注意:使用此命令时,ZooKeeper集合必须正在运行; 否则将无法正常工作。

$ hdfs zkfc -formatZK

这将创建一个znode, 其上存储有自动故障转移系统所需数据。

安全访问ZooKeeper

如果您运行的是安全群集,则可能需要确保存储在ZooKeeper中的信息也是安全的。这可以防止恶意客户修改ZooKeeper中的元数据或者触发错误的故障转移。

为了保护ZooKeeper中的信息,请首先将以下内容添加到core-site.xml文件:

<property>
  <name>ha.zookeeper.auth</name>
  <value>@/path/to/zk-auth.txt</value>
</property>
<property>
  <name>ha.zookeeper.acl</name>
  <value>@/path/to/zk-acl.txt</value>
</property>

请注意这些值中的'@'字符 - 它指定配置不是内联的,而是指向磁盘上的文件。

第一个配置的文件指定ZooKeeper认证列表,ZooKeeper CLI使用相同的配置格式。例如,你可以指定类似 digest:hdfs-zkfcs:mypassword 的形式 , 其中hdfs-zkcs是ZooKeeper的唯一用户名, mypassword是密码 。

接下来,使用如下命令生成与此验证对应的ZooKeeper访问控制列表(ACL):

$ java -cp $ZK_HOME/lib/*:$ZK_HOME/zookeeper-3.4.2.jar org.apache.zookeeper.server.auth.DigestAuthenticationProvider hdfs-zkfcs:mypassword
output: hdfs-zkfcs:mypassword->hdfs-zkfcs:P/OQvnYyU/nF/mGYvB/xurX8dYs=

将' - >'字符串后面的输出部分复制并粘贴到文件 zk-acls.txt 中,以字符串“digest:”为前缀。例如:

digest:hdfs-zkfcs:vlUvLnd8MlacsE80rDuu6ONESbM=:rwcda

要使这些ACL生效,请重新运行 zkfc -formatZK 命令,如上所述。

这样做后,您可以按如下方式验证ZooKeeper CLI的ACL:

[zk: localhost:2181(CONNECTED) 1] getAcl /hadoop-ha
'digest,'hdfs-zkfcs:vlUvLnd8MlacsE80rDuu6ONESbM=
: cdrwa

自动故障转移FAQ

  • 是否需要以特定顺序启动ZKFC和NameNode守护进程?

不需要。在任何给定的节点上,您可以在其相应的NameNode之前或之后启动ZKFC。

  • 我应该进行哪些额外的监测?

您应该在运行NameNode的每台主机上添加监控,以确保ZKFC保持运行。例如,在某些ZooKeeper故障中,ZKFC可能会意外退出,应该重新启动以确保系统已准备好进行自动故障转移。此外,您应该在ZooKeeper quorum 中监视每个服务器。如果ZooKeeper崩溃,自动故障转移将不起作用。

  • 如果ZooKeeper出现故障会发生什么?
    如果ZooKeeper群集崩溃,则不会触发自动故障转移。但是,HDFS将继续运行,没有任何影响。当ZooKeeper重新启动时,HDFS将会重新连接。
  • 我可以将我的NameNode中的一个指定为主/首选吗?
    目前,这不支持。首先启动的NameNode将变为活动状态。您可以选择以特定顺序启动群集,以便首选节点首先启动。
  • 如何在配置自动故障转移时启动手动故障转移?
    即使配置了自动故障转移,您也可以启动手动故障转移。它将执行相应的故障转移。

部署HDFS高可用性

在设置完所有必要的配置选项后,即可启动JournalNodes和两个HA NameNode。

重要提示: 在开始之前:请确保您已执行中所述的所有配置和设置任务 配置硬件的HDFS HA配置软件HDFS HA,包括初始化的ZooKeeper HA状态,如果部署了自动故障转移。

安装并启动JournalNodes

  1. 将JournalNode守护程序安装在它们将运行的每台机器上。

    要在Red Hat兼容系统上安装JournalNode:

$ sudo yum install hadoop-hdfs-journalnode

在Ubuntu和Debian系统上安装JournalNode:

$ sudo apt-get install hadoop-hdfs-journalnode 

在SLES系统上安装JournalNode:

$ sudo zypper install hadoop-hdfs-journalnode
  1. 在他们将要运行的每台机器上启动JournalNode守护进程:
sudo service hadoop-hdfs-journalnode start 

在格式化主NameNode(在新集群中)之前和启动NameNodes(在所有情况下)之前,请确保守护进程启动。

格式化NameNode(如果是新集群)

如果您正在设置新的HDFS群集,请格式化您将用作主NameNode的NameNode; 请参阅格式化NameNode
重要提示:确保JournalNodes已启动。如果您已将NameNode配置为与JournalNodes进行通信,但尚未启动JournalNodes,则格式化将失败。

初始化共享编辑目录(如果转换现有的非HA集群)

如果要将非HA NameNode转换为HA,需要使用本地NameNode中的edits目录的数据初始化共享编辑目录:

hdfs namenode -initializeSharedEdits

启动NameNodes

  1. 启动主(已格式化)的NameNode:
$ sudo service hadoop-hdfs-namenode start
  1. 启动备用NameNode:
$ sudo -u hdfs hdfs namenode -bootstrapStandby
$ sudo service hadoop-hdfs-namenode start 

注意:如果启用了Kerberos,请不要使用命令sudo -u <user> <command>; 他们会因安全错误而失败。使用以下命令:$ kinit <user>(如果您使用密码) $ kinit -kt <keytab> <principal>(如果你使用的是 keytab
),然后,对于该用户执行的每个命令 $ <command>.

启动备用NameNode 带-bootstrapStandby选项会将主NameNode的元数据目录(包括名称空间信息和最新的检查点)的内容复制到备用NameNode。(保存NameNode元数据的目录位置使用配置选项 dfs.namenode.name.dir 和 dfs.namenode.edits.dir)进行配置。

您可以通过每个NameNode配置的HTTP地址来访问其网页。请注意,在配置的地址旁边是NameNode的HA状态(“Standby”或“Active”)。每当HA NameNode启动并且未启用自动故障转移时,它最初处于Standby状态。如果启用自动故障转移,则启动的第一个NameNode将变为活动状态。

重新启动服务(如果转换现有的非HA集群)

如果要从非HA转换为HA配置,则需要重新启动JobTracker和TaskTracker(对于MRv1,如果使用的话)或者ResourceManager,NodeManager和JobHistory Server(对于YARN)以及DataNode:

在每个DataNode上:

$ sudo service hadoop-hdfs-datanode start

在每个TaskTracker系统(MRv1)上:

$ sudo service hadoop-0.20-mapreduce-tasktracker start

在JobTracker系统(MRv1)上:

$ sudo service hadoop-0.20-mapreduce-jobtracker start

验证JobTracker和TaskTracker是否正确启动:

sudo jps | grep Tracker

在ResourceManager系统(YARN)上:

$ sudo service hadoop-yarn-resourcemanager start

在每个NodeManager系统上(YARN;通常与运行DataNode服务的系统相同):

$ sudo service hadoop-yarn-nodemanager start

在MapReduce JobHistory服务器系统(YARN)上:

$ sudo service hadoop-mapreduce-historyserver start

部署自动故障转移(如果已配置)

如果您使用ZooKeeper FailoverController(ZKFC)配置自动故障切换,则必须在每台NameNode上安装并启动 zkfc 守护进程。命令如下。

在红帽兼容系统上安装ZKFC:

$ sudo yum install hadoop-hdfs-zkfc

在Ubuntu和Debian系统上安装ZKFC:

$ sudo apt-get install hadoop-hdfs-zkfc

在SLES系统上安装ZKFC:

$ sudo zypper install hadoop-hdfs-zkfc

启动 zkfc :

$ sudo service hadoop-hdfs-zkfc start

以特定顺序启动ZKFC和NameNode后台进程并不重要。在任何给定的节点上,您可以在相应的NameNode之前或之后启动ZKFC。

您应该在运行NameNode的每台主机上添加监控,以确保ZKFC保持运行。例如,在某些类型的ZooKeeper故障中,ZKFC可能会意外退出,应该重新启动以确保系统准备好进行自动故障转移。

此外,您应该在每个服务器监控ZooKeeper quorum 。如果ZooKeeper崩溃,则自动故障转移将不起作用。如果ZooKeeper群集崩溃,则不会触发自动故障转移。但是,HDFS将继续运行,没有任何影响。当ZooKeeper重新启动时,HDFS将会重新连接。

验证自动故障转移

在启用了自动故障转移的群集的初始部署之后,您应该测试其操作。为此,首先找到活动的NameNode。如上所述,您可以通过访问NameNode Web界面来确定哪个节点处于活动状态。

一旦找到活动的NameNode,就可以在该节点上引发故障。例如,你可以使用 kill -9 <pid of NN> 模拟JVM崩溃。或者,您可以重新启动机器或其网络接口以模拟不同类型的停机。触发中断后,另一个NameNode应在几秒钟内自动激活。检测故障并触发故障转移所需的时间取决于配置ha.zookeeper.session-timeout.ms,默认为5秒。

如果测试不成功,则可能是配置错误。检查zkfc 日志 以及NameNode守护进程来进一步诊断问题。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容