Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Hadoop中,Namenode如何获取机架详细信息和属于机架的datanode?_Hadoop_Hdfs - Fatal编程技术网

在Hadoop中,Namenode如何获取机架详细信息和属于机架的datanode?

在Hadoop中,Namenode如何获取机架详细信息和属于机架的datanode?,hadoop,hdfs,Hadoop,Hdfs,假设在Hadoop集群中有两个机架rck1和rck2。每个机架有5个节点。Namenode如何知道节点1属于机架1,节点3属于机架2。您必须配置系统以指定如何确定机架信息。例如,告诉您如何在Cloudera Manager中为主机配置机架 或者,解释如何通过配置文件在java类的外部脚本中指定此信息 拓扑结构通常采用/myrack/myhost的形式,尽管您可以使用更深层的层次结构。他们有以下python示例,假设每个机架有一个/24子网,因此提取IP地址的前三个字节用作机架号-如果可以相应地设

假设在Hadoop集群中有两个机架rck1和rck2。每个机架有5个节点。Namenode如何知道节点1属于机架1,节点3属于机架2。

您必须配置系统以指定如何确定机架信息。例如,告诉您如何在Cloudera Manager中为主机配置机架

或者,解释如何通过配置文件在java类的外部脚本中指定此信息

拓扑结构通常采用/myrack/myhost的形式,尽管您可以使用更深层的层次结构。他们有以下python示例,假设每个机架有一个/24子网,因此提取IP地址的前三个字节用作机架号-如果可以相应地设置节点IP地址,则可以采用类似的方法,或者编写您自己的脚本,根据每个节点上的IP地址或其他可用信息确定机架(在您的示例中,即使主机名和机架之间的简单硬编码映射也适用于相对较少的节点)


您必须配置系统以指定如何确定机架信息。例如,告诉您如何在Cloudera Manager中为主机配置机架

或者,解释如何通过配置文件在java类的外部脚本中指定此信息

拓扑结构通常采用/myrack/myhost的形式,尽管您可以使用更深层的层次结构。他们有以下python示例,假设每个机架有一个/24子网,因此提取IP地址的前三个字节用作机架号-如果可以相应地设置节点IP地址,则可以采用类似的方法,或者编写您自己的脚本,根据每个节点上的IP地址或其他可用信息确定机架(在您的示例中,即使主机名和机架之间的简单硬编码映射也适用于相对较少的节点)

#!/usr/bin/python
# this script makes assumptions about the physical environment.
#  1) each rack is its own layer 3 network with a /24 subnet, which
# could be typical where each rack has its own
#     switch with uplinks to a central core router.
#
#             +-----------+
#             |core router|
#             +-----------+
#            /             \
#   +-----------+        +-----------+
#   |rack switch|        |rack switch|
#   +-----------+        +-----------+
#   | data node |        | data node |
#   +-----------+        +-----------+
#   | data node |        | data node |
#   +-----------+        +-----------+
#
# 2) topology script gets list of IP's as input, calculates network address, and prints '/network_address/ip'.

import netaddr
import sys
sys.argv.pop(0)                                                  # discard name of topology script from argv list as we just want IP addresses

netmask = '255.255.255.0'                                        # set netmask to what's being used in your environment.  The example uses a /24

for ip in sys.argv:                                              # loop over list of datanode IP's
address = '{0}/{1}'.format(ip, netmask)                      # format address string so it looks like 'ip/netmask' to make netaddr work
try:
   network_address = netaddr.IPNetwork(address).network     # calculate and print network address
   print "/{0}".format(network_address)
except:
   print "/rack-unknown"                                    # print catch-all value if unable to calculate network address