Hadoop之客户端获取NameNode集群信息

初学Hadoop,就以此篇作为开始吧,记录下自己学习过程的点点滴滴。

环境描述:master和slaves在同一局域网,并且只有master可以连接外网,在master上同时部署一个web应用。

问题需求:在web程序里可以输出Map和Reduce的日志信息。

具体解决思路附上代码:

@RequestMapping({"/task/log/"})
    public String showTaskLog(Model model,String jobStr,HttpServletResponse response) throws Exception{
        JobID jobId = JobID.forName(jobStr);
        JobClient tracker = HadoopUtils.getJobClient();
        
	//这里以输出Reduce的日志为主,没有的情况下则输出Map的
        TaskReport[] mtrs = tracker.getMapTaskReports(jobId);
        TaskReport[] rtrs = tracker.getReduceTaskReports(jobId);
        TaskReport[] trs = ArrayUtils.isEmpty(rtrs) ? mtrs : rtrs;
        
        String taskId = "";
        try{
        	taskId = trs[trs.length - 1].getTaskID().toString();
        }catch(Exception e){
        	return null;
        }
	//task.log.url写在properties文件中:task.log.url=http://master:50030/taskdetails.jsp?tipid=%s
	//下面用到一个Html工具,获取到所有日志的超链接href属性值,用于由master发出一个URL请求到具体的DataNode读取日志
        Parser parser = new Parser(String.format(ConstantUtils.getConstant("task.log.url"), taskId));
        NodeList nodeList = parser.extractAllNodesThatMatch(new NodeFilter() {
			private static final long serialVersionUID = -2388460449128537715L;
			@Override
			public boolean accept(Node n) {
				if(n instanceof LinkTag)
					return true;
				return false;
			}
		});
        String logUrl = "";
        for(int i = 0;i < nodeList.size();i++){
        	LinkTag tag = (LinkTag) nodeList.elementAt(i);
        	if("All".equalsIgnoreCase(tag.getStringText())){
        		logUrl = tag.extractLink();
        		break;
        	}
        }
        
        //获取日志信息
        URL url = new URL(logUrl);
        
        BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
        
        response.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();
        
        while(reader.ready()){
        	out.println(reader.readLine());
        }
        reader.close();
        out.flush();
        out.close();
    	return null;
    }


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hadoop集群客户端的作用是向集群中发送、获取文件,执行MapReduce作业等操作。通常情况下,我们会在搭建好的Hadoop集群上搭建一个外围的客户端来进行这些操作。这个客户端可以是一台独立的机器,也可以是已有的一台机器中的一个进程。 搭建Hadoop集群客户端的步骤如下: 1. 首先,确保你已经搭建好了Hadoop集群集群中应该有一个或多个NameNode和多个DataNode组成。 2. 接下来,选择一台机器作为集群客户端,并确保这台机器与Hadoop集群能够正常通信。 3. 在客户端机器上安装Hadoop客户端软件。你可以从Hadoop官方网站上下载Hadoop发行版,并按照官方文档中的指引进行安装。 4. 配置客户端Hadoop环境。根据你的集群配置,你需要在客户端hadoop-env.sh中设置Hadoop的各种环境变量,如JAVA_HOME、HADOOP_CONF_DIR等。 5. 配置客户端Hadoop集群连接信息。在客户端的core-site.xml和hdfs-site.xml中,配置Hadoop集群的连接信息,如NameNode的地址、端口等。 6. 配置客户端的MapReduce和Spark环境(如果需要)。如果你需要在客户端上执行MapReduce或Spark作业,你需要配置相关的环境变量和配置文件,如mapred-site.xml和yarn-site.xml。 7. 测试客户端集群的连接。可以通过命令行界面,使用Hadoop的命令行工具(如hadoop fs -ls)对集群中的文件进行操作,以验证客户端集群的连接是否正常。 通过以上步骤,你就可以搭建一个Hadoop集群客户端,用来发送、获取文件,执行MapReduce作业等操作。这样,你就可以通过客户端来管理和操作你的Hadoop集群了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值