hadoop集群启动遇到的问题,50030,50070端口无法监听

今天一时心血来潮,想把一个30台机器的hadoop集群的dfs.replication参数修改下,以提高运行效率。
于是执行 hadoop/bin/stop-all.sh停掉了集群,修改conf/hadoop-default.xml文件:

<property>
  <name>dfs.replication</name>
  <value>2</value>
  <description>Default block replication.
     The actual number of replications can be specified when the file is created.
     The default is used if replication is not specified in create time.
  </description>
</property>

把文件默认的复制块数由默认的3改成了2。然后将hadoop-default.xml分发到集群的所有节点上。

接着启动 hadoop/bin/start-all.sh,通过ps和jps看进程都很正常,登录各个节点看启动的DataNode和TaskTracker进程也比较正常。但是通过浏览器无法打开页面http://10.*.*.*:50030/jobtracker.jsp和http://10.*.*.*:50070/dfshealth.jsp。netstat查看后发现50030和50070端口没有启动!

初步看了logs,只有ganglia的一个错误(因为之前写hadoop程序经常遇到ganglia的错误,没太在意这个错误),没有其他明显错误。再次尝试通过stop-all和start-all重启还是不行,50030和50070端口监听不了。

这下傻帽了,要是集群挂了就是个小事故了。

后来在同事提醒下,对比了这台机器的log与正常启动hadoop机器的log(如下),发现是卡在了下面的第三行,HttpServer没有启动,50030端口没有监听。

2011-02-17 21:30:53,139 INFO org.apache.hadoop.mapred.JobTracker: ======= job.slots.update.interval : 500(ms) ======
2011-02-17 21:30:53,171 INFO org.apache.hadoop.ipc.metrics.RpcMetrics: Initializing RPC Metrics with hostName=JobTracker, port=9001
2011-02-17 21:32:00,463 INFO org.mortbay.http.HttpServer: Version Jetty/5.1.4
2011-02-17 21:32:00,469 INFO org.mortbay.util.Credential: Checking Resource aliases
2011-02-17 21:32:00,731 INFO org.mortbay.util.Container: Started org.mortbay.jetty.servlet.WebApplicationHandler@6da5db4b
2011-02-17 21:32:00,760 INFO org.mortbay.util.Container: Started WebApplicationContext[/static,/static]
2011-02-17 21:32:00,846 INFO org.mortbay.util.Container: Started org.mortbay.jetty.servlet.WebApplicationHandler@2c22d166
2011-02-17 21:32:00,846 INFO org.mortbay.util.Container: Started WebApplicationContext[/logs,/logs]
2011-02-17 21:32:01,000 INFO org.mortbay.util.Container: Started org.mortbay.jetty.servlet.WebApplicationHandler@41d47b2b
2011-02-17 21:32:01,011 INFO org.mortbay.util.Container: Started WebApplicationContext[/,/]
2011-02-17 21:32:01,013 INFO org.mortbay.http.SocketListener: Started SocketListener on 0.0.0.0:50030

想起来,可能真是ganglia的问题,这个集群前几天刚装过ganglia,于是把haoop/conf/hadoop-metrics.properties 文件改名。后来把namenode机器上的/hadoop/dfs/name/current/edits.new 文件也删了(这个文件大小5G左右,数据丢点总比集群启动不了好)。hadoop终于启动了,看log是进入了安全模式。

Safe mode is ON. The ratio of reported blocks 0.9620 has not reached the threshold 0.9990. Safe mode will be turned off automatically.
3337077 files and directories, 2393909 blocks =5730986 total. Heap Size is1.95 GB /2.6 GB (74%)

这下集群终于可以启动了。。放心了。。等待安全模式结束吧。

不想检查数据块,就直接

bin/hadoop dfsadmin -safemode leave

强制离开安全模式,但是这样会丢失数据。

总结:这个案例中hadoop集群启动时会卡在第三行,启动不了HttpServer,原因应该是启动的时候读取edits.new文件,要将endits.new的信息合并到edits。而这个edits.new文件很大,所以显示启动时卡在了第三行。删了edits.new就能很快执行下面的行,启动httpserver了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注