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 jetty的应用相关推荐
- Hadoop参数汇总
Hadoop参数汇总 @(hadoop)[配置] linux参数 以下参数最好优化一下: 文件描述符ulimit -n 用户最大进程 nproc (hbase需要 hbse book) 关闭swap分 ...
- Hadoop/Hive-学习笔记【中级篇】
目录 参考文章 hadoop配置文件详解 core-site.xml篇 hdfs-site.xml篇 参考文章 目的 链接 hadoop配置文件 hadoop配置文件详解系列(一)-core-site ...
- 【深入理解Hadoop原理】Hadoop 参数配置 详解
Hadoop 参数配置 详解 一.常用端口 组件 节点 默认端口 配置 用途说明 HDFS DataNode 50010 dfs.datanode.address datanode服务端口,用于数据传 ...
- hadoop 参数配置
@(hadoop)[配置] linux参数 以下参数最好优化一下: 文件描述符ulimit -n 用户最大进程 nproc (hbase需要 hbse book) 关闭swap分区 设置合理的预读取缓 ...
- Azkaban的介绍、安装与使用
转载:https://blog.csdn.net/Sven119/article/details/90144843 目录 1.概述 1.1.为什么需要工作流调度器 1.2.工作流调度实现方式 1.3. ...
- storm apache java_Apache Storm 示例 Java 拓扑 - Azure HDInsight | Microsoft Docs
您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn. 以 Java 语言创建 ...
- 豌豆荚使用到的开源技术
Credits 豌豆荚使用了以下开源技术,豌豆们一直遵守各项使用协议.感谢作者们,你们让世界更美好. adb Apache Backbone.js boost Bower CEF Chromium d ...
- WeBank/Schedulis部署和开发
一.Schedulis 普通版环境部署准备 一).使用前置 请基于 Linux 操作系统操作(建议 CentOS) 创建新用户 hadoop, 并为该用户赋予 root 权限,用于部署scheduli ...
- Schedulis 普通版环境部署
## Schedulis 普通版环境部署 一).使用前置 请基于 Linux 操作系统操作(建议 CentOS) 创建新用户 hadoop, 并为该用户赋予 root 权限,用于部署schedulis ...
最新文章
- Python之os模块用法
- int和long计算问题
- 网页设计风格变化的一点共性
- java集合是wftc_Java集合
- 下一代Windows系统,Win11来了
- 使用 OpenLDAP 集中管理用户帐号
- Rank Math Pro v2.17.1 SEO插件
- 基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(三)
- 测试用例设计与管理思路整理
- python 函数重载_python中有函数重载吗
- iPhone手机开启定位权限后,仍然无法定位
- weblogic10.3.6安装漏洞补丁
- 看看别人家的待遇,字节跳动薪酬体系我真的酸了
- Jenkins服务器磁盘空间管理策略
- mathpix无法免费?识别公式终极版,看着这篇就够了
- 乐游TGapi接口平台(接口商)
- 《运筹学基础》的思维导图
- 蓝牙音箱硬件设计分享
- matlab二重指针,VC++中函数返回数组指针或者带指针的结构体的编译方式是否可取? - 程序语言 - 小木虫 - 学术 科研 互动社区...
- tl494cn逆变器电路图_用TL494做400W大功率稳压逆变器电路图
热门文章
- Spring - Java/J2EE Application Framework 应用框架 第 15 章 EJB的存取和实现
- MySQL的几个概念:主键,外键,索引,唯一索引
- Java集合容器全面分析
- Spark机器学习库(MLlib)指南
- 我的python之路(四):列表
- a标签中href=javacript:; href=javacript:void(0); href=#区别
- 《CCNP SWITCH 300-115认证考试指南》——第1章 企业园区网络的设计
- Mybatis问题:There is no getter for property named 'unitId' in 'class java.lang.String'
- HTTP 协议详解(超级经典)
- Linux-chown and chmod 命令的使用