解决2.5.0-mr1-cdh5.2.0-SNAPSHOT版本下oracle数据库插入数据报错
在使用mapreduce将计算数据插入oracle库中报错:
java.io.IOException: ORA-00911 ;
我引用的包是
org.apache.hadoop.mapreduce.lib.db;
org.apache.hadoop hadoop-core;
结果跟发现在源码里org.apache.hadoop.mapreduce.lib.db.DBOutputFormat.DBRecordWriter.close(TaskAttemptContext context)throws IOException ; 的第110行报错.throw new IOException(ex.getMessage());
在org.apache.hadoop.mapreduce.lib.db.DBOutputFormat类里发现了constructQuery ()发现oracle具体插入操作的实现中出现拼接 SQL字符串时对“,”’的判断。如下图:
我们知道在JAVA程序中拼接的SQL末尾是不能 加分号的,这样会造成的SQL错误!
解决办法
将自己写的DBOutputFormat.ava 打JAR包,然后用压缩文件的格式打开找到DBOutputFormat.class并替换hadoop-core-1.1.1.jar中的DBOutputFormat.class,这样就不用每次都重写它的方法了。