近期因为一个需求,要把MySQL中的数据按照指定格式同步到HDFS中,以作后续分析使用(实际可以使用sqoop,但这里暂不考虑),实现方法是使用MapReduce程序来实现,但在使用过程中,遇到了java.lang.ClassNotFoundException: com.mysql.jdbc.Driver错误,各种测试、搜索无果。
下面贴出代码
LoginDaysMapReduce
package com.zlikun.learning.mysql.logins;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.lib.db.DBConfiguration;
import org.apache.hadoop.mapreduce.lib.db.DBInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
import java.io.IOException;
/**
* 登录日期mapreduce程序,输出$userId + $date到HDFS中,以供后续使用
* @author zlikun
* @date 2018-01-16 11:39
*/
public class LoginDaysMapReduce extends Configured implements Tool {
/**
* 将数据库中数据映射为:$userId + $date(与1970的相关天数) 格式
*/
public static class LoginDaysMapper extends Mapper {
@Override
protected void map(LongWritable key, TblRecord value, Context context) throws IOException, InterruptedException {
if (value.days > 0) {
context.write(new Text(value.toString()), NullWritable.get());
}
}
}
@