前言:
我有一个网络应用程序的问题,它是由一个不再在公司工作的员工开发的。因为几乎没有关于实现的文档可用,所以我不确定在哪里可以获得更多关于这个问题的信息。
我试图找到一个类似于这个问题的解决方案(hadoop伪分布式模式-datanode和tasktracker没有启动)。然而,由于我对hadoop没有什么经验,我无法确定需要修复什么才能使应用程序正常工作。
场景:
应用程序分为两部分:
应用程序在一个tomcat服务器上运行,它处理用户输入并提供map reduce作业的结果( localhost:8080/WebApp
).
比hadoop的主节点 localhost:50070
2.1. 还有一个工作追踪器正在运行 localhost:8088/cluster
所有的应用程序都运行在同一台ubuntu机器上。
这是使用前雇员部署的配置正确运行的。我所有的文件都是关于如何启动不同的服务器的。对于hadoop集群,它是一个名为 up.sh
.
到目前为止我所做的:
在下一步中,我想将应用程序迁移到具有静态ip地址的新网络。我配置了与it部门数据的连接,并更改了 server.xml
tomcat服务器的文件,以便应用程序可以通过新的静态ip地址访问( 172.16.254.1:8080/WebApp
). 这是有效的
我采取的下一步是更改 /etc/hosts
旧ip地址被列为hadoop集群主地址的文件。
所以我改变了这个:
127.0.0.1 localhost
192.0.2.42 master
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
对此:
127.0.0.1 localhost
172.16.254.1 master
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
结果是:
修改完成后,我可以用 up.sh
编写脚本并访问 localhost:50070
. 但是,我无法访问hadoop作业跟踪器 localhost:8088/cluster
.
在webapp中,我可以安排map reduce任务,但是结果不正确。缺少应该由map reduce集群计算的重要数据。
到目前为止,我发现的唯一错误是 hadoop-hduser-namenode.log
文件:
2015-07-28 13:57:23,713 ERROR org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Error getting localhost name. Using 'localhost'...
java.net.UnknownHostException: ubuntu-machine: ubuntu-machine
at java.net.InetAddress.getLocalHost(InetAddress.java:1461)
at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.getHostname(MetricsSystemImpl.java:514)
at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.configureSystem(MetricsSystemImpl.java:453)
at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.configure(MetricsSystemImpl.java:449)
at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.start(MetricsSystemImpl.java:180)
at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.init(MetricsSystemImpl.java:156)
at org.apache.hadoop.metrics2.lib.DefaultMetricsSystem.init(DefaultMetricsSystem.java:54)
at org.apache.hadoop.metrics2.lib.DefaultMetricsSystem.initialize(DefaultMetricsSystem.java:50)
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1253)
at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1320)
因为调用堆栈没有提到雇员开发的任何类,所以我假设问题出在hadoop/网络配置中。应用服务器的日志也没有列出任何错误。我不知道我遗漏了什么。
如果您需要有关配置文件内容的更多信息,请告诉我,我将为您提供这些信息。
1条答案
按热度按时间ekqde3dh1#
问题出在主机名上。将ubuntu机器Map添加到/etc/hosts文件
另一件事是检查hadoop的版本。hadoop最近发生了重大变化。因此,hadoop有两个主要版本:hadoop1.x和hadoop2.x。这种变化发生在加工层。在hadoop1.x中,我们有jobtracker和tasktracker,在hadoop2.x中,我们有resourcemanager、nodemanager和applicationmaster。两个版本的安装步骤不同。类型
hadoop version
并验证您正在使用的hadoop版本。如果是1.x,那么job tracker的web用户界面将出现在url中
http://jobrackerhost:50030
.如果是2.x,那么资源管理器web ui将位于url中
http://resourcemanagerhost:8088
对于启动现有服务,您不必太担心。首先修复主机名问题并尝试启动服务。如果集群中存储了一些重要数据,请不要格式化集群。如果要格式化集群,请同时清除datanode目录。下面给出了一次性启动每个hadoop服务的命令。转到hadoop\u主页/bin