当前位置: 代码迷 >> Web前端 >> hadoop namenode后台老板jetty web
  详细解决方案

hadoop namenode后台老板jetty web

热度:949   发布时间:2012-09-12 09:21:30.0
hadoop namenode后台jetty web

?

? 现在开始分析namenode启动时开启的第2类线程,jetty web访问hadoop的功能。hadoop提供了一个很简洁但是很强大的web后台用于管理hdfs与mapreduce等,大家知道java访问web的方式就是servlet的方式,然后jetty这个轻量级的web server又提供了 HTTP server, HTTP client, 和servlet container的功能(见jetty的主页说明),因此选择jetty做为内嵌的web server是最合适不过了。


????????? 实现简单的web server的功能交给了HttpServer这个类,在这个类里设置了一些servlet的映射关系以及一些初始server的各种上下文,最重要的是加载hadoop自带的webapps目录,然后生成一个在jetty中运行的webapp项目,hadoop自带的webapps目录默认包含了以下资源路径:

Java代码?? ??收藏代码
  1. datanode????
  2. hdfs????
  3. job????
  4. secondary????
  5. static????
  6. task??

?

???????? 如果想访问hadoop的jetty web的话,是依据

?

Java代码?? ??收藏代码
  1. dfs.http.address=?0.0?.?0.0?:?50070???

?这个配置来的,这里尤其需要说明的是,这里端口是可以随便修改的只要在1024到65536之间就好了(1024以下是root用户才能使用的端口,如果非root使用需要加s权限,然后65536是port的上限),然后监听地址必须是0.0.0.0,这个地址的含义是不限制ip的,谁都可以连接过来,如果你修改为当前本机ip,那好吧只有你本地发起的连接才有效(这个在tomcat或者jboss启动时可以参考下地址设置问题)

??? 在HttpServer中默认提供了如下2个servlet

Java代码?? ??收藏代码
  1. stacks=??"/stacks"??????????????//获取当前的堆栈信息(不走web的话就是kill?-3或者jstack命令)???
  2. logLevel=?"/logLevel"???????//设置log级别????

?? 同时启动时增加了如下servlet可以访问

?

Java代码?? ??收藏代码
  1. fsck=?"/fsck"???
  2. getimage="/getimage"???
  3. listPaths="/listPaths/*"???
  4. data=?"/data/*"???
  5. checksum=?"/fileChecksum/*"???

?? 如果我们想增加自己的servlet也很简单,只需要调用HttpServer的

Java代码?? ??收藏代码
  1. addServlet(String?name,?String?pathSpec,??
  2. ??????Class<??extends??HttpServlet>?clazz)???

??? 第一个参数是servlet的名字,第2个参数是访问路径,第3个参数就是处理请求的servlet类,和配置一个servlet一样的逻辑,同时HttpServer也支持filter,你也可以实现自己的filter,例如权限验证等。

更多信息请查看?java进阶网?http://www.javady.com

  相关解决方案