实现Hadoop中的机架感知

2019-03-28 13:20|来源: 网络

原理

Hadoop中声明是有机架感知的功能,能够提高hadoop的性能。平时我们使用的hadoop集群,实际上是从来没有使用上这个功能的。 hadoop中所说的机架感知的实现实际上这样的:

hadoop启动时会检查hadoop-default.xml和hadoop-site.xml中的一个配置选项:topology.script.file.name,如果这个选项不为空,hadoop就会认为这是一个可运行脚本,于是在每检测到一个slave连接上jobtracker时就会把这个slave的IP地址作为参数传给这个脚本,然后期待这个脚本的返回值返回这台slave所述的rack名。而这个脚本内部具体是如何决定slave和rack的映射hadoop是不关心的。所以,哪台机器属于那个rack,其实是由写这个脚本的人决定。

另外,和topology.script.file.name相对应的还有另外一个配置选项:topology.script.number.args,这个选项的设定了以上脚本所能接受的最大参数个数,因为脚本被调用时会接受到不止一个参数,每个参数都是一台机器的IP地址。

实现步骤

1, 在jobtracker的hadoop-site.xml配置文件中加入一下配置选项:

 <property>
<name>topology.script.file.name</name>
<value>/path/to/rackmap.sh</value>
<description> The script name that should be invoked to resolve DNS names to
NetworkTopology names. Example: the script would take host.foo.bar as an
argument, and return /rack1 as the output.
</description>
</property>

<property>
<name>topology.script.number.args</name>
<value>1000</value>
<description> The max number of args that the script configured with
topology.script.file.name should be run with. Each arg is an
IP address.
</description>
</property>

编写rackmap.sh脚本,为每一个地址输出其所属的rack
重启jobtracker 。

相关问答

更多
  • order by nulls last 不是标准sql,oracle设计的 可以这么写,再指定一个虚拟列来辅助排序 order by case when col is null then 0 else 1 end , col desc
  • bg7.png 相信下面概念你已经知道了:jms即Java消息服务(Java Message Service)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。它可以在两个应用程序之间异步通信,也就是说,如果你做一个监控系统,那么你想通过监控系统获取hadoop的运行信息。前提是hadoop需要有借口提供这些信息才可以。也就是你说的Hadoop Metrics收集机制。你可以把二者结合起来,只要hadoop的metrics提供 ...
  • IBM 新出的PowerLinux 很适合应用服务器。性价比很高。可以考虑。
  • 如果因为你使用虚拟机而共享硬件,那么两台机器中断的可能性最大,如果它们共用一个机架而不是硬件则更小,如果它们共用一个建筑而不是一个机架,则再次更小。 因此,使用多个机架是有意义的。 您是否需要超过2个机架取决于您的副本。 默认复制数为1.如果需要更高的值,严格来说,如果仅使用2个机架,则会降低群集的可用性,因为> = 3设置在机架级别上无效。 The chance of an outage of two machines is highest if they share hardware because y ...
  • 感谢您试用HTrace! 对不起,版本问题现在是如此的痛苦。 使用cloudera的Hadoop CDH5.5发行版及更高版本配置HTrace更容易。 这里有一个很好的描述: http : //blog.cloudera.com/blog/2015/12/new-in-cloudera-labs-apache-htrace-incubating/如果你想坚持一个Apache发布源代码而不是供应商发布,请尝试使用Hadoop 3.0.0-alpha1。 http://hadoop.apache.org/rel ...
  • 是的,我不完全确定你要做什么。 但你可以做到这一点 class CorsWired def initialize(app) @app = app end def call(env) cors = Rack::Cors.new(@app, {}) do allow do origins '*' resource '*', :headers => :any, :methods => [:get, :post, :put, :options ...
  • 我相信你不应该在classname中包含“ .class ”。 代替 job.setJarByClass(hadoopshingles.Saishingles.class); 它应该是 job.setJarByClass(hadoopshingles.Saishingles); I believe you should not be including ".class" in the classname. Instead of job.setJarByClass(hadoopshingles.Saishin ...
  • 是的,它们设计用于前后排气。 堆叠它们不会使它们比在实际机架中更热或更冷。 Yes, they are designed to vent front and rear. Stacking them is not going to make them any hotter or cooler than if they were in an actual rack.
  • 它会认为这些块不够复制,并且会继续抱怨它,它会永久地尝试将它们带到预期的复制因子。 HDFS系统有一个参数(复制因子 - 默认为3),它告诉namenode每个块应该如何复制(在默认情况下,根据给定的副本放置策略,每个块应该在整个集群中复制3次) 。 在系统设法按复制因子指定的次数复制每个块之前,它将继续尝试这样做。 It will consider the blocks as under-replicated and it will keep complaining about that and it w ...
  • 只需给他们其他子网,如rack1 192.168.1。*,rack2 192.168.2。*等等。 Hadoop会认识到这一点。 Just give them other subnets, like rack1 192.168.1.*, rack2 192.168.2.* and so on. Hadoop will recognize this.