Mapreduce job spitting java.io.IOException:com.mysql.jdbc.Driver

时间:2017-04-25 01:30:08

标签: java mysql hadoop jdbc mapreduce

hadoop - 2.7.3

我正在创建一个mapreduce作业,它从HDFS输入文件读取数据并将数据写入mysql。

启动连接时抛出错误。没有其他信息,如连接拒绝或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添加到classpath,HADOOP_CLASSPATH,-libjars,引用的库和lib文件夹。这些似乎都不起作用。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

在查看此特定堆栈跟踪时,这看起来像是一个权限问题:

java.security.AccessController.doPrivileged上的

(本机方法) 在javax.security.auth.Subject.doAs(Subject.java:415) 在org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698)

我想纱线用户对临时目录没有足够的写访问权。

答案 1 :(得分:0)

希望此网址有助于跟踪问题:

https://examples.javacodegeeks.com/core-java/io/ioexception/java-io-ioexception-how-to-solve-ioexception/

使用try和catch跟踪问题然后可能会修复。