hadoop jetty的应用

简介:

  在hadoop中很多地方都用到了servlet,并且使用jetty作为servlet的容器来提供http的服务,其主要是通过org.apache.hadoop.http.HttpServer类实现的,HttpServer类是对Jetty的简单封装,通过调用HttpServer类的addServlet方法增加可以实现增加servlet到jetty的功能:

1
2
3
4
5
   public  void  addServlet(String name, String pathSpec,
       Class<?  extends  HttpServlet> clazz) {      //名称,url访问路径,处理类
     addInternalServlet(name, pathSpec, clazz,  false );
     addFilterPathMapping(pathSpec, webAppContext);
   }

默认在HttpServer的构造函数中,会调用addDefaultServlets添加需要增加的servlets:

1
2
3
4
5
6
7
8
9
10
11
  public  HttpServer(String name, String bindAddress,  int  port,
       boolean  findPort, Configuration conf, AccessControlList adminsAcl,
       Connector connector, String[] pathSpecs)  throws  IOException {
....
     webAppContext =  new  WebAppContext();
     webAppContext.setDisplayName(name);
     webAppContext.setContextPath(  "/" );
     webAppContext.setWar(appDir +  "/"  + name);
....
    addDefaultServlets();
....

启动addDefaultServlets定义了默认加载的servlet:

1
2
3
4
5
6
7
8
   protected  void  addDefaultServlets() {
     // set up default servlets
     addServlet( "stacks"  "/stacks"  , StackServlet. class );
     addServlet( "logLevel" "/logLevel" , LogLevel.Servlet. class );
     addServlet( "metrics" "/metrics" , MetricsServlet. class );
     addServlet( "jmx" "/jmx" , JMXJsonServlet. class );
     addServlet( "conf" "/conf" , ConfServlet. class );
   }

hadoop在多个地方都用到了HttpServer这个类:

比如在org.apache.hadoop.hdfs.server.datanode.DataNode类中:

1
DataNode的构造函数--->startDataNode-->initDataXceiver+startInfoServer

其中startInfoServer就是调用HttpServer类启动jetty的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
private  HttpServer infoServer =  null ;
...
private  void  startInfoServer(Configuration conf)  throws  IOException {
   // create a servlet to serve full-file content
   InetSocketAddress infoSocAddr = DataNode.getInfoAddr(conf);
   String infoHost = infoSocAddr.getHostName();
   int  tmpInfoPort = infoSocAddr.getPort();
   this .infoServer = (secureResources ==  null )
      new  HttpServer( "datanode" , infoHost, tmpInfoPort, tmpInfoPort ==  0 ,
          conf,  new  AccessControlList(conf.get(DFS_ADMIN,  " " )))
      new  HttpServer( "datanode" , infoHost, tmpInfoPort, tmpInfoPort ==  0 ,
          conf,  new  AccessControlList(conf.get(DFS_ADMIN,  " " )),
          secureResources.getListener());
   LOG.info( "Opened info server at "  + infoHost +  ":"  + tmpInfoPort);
.....
   this .infoServer.addInternalServlet( null "/streamFile/*" , StreamFile. class );  //添加datanode专属的servlet
   this .infoServer.addInternalServlet( null "/getFileChecksum/*" ,
       FileChecksumServlets.GetServlet. class );
   this .infoServer.setAttribute( "datanode" this );
   this .infoServer.setAttribute(JspHelper.CURRENT_CONF, conf);
   this .infoServer.addServlet( null "/blockScannerReport" ,
                              DataBlockScanner.Servlet. class );
   if  (WebHdfsFileSystem.isEnabled(conf, LOG)) {
     infoServer.addJerseyResourcePackage(DatanodeWebHdfsMethods. class
         .getPackage().getName() +  ";"  + Param. class .getPackage().getName(),
         WebHdfsFileSystem.PATH_PREFIX +  "/*" );
   }
   this .infoServer.start();
}

小结如下:

1)HttpServer是对Jetty的简单封装

