自定义OutputFormat -实现往不同的目录输出文件

本文介绍了如何通过自定义OutputFormat实现MapReduce程序中根据数据不同输出到不同目录的需求。首先阐述了从原始日志中读取数据、使用DBLoader从数据库获取字典数据进行日志增强的流程。接着详细讲解了自定义OutputFormat的关键点,该方法能够根据数据类型将增强成功的日志输出到增强结果目录,失败的则输出到待爬清单目录。
摘要由CSDN通过智能技术生成

代码地址 :
https://gitee.com/tanghongping/hadoopMapReduce/tree/master/src/com/thp/bigdata/myInputFormat

需求:

现有一些原始日志需要做增强解析处理,流程:
1、 从原始日志文件中读取数据
2、 根据日志中的一个URL字段到外部知识库中获取信息增强到原始日志
3、 如果成功增强,则输出到增强结果目录;如果增强失败,则抽取原始数据中URL字段输出到待爬清单目录

分析:

程序的关键点是要在一个mapreduce程序中根据数据的不同输出类型结果到不同的目录,这类灵活的输出需求可以通过自定义的OutputFormat来实现。

DBLoader : 连接数据库,从数据库中将字典数据缓存出来
package com.thp.bigdata.logEnhance;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

/**
 * 数据库连接
 * java.sql包中的接口,它是sun公司为了简化,统一对数据库的操作,定义了一套java操作数据库的规范,
 * 由各个数据库公司自己实现,数据库有mysql oracle等,
 * 而com.mysql.jdbc包中的类是mysql自己实现规范接口的类,
 * 不同的数据库有不同的实现,为了能够只写一套代码,实现跨数据库使用,
 * 书写传统jdbc需要导入的包就使用java.sql包,而不用考虑具体的实现类。
 * @author 汤小萌
 *
 */
public class DBLoader {
	
	/**
	 * 从数据库中将url对应的内容全部放到HashMap中进行缓存
	 */
	public static void dbLoader(Map<String, String> urlContentMap) {
		Connection con = null;
		Statement st = null;
		ResultSet rs = null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			con = DriverManager.getConnection("jdbc:mysql://localhost:3306/urldb", "root", "root");
			st = con.createStatement();
			rs = st.executeQuery("select url, content from url_rule");
			while(rs.next()) {
				urlContentMap.put(rs.getString(1), rs.getString(2));
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			if(rs != null) {
				try {
					rs.close();
				} catch (SQLException e) {
					e.printStackTrace();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值