【发布时间】:2017-04-25 01:30:08
【问题描述】:
hadoop - 2.7.3
我正在创建一个从 HDFS 输入文件读取数据并将数据写入 mysql 的 mapreduce 作业。
在启动连接时抛出错误。没有其他信息,例如连接被拒绝或 classNotFound 异常。简单的 IO 异常,对我来说没有任何意义。
Error: java.io.IOException: com.mysql.jdbc.Driver
at org.apache.hadoop.mapreduce.lib.db.DBOutputFormat.getRecordWriter(DBOutputFormat.java:185)
at org.apache.hadoop.mapred.ReduceTask$NewTrackingRecordWriter.<init>(ReduceTask.java:540)
at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:614)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:389)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
我的 mapreduce 代码:
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
DBConfiguration.configureDB(conf, "com.mysql.jdbc.Driver",
"jdbc:mysql://localhost:3306/db",
"user",
"password");
Job job = Job.getInstance(conf, "test");
job.setJar(DBMapReduce.class);
job.setMapperClass(DbMapper.class);
job.setReducerClass(DbSQLReducer.class);
job.setMapOutputKeyClass(DBKeyWritable.class);
job.setMapOutputValueClass(Text.class);
job.setOutputKeyClass(DBOutputWritable.class);
job.setOutputValueClass(NullWritable.class);
job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(DBOutputFormat.class);
FileInputFormat.addInputPath(job, new Path(args[1]));
DBOutputFormat.setOutput(
job,
"table_name", // output table name
new String[] { "dummy",
"code",
"code_type"
} //table columns
);
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
我已将 mysql-connector 添加到类路径、HADOOP_CLASSPATH、-libjars、引用的库和 lib 文件夹中。这些似乎都不起作用。
任何帮助将不胜感激。
【问题讨论】:
-
几个月前我们遇到了类似的问题。我们必须连接 java 远程调试器才能查看异常中的详细信息,以便我们确定问题。我们还没有找到从系统中获取这些必要细节的方法。
-
我通过将mysql-connect jar添加到hadoop库(例如mapreduce文件夹,hdfs文件夹,common文件夹,yarn文件夹,工具文件夹下的lib)解决了这个问题。我确信 hadoop 正在这些文件夹之一中寻找外部 jar。
标签: java mysql hadoop jdbc mapreduce