在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 jetty的应用相关推荐

  1. Hadoop参数汇总

    Hadoop参数汇总 @(hadoop)[配置] linux参数 以下参数最好优化一下: 文件描述符ulimit -n 用户最大进程 nproc (hbase需要 hbse book) 关闭swap分 ...

  2. Hadoop/Hive-学习笔记【中级篇】

    目录 参考文章 hadoop配置文件详解 core-site.xml篇 hdfs-site.xml篇 参考文章 目的 链接 hadoop配置文件 hadoop配置文件详解系列(一)-core-site ...

  3. 【深入理解Hadoop原理】Hadoop 参数配置 详解

    Hadoop 参数配置 详解 一.常用端口 组件 节点 默认端口 配置 用途说明 HDFS DataNode 50010 dfs.datanode.address datanode服务端口,用于数据传 ...

  4. hadoop 参数配置

    @(hadoop)[配置] linux参数 以下参数最好优化一下: 文件描述符ulimit -n 用户最大进程 nproc (hbase需要 hbse book) 关闭swap分区 设置合理的预读取缓 ...

  5. Azkaban的介绍、安装与使用

    转载:https://blog.csdn.net/Sven119/article/details/90144843 目录 1.概述 1.1.为什么需要工作流调度器 1.2.工作流调度实现方式 1.3. ...

  6. storm apache java_Apache Storm 示例 Java 拓扑 - Azure HDInsight | Microsoft Docs

    您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn. 以 Java 语言创建 ...

  7. 豌豆荚使用到的开源技术

    Credits 豌豆荚使用了以下开源技术,豌豆们一直遵守各项使用协议.感谢作者们,你们让世界更美好. adb Apache Backbone.js boost Bower CEF Chromium d ...

  8. WeBank/Schedulis部署和开发

    一.Schedulis 普通版环境部署准备 一).使用前置 请基于 Linux 操作系统操作(建议 CentOS) 创建新用户 hadoop, 并为该用户赋予 root 权限,用于部署scheduli ...

  9. Schedulis 普通版环境部署

    ## Schedulis 普通版环境部署 一).使用前置 请基于 Linux 操作系统操作(建议 CentOS) 创建新用户 hadoop, 并为该用户赋予 root 权限,用于部署schedulis ...

最新文章

  1. Python之os模块用法
  2. int和long计算问题
  3. 网页设计风格变化的一点共性
  4. java集合是wftc_Java集合
  5. 下一代Windows系统,Win11来了
  6. 使用 OpenLDAP 集中管理用户帐号
  7. Rank Math Pro v2.17.1 SEO插件
  8. 基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(三)
  9. 测试用例设计与管理思路整理
  10. python 函数重载_python中有函数重载吗
  11. iPhone手机开启定位权限后,仍然无法定位
  12. weblogic10.3.6安装漏洞补丁
  13. 看看别人家的待遇,字节跳动薪酬体系我真的酸了
  14. Jenkins服务器磁盘空间管理策略
  15. mathpix无法免费?识别公式终极版,看着这篇就够了
  16. 乐游TGapi接口平台(接口商)
  17. 《运筹学基础》的思维导图
  18. 蓝牙音箱硬件设计分享
  19. matlab二重指针,VC++中函数返回数组指针或者带指针的结构体的编译方式是否可取? - 程序语言 - 小木虫 - 学术 科研 互动社区...
  20. tl494cn逆变器电路图_用TL494做400W大功率稳压逆变器电路图

热门文章

  1. Spring - Java/J2EE Application Framework 应用框架 第 15 章 EJB的存取和实现
  2. MySQL的几个概念:主键,外键,索引,唯一索引
  3. Java集合容器全面分析
  4. Spark机器学习库(MLlib)指南
  5. 我的python之路(四):列表
  6. a标签中href=javacript:; href=javacript:void(0); href=#区别
  7. 《CCNP SWITCH 300-115认证考试指南》——第1章 企业园区网络的设计
  8. Mybatis问题:There is no getter for property named 'unitId' in 'class java.lang.String'
  9. HTTP 协议详解(超级经典)
  10. Linux-chown and chmod 命令的使用