2)hadoop各个组件都会用到HttpServer,datanode/namenode,resourcemanager等

其主要功能有:Hadoop的内部状态显示,运行和管理

3)HttpServer的addDefaultServlets方法定义了通用的几个servlet(比如更改日志级别的servlet),在每个类中又会定义属于自己的servlet



本文转自菜菜光 51CTO博客,原文链接:http://blog.51cto.com/caiguangguang/1592799,如需转载请自行联系原作者

相关文章
|
存储 分布式计算 Hadoop
基于docker的Hadoop环境搭建与应用实践(脚本部署)
本文介绍了Hadoop环境的搭建与应用实践。对Hadoop的概念和原理进行了简要说明,包括HDFS分布式文件系统和MapReduce计算模型等,主要通过脚本的方式进行快捷部署,在部署完成后对HDFS和mapreduce进行了测试,确保其功能正常。
|
存储 负载均衡 Java
Jetty技术深度解析及其在Java中的实战应用
【9月更文挑战第3天】Jetty,作为一款开源的、轻量级、高性能的Java Web服务器和Servlet容器,自1995年问世以来,凭借其卓越的性能、灵活的配置和丰富的扩展功能,在Java Web应用开发中占据了举足轻重的地位。本文将详细介绍Jetty的背景、核心功能点以及在Java中的实战应用,帮助开发者更好地理解和利用Jetty构建高效、可靠的Web服务。
869 2
|
分布式计算 搜索推荐 Hadoop
03 Hadoop国内外应用案例介绍
03 Hadoop国内外应用案例介绍
813 0
|
数据采集 分布式计算 搜索推荐
Hadoop学习---7、OutputFormat数据输出、MapReduce内核源码解析、Join应用、数据清洗、MapReduce开发总结(一)
Hadoop学习---7、OutputFormat数据输出、MapReduce内核源码解析、Join应用、数据清洗、MapReduce开发总结(一)
|
资源调度 分布式计算 监控
【揭秘Hadoop YARN背后的奥秘!】从零开始,带你深入了解YARN资源管理框架的核心架构与实战应用!
【8月更文挑战第24天】Hadoop YARN(Yet Another Resource Negotiator)是Hadoop生态系统中的资源管理器,为Hadoop集群上的应用提供统一的资源管理和调度框架。YARN通过ResourceManager、NodeManager和ApplicationMaster三大核心组件实现高效集群资源利用及多框架支持。本文剖析YARN架构及组件工作原理,并通过示例代码展示如何运行简单的MapReduce任务,帮助读者深入了解YARN机制及其在大数据处理中的应用价值。
326 0
|
SQL 机器学习/深度学习 存储
Hadoop生态系统中的数据查询与分析技术:Hive和Pig的比较与应用场景
Hadoop生态系统中的数据查询与分析技术:Hive和Pig的比较与应用场景
|
数据采集 缓存 分布式计算
Hadoop学习---7、OutputFormat数据输出、MapReduce内核源码解析、Join应用、数据清洗、MapReduce开发总结(二)
Hadoop学习---7、OutputFormat数据输出、MapReduce内核源码解析、Join应用、数据清洗、MapReduce开发总结(二)
|
分布式计算 Ubuntu Hadoop
Hadoop生态系统中的云计算与容器化技术:Apache Mesos和Docker的应用
Hadoop生态系统中的云计算与容器化技术:Apache Mesos和Docker的应用
|
分布式计算 Hadoop 大数据
Hadoop生态系统中的安全性与权限管理:Kerberos和Apache Ranger的应用
Hadoop生态系统中的安全性与权限管理:Kerberos和Apache Ranger的应用
|
存储 资源调度 分布式计算
Hadoop生态系统中的资源管理与调度技术:YARN的原理与应用案例
Hadoop生态系统中的资源管理与调度技术:YARN的原理与应用案例

相关实验场景

更多