Hadoop 文档

General

Common

HDFS

MapReduce

MapReduce REST APIs

YARN

YARN REST APIs

YARN Service

Submarine

Hadoop Compatible File Systems

Auth

Tools

Reference

Configuration

本文档面向在多宿主网络中部署HDFS的群集管理员。对YARN / MapReduce的类似支持正在开发中,并将在可用时进行记录。

多宿主背景

在多宿主网络中,群集节点连接到多个网络接口。这样做可能有多种原因。

  1. 安全性:安全性要求可能会将群集内流量限制在与用于在群集中进出数据的网络不同的网络。

  2. 性能:集群内流量可能使用一个或多个高带宽互连,例如光纤通道,Infiniband或10GbE。

  3. 故障转移/冗余:节点可能具有连接到单个网络的多个网络适配器,以处理网络适配器故障。

请注意,NIC绑定(也称为NIC组或链接聚合)是一个相关但独立的主题。以下设置通常不适用于NIC绑定配置,该配置透明地处理多路复用和故障转移,同时向应用程序提供单个“逻辑网络”。

解决多宿主环境中的Hadoop问题

确保HDFS守护程序绑定所有接口

默认情况下,HDFS端点被指定为主机名或IP地址。在这两种情况下,HDFS守护程序都将绑定到一个IP地址,从而使该守护程序无法从其他网络访问。

解决方案是对服务器端点进行单独设置,以强制绑定通配符IP地址INADDR_ANY,0.0.0.0。请勿提供具有任何这些设置的端口号。

注意:首选在主机/从机配置文件中的IP地址上使用主机名。

<属性>
  <name> dfs.namenode.rpc-bind-host </ name>
  <value> 0.0.0.0 </ value>
  <说明>
    RPC服务器将绑定到的实际地址。如果此可选地址是
    设置,它将仅覆盖dfs.namenode.rpc地址的主机名部分。
    也可以为HA / Federation的每个名称节点或名称服务指定它。
    这对于使名称节点通过以下方式在所有接口上侦听很有用:
    将其设置为0.0.0.0。
  </ description>
</ property>

<属性>
  <name> dfs.namenode.servicerpc-bind-host </ name>
  <value> 0.0.0.0 </ value>
  <说明>
    服务RPC服务器将绑定到的实际地址。如果此可选地址是
    设置,它将仅覆盖dfs.namenode.servicerpc-address的主机名部分。
    也可以为HA / Federation的每个名称节点或名称服务指定它。
    这对于使名称节点通过以下方式在所有接口上侦听很有用:
    将其设置为0.0.0.0。
  </ description>
</ property>

<属性>
  <name> dfs.namenode.http-bind-host </ name>
  <value> 0.0.0.0 </ value>
  <说明>
    HTTP服务器将绑定到的实际地址。如果此可选地址
    设置,它将仅覆盖dfs.namenode.http-address的主机名部分。
    也可以为HA / Federation的每个名称节点或名称服务指定它。
    这对于使名称节点HTTP服务器在所有服务器上侦听很有用
    通过将其设置为0.0.0.0进行连接。
  </ description>
</ property>

<属性>
  <name> dfs.namenode.https-bind-host </ name>
  <value> 0.0.0.0 </ value>
  <说明>
    HTTPS服务器将绑定到的实际地址。如果此可选地址
    设置,它将仅覆盖dfs.namenode.https-address的主机名部分。
    也可以为HA / Federation的每个名称节点或名称服务指定它。
    这对于使名称节点HTTPS服务器在所有服务器上侦听很有用
    通过将其设置为0.0.0.0进行连接。
  </ description>
</ property>

客户端在连接到DataNode时使用主机名

默认情况下,HDFS客户端使用NameNode提供的IP地址连接到DataNodes。根据网络配置,客户端可能无法访问此IP地址。该修补程序使客户端可以执行自己的DataNode主机名的DNS解析。以下设置启用此行为。

<属性>
  <name> dfs.client.use.datanode.hostname </ name>
  <value> true </ value>
  <description>客户端在以下情况下是否应使用datanode主机名
    连接到数据节点。
  </ description>
</ property>

连接到其他DataNode时,DataNode使用主机名

很少情况下,DataNode的NameNode解析IP地址可能无法从其他DataNode到达。解决方法是强制DataNode为DataNode之间的连接执行自己的DNS解析。以下设置启用此行为。

<属性>
  <name> dfs.datanode.use.datanode.hostname </ name>
  <value> true </ value>
  <description>在以下情况下,数据节点是否应使用数据节点主机名
    连接到其他数据节点以进行数据传输。
  </ description>
</ property>

多宿主和Hadoop安全

在安全模式下使用Hadoop配置多宿主主机可能需要其他配置。

主机名查询

Hadoop服务的Kerberos主体使用模式ServiceName/_HOST@REALM.TLD指定,例如nn/_HOST@REALM.TLD。这允许在所有主机上使用相同的配置文件。服务将使用在运行时查找的自己的主机名替换主体中的_HOST

如果将节点配置为在DNS或/ etc / hosts文件中具有多个主机名,则服务可能会查找与服务器期望的主机名不同的主机名。例如,可以通过私有接口路由两个服务之间的集群内流量,但是客户端服务会查询其公共主机名。由于主体中的主机名与流量到达的IP地址不匹配,因此Kerberos身份验证将失败。

以下设置(可从Apache Hadoop 2.8.0开始使用)可用于控制查询服务的主机名。

<属性>
  <name> hadoop.security.dns.interface </ name>
  <说明>
    服务应从中确定的网络接口的名称
    Kerberos登录的主机名。例如eth2。在多宿主环境中,
    该设置可用于影响服务中的_HOST替代
    Kerberos主体。如果未设置此配置值,则服务
    将使用其返回的默认主机名
    InetAddress.getLocalHost()。getCanonicalHostName()。

    大多数群集将不需要此设置。
  </ description>
</ property>

还可以将服务配置为使用特定的DNS服务器进行主机名查找(非常需要)。

<属性>
  <name> hadoop.security.dns.nameserver </ name>
  <说明>
    服务节点名称服务器(DNS)的主机名或IP地址
    应该用于确定其自己的Kerberos登录主机名。需要
    hadoop.security.dns.interface。

    大多数群集将不需要此设置。
  </ description>
</ property>