hadoop jetty的应用

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

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

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

 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:

  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类中:

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

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

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

时间: 2024-10-01 02:29:29

hadoop jetty的应用的相关文章

Hadoop参数汇总

linux参数 以下参数最好优化一下: 文件描述符ulimit -n 用户最大进程 nproc (hbase需要 hbse book) 关闭swap分区 设置合理的预读取缓冲区 Linux的内核的IO调度器 JVM参数 JVM方面的优化项Hadoop Performance Tuning Guide Hadoop参数大全 适用版本:4.3.0 主要配置文件: core hdfs yarn mapred 重要性表示如下: 重要 一般 不重要 core-default.xml hadoop.comm

hadoop参数配置

Hadoop参数汇总 linux参数 JVM参数 Hadoop参数大全 core-default.xml hdfs-default.xml yarn-default.xml Hadoop参数汇总 @(hadoop)[配置] linux参数 以下参数最好优化一下: 文件描述符ulimit -n 用户最大进程 nproc (hbase需要 hbse book) 关闭swap分区 设置合理的预读取缓冲区 Linux的内核的IO调度器 JVM参数 JVM方面的优化项Hadoop Performance

hadoop 参数配置

Hadoop参数汇总 @(hadoop)[配置] linux参数 以下参数最好优化一下: 文件描述符ulimit -n 用户最大进程 nproc (hbase需要 hbse book) 关闭swap分区 设置合理的预读取缓冲区 Linux的内核的IO调度器 JVM参数 JVM方面的优化项Hadoop Performance Tuning Guide Hadoop参数大全 适用版本:4.3.0 主要配置文件: core hdfs yarn mapred 重要性表示如下: 重要 一般 不重要 cor

[转]Hadoop参数汇总

出自:https://segmentfault.com/a/1190000000709725 Hadoop参数大全 主要配置文件: core hdfs yarn mapred 重要性表示如下: 重要 一般 不重要 core-default.xml hadoop.common.configuration.version 配置文件的版本. hadoop.tmp.dir=/tmp/hadoop-${user.name} Hadoop的临时目录,其它目录会基于此路径.本地目录. 只可以设置一个值:建议设

hadoop配置参数速查大全

dfs.block.access.key.update.interval=600 dfs.block.access.token.enable=false dfs.block.access.token.lifetime=600 dfs.blockreport.initialDelay=0 dfs.blockreport.intervalMsec=21600000 dfs.blockreport.split.threshold=1000000 dfs.blocksize=134217728 dfs.

【大数据系列】win10不借助Cygwin安装hadoop2.8

一.下载安装包 解压安装包并创建data,name,tmp文件夹 二.修改配置文件 1.core-site.xml <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Licensed under the Apache License, Ver

azkaban的部署以及简单使用

1.工作流调度器的介绍 (1)为什么要使用工作流调度器? ?? - 一个完整的数据分析系统通常都是由大量任务单元组成:shell 脚本程序,java 程序,mapreduce 程序.hive 脚本等?? - 各任务单元之间存在时间先后及前后依赖关系?? - 为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行 (2)常见工作流调度器 ??在 hadoop 领域,常见的工作流调度器有 Oozie, Azkaban,Cascading,Hamake 等 . (3)Oozie与Azka

Hadoop:Windows 7 32 Bit 编译与运行

所需工具 1.Windows 7 32 Bit OS(你懂的) 2.Apache Hadoop 2.2.0-bin(hadoop-2.2.0.tar.gz) 3.Apache Hadoop 2.2.0-src(hadoop-2.2.0-src.tar.gz) 3.JDK 1.7 4.Maven 3.2.1(apache-maven-3.2.1-bin.zip) 5.Protocol Buffers 2.5.0 6.Unix command-line tool Cygwin(Setup-x86.e

Hadoop第3周练习--Hadoop2.X编译安装和实验

1    练习题目 2    编译Hadoop2.X 64bit 2.1  运行环境说明 2.1.1   硬软件环境 2.1.2   集群网络环境 2.2  环境搭建 2.2.1   JDK安装和Java环境变量配置 2.2.2   安装并设置maven 2.2.3   以root用户使用yum安装svn 2.2.4   以root用户使用yum安装autoconf automake libtool cmake 2.2.5   以root用户使用yum安装ncurses-devel 2.2.6