需要获取mapreduce的运行信息,比如运行状态,map,reduce的执行进度.
hadoop 50030端口提供web ui服务,没找到提供json或者xml的服务方式.
于是,查找hadoop 50030的加载:
\org\apache\hadoop\mapred\JobTracker.java:
JobTracker(final JobConf conf, String identifier, Clock clock, QueueManager qm)
-->
private void createInstrumentation()
-->
...
String infoAddr =
NetUtils.getServerAddress(conf, "mapred.job.tracker.info.bindAddress",
"mapred.job.tracker.info.port",
"mapred.job.tracker.http.address");
InetSocketAddress infoSocAddr = NetUtils.createSocketAddr(infoAddr);
String infoBindAddress = infoSocAddr.getHostName();
int tmpInfoPort = infoSocAddr.getPort();
this.startTime = clock.getTime();
infoServer = new HttpServer("job", infoBindAddress, tmpInfoPort,
tmpInfoPort == 0, conf, aclsManager.getAdminsAcl());
infoServer.setAttribute("job.tracker", this);
...
在这里JobTracker启了一个提供http服务的Jetty Server,并且设置了这个jetty实例infoServer的application属性job.tracker为 jobtracker本身(this)
在JobTracker运行节点上有jsp页面:
$HADOOP_HOME/webapps/job/jobtracker.jsp
...
JobTracker tracker = (JobTracker) application.getAttribute("job.tracker");
ClusterStatus status = tracker.getClusterStatus();
ClusterMetrics metrics = tracker.getClusterMetrics();
String trackerName =
StringUtils.simpleHostname(tracker.getJobTrackerMachine());
JobQueueInfo[] queues = tracker.getQueues();
Vector<JobInProgress> runningJobs = tracker.runningJobs();
Vector<JobInProgress> completedJobs = tracker.completedJobs();
Vector<JobInProgress> failedJobs = tracker.failedJobs();
...
从这里获取了jobtracker对象,对此对象操作可获取到job的执行信息.
所以:
尝试仿照jobtracker.jsp页面写满足自己需求的jobtracker_1.jsp
直接拷贝一个测试一下.
访问: :50030/jobtracker_1.jsp 不成功.
设置WEB-INF/web.xml加入对url和servlet的对应关系,发现需要编译出org.apache.hadoop.mapred.jobtracker_1_jsp的类
而且,系统自带的这些jsp文件都以_jsp.class的形式存在于hadoop-core.jar里了.
jsp编译为servlet一遍是中间件(tomcat.resin)直接做的事情,而且每种中间件编译出来的类包是不同的,比如一般放到:
org.apache.jsp包下. 如何放到prg.apache.hadoop.mapred下呢?
先试一下,自己写一个jsp页面让resin,tomcat编译为class,再在web,xml中配置为他org.apache.jsp.xxxx可否.
在写jsp的时候发现,要获取JobTracker的信息.里面有很多变量诸如jobtracker.conf,这些变量都是包外不可见的.所以还不能把这个jsp对应的servlet编译为别的包下的类,只能编译到org.apache.hadoop.mapred包里.
搜索如何手动编译jsp为servlet,参考如下文章:
http://blog.csdn.net/codolio/article/details/5177236
通过org.apache.jasper.JspC来手工编译jsp为servlet.
java -cp /opt/jars/ant.jar:/opt/hadoop-1.0.4/lib/commons-logging-1.1.1.jar:/opt/hadoop-1.0.4/hadoop-ant-1.0.4.jar:/opt/hadoop-1.0.4/lib/commons-el-1.0.jar:/opt/hadoop-1.0.4/lib/jasper-compiler-5.5.12.jar:/opt/hadoop-1.0.4/lib/jasper-runtime-5.5.12.jar:/opt/hadoop-1.0.4/lib/servlet-api-2.5-20081211.jar:/opt/hadoop-1.0.4/lib/jsp-2.1/jsp-api-2.1.jar:/opt/hadoop-1.0.4/lib/commons-io-2.1.jar org.apache.jasper.JspC-classpath /opt/hadoop-1.0.4/hadoop-core-1.0.4.jar:/opt/hadoop-1.0.4/hadoop-ant-1.0.4.jar:/opt/hadoop-1.0.4/lib/commons-logging-1.1.1.jar:/opt/hadoop-1.0.4/lib/commons-logging-api-1.0.4.jar:/opt/hadoop-1.0.4/lib/log4j-1.2.15.jar:/opt/hadoop-1.0.4/lib/commons-io-2.1.jar -p org.apache.hadoop.mapred -compile -v -d dist -uriroot ./ -webxml dist/web.xml xxxxx.jsp
注意:
-p参数可以指定编译出来的servlet的package
通过这种方法应该能得到.class和.java,但我却只得到了.java,我理解可能是因为我引用的jar包不全无法通过编译,没有报错信息,很奇怪.
于是基于这个.java文件自己编译为class打成jar包,放到了$HADOOP_HOME/lib/下.
配置job/WEB-INF/web.xml文件为自己编译的类
ok
分享到:
相关推荐
本篇文章将详细讲解如何利用Hadoop MapReduce实现TF-IDF(Term Frequency-Inverse Document Frequency)算法,这是一种在信息检索和文本挖掘中用于评估一个词在文档中的重要性的统计方法。 首先,我们要理解TF-IDF...
4. **运行Job**:配置好MapReduce作业后,提交到Hadoop集群进行执行。集群会自动调度任务,将工作分配给各个节点。 5. **结果收集**:MapReduce完成后,最终的词频统计结果会被写入HDFS,可以进一步进行可视化或...
总之,Java操作Hadoop MapReduce的基本实践涉及了Map和Reduce阶段的自定义逻辑、数据的分区和排序、以及Job的配置和提交。通过深入学习和实践,开发者可以利用Hadoop MapReduce解决大数据处理中的各种问题。
"Hadoop MapReduce HelloWorld 能调试" 的主题意味着我们将深入理解如何设置、运行以及调试 MapReduce 任务,特别是针对入门级的 "wordcount" 示例。 MapReduce 分为两个主要阶段:Map 阶段和 Reduce 阶段。Map ...
以下是一些关键知识点,旨在帮助你提升 Hadoop MapReduce Job 的性能。 1. **Mapper数量的调整**: Mapper的数量直接影响数据的并行处理能力。每个 Mapper 负责处理输入数据的一部分,因此增加 Mapper 数量可以在...
在这个基于Hadoop MapReduce的招聘信息数据分析项目中,我们聚焦于利用大数据处理技术对海量的招聘信息进行深入挖掘,以获取有价值的职业市场洞察。Hadoop MapReduce是Apache Hadoop框架中的核心组件,它允许开发者...
Hadoop MapReduce是一个用于处理大数据集的软件框架,它能够将应用程序以并行方式运行在成千上万的商用硬件节点上,同时保证了高可靠性与容错能力。它适用于处理多个TB级别的数据集。 在这个框架中,一个MapReduce...
值得注意的是,在使用MapReduce之前,需要有Hadoop环境的搭建,并且确保Hadoop环境能够支持运行不同语言编写的MapReduce程序,如JAVA、C++、Ruby和Python等。这样的跨语言支持,可以使得更多开发者能够利用现有的...
- 执行Job:通过Hadoop的JobTracker提交MapReduce任务,调度执行。 - 结果收集:运行完成后,从HDFS中读取结果文件,进行后续的分析和展示。 6. 应用场景与价值: 这样的统计分析对于高校招生决策、考生志愿填报...
使用Java进行MapReduce开发使得代码可移植性强,可以轻松地在不同版本的Hadoop上运行。 总结来说,Hadoop MapReduce是一个强大的大数据处理工具,它允许开发者利用分布式计算处理海量数据。通过Eclipse这样的IDE,...
import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org....
- 这个应用程序很可能是一个示例,演示了如何在Hadoop MapReduce中实现多表关联并处理Job间的依赖和参数传递。它可能包括多个Job,每个Job负责一个或多个表的处理,并通过特定机制将结果传递给后续的Job。 5. **...
在使用Hadoop MapReduce进行大规模数据处理的过程中,遇到了一个棘手的问题——部分MapReduce作业长时间卡死,严重影响了系统的运行效率和资源利用率。这类问题的出现不仅导致了Hadoop集群资源的长期占用,还使得...
此外,我们还可以通过运行`hadoop classpath`命令来获取运行Hadoop程序所需的完整classpath信息,这对于理解整个系统所依赖的所有JAR文件非常有帮助。 #### 编译、打包Hadoop MapReduce程序 为了能够顺利地编译和...
该项目是关于利用Hadoop MapReduce对短视频主播的数据进行分析,以获取有价值的信息并进行业务洞察。MapReduce是一种分布式计算框架,常用于处理海量数据,而Hadoop是它的一个开源实现。在这个项目中,我们将深入...
文中没有详细说明如何运行作业,但在Hadoop MapReduce中,一般通过Hadoop命令行工具来提交作业,命令通常类似于“hadoop jar wc3.jar”。 整个过程大致如下: 1. 搭建Hadoop环境(以CDH5为基础)。 2. 编写或获取...
Hadoop MapReduce 是 Hadoop 平台根据 MapReduce 原理实现的计算框架,目前已经实现了两个版本,MapReduce ...一个 Hadoop MapReduce 作业(job)的基本工作流程就是,首先把存储在 HDFS 中的输入数据集切分为若干个独
Eclipse与Hadoop的集成使得开发者可以在本地环境中编写、测试和调试MapReduce作业,然后再将其部署到Hadoop集群上运行。 要开始在Eclipse中开发MapReduce项目,首先你需要安装以下关键的JAR包,这些包提供了Hadoop ...