DBInputFormat用法


输入的数据库数据:




代码:

  1. package hadoop_2_6_0;  
  2.   
  3. import java.io.DataInput;  
  4. import java.io.DataOutput;  
  5. import java.io.IOException;  
  6. import java.sql.PreparedStatement;  
  7. import java.sql.ResultSet;  
  8. import java.sql.SQLException;  
  9.   
  10. import org.apache.hadoop.conf.Configuration;  
  11. import org.apache.hadoop.fs.Path;  
  12. import org.apache.hadoop.io.LongWritable;  
  13. import org.apache.hadoop.io.Text;  
  14. import org.apache.hadoop.io.Writable;  
  15. import org.apache.hadoop.mapreduce.Job;  
  16. import org.apache.hadoop.mapreduce.Mapper;  
  17. import org.apache.hadoop.mapreduce.lib.db.DBConfiguration;  
  18. import org.apache.hadoop.mapreduce.lib.db.DBInputFormat;  
  19. import org.apache.hadoop.mapreduce.lib.db.DBWritable;  
  20. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;  
  21.   
  22. public class DBInputFormatTest {  
  23.   
  24.     public static class MyMapper extends  
  25.             Mapper<LongWritable, MyDBWritable, LongWritable, Text> {  
  26.         final Text v2 = new Text();  
  27.   
  28.         protected void map(LongWritable key, MyDBWritable value,Mapper<LongWritable, MyDBWritable, LongWritable, Text>.Context context)throws InterruptedException, IOException {  
  29.                 v2.set(value.toString());  
  30.                 context.write(key, v2);  
  31.         }  
  32.     }  
  33.   
  34.     public static class MyDBWritable implements Writable,DBWritable{  
  35.         int id;  
  36.         String name;  
  37.         public void write(PreparedStatement statement) throws SQLException {  
  38.             statement.setInt(1, id);  
  39.             statement.setString(2, name);  
  40.         }  
  41.   
  42.         public void readFields(ResultSet resultSet) throws SQLException {  
  43.             this.id=resultSet.getInt(1);  
  44.             this.name=resultSet.getString(2);  
  45.         }  
  46.   
  47.         public void write(DataOutput out) throws IOException {  
  48.             out.write(id);  
  49.             out.writeUTF(name);  
  50.         }  
  51.   
  52.         public void readFields(DataInput in) throws IOException {  
  53.             this.id=in.readInt();  
  54.             this.name=in.readUTF();  
  55.         }     
  56.         public String toString(){  
  57.             return "MyDBWritable[id="+id+",\t"+"name="+name+"]";  
  58.         }  
  59.     }  
  60.   
  61.     public static void main(String[] args) throws Exception {  
  62.         final Configuration conf = new Configuration();  
  63.         DBConfiguration.configureDB(conf, "com.mysql.jdbc.Driver""jdbc:mysql://192.168.1.1:3306/oled""root""mysqladmin");  
  64.         final Job job = Job.getInstance(conf, DBInputFormatTest.class.getSimpleName());  
  65.         // 1.1  
  66.         //FileInputFormat.setInputPaths(job,"hdfs://192.168.1.10:9000/input/hehe");  
  67.         job.setInputFormatClass(DBInputFormat.class);  
  68.         // 1.2  
  69.         job.setMapperClass(MyMapper.class);  
  70.   
  71.         // 1.3   
  72.         //job.setPartitionerClass(HashPartitioner.class);  
  73.         //job.setNumReduceTasks(1);  
  74.         // 1.4  
  75.         // 1.5  
  76.   
  77.         // 2.2  
  78.         job.setOutputKeyClass(LongWritable.class);  
  79.         job.setOutputValueClass(Text.class);  
  80.           
  81.         //  
  82.         DBInputFormat.setInput(job, MyDBWritable.class"select id,name from DB""select count(1) from DB");  
  83.         // 2.3  
  84.         FileOutputFormat.setOutputPath(job, new Path("hdfs://192.168.1.100:9000/DBout1"));  
  85.         //job.setOutputFormatClass(TextOutputFormat.class);  
  86.         job.setJarByClass(DBInputFormatTest.class);  
  87.         job.waitForCompletion(true);  
  88.     }  
  89. }  


输出:

  1. [root@baolibin ~]# hadoop fs -text /DBout1/part-*  
  2. Warning: $HADOOP_HOME is deprecated.  
  3.   
  4. 0       MyDBWritable[id=1,      name=鲍礼彬]  



Console输出:

  1. 15/04/14 21:10:32 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable  
  2. 15/04/14 21:10:32 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.  
  3. 15/04/14 21:10:32 WARN mapred.JobClient: No job jar file set.  User classes may not be found. See JobConf(Class) or JobConf#setJar(String).  
  4. 15/04/14 21:10:34 INFO mapred.JobClient: Running job: job_local486772134_0001  
  5. 15/04/14 21:10:34 INFO mapred.LocalJobRunner: Waiting for map tasks  
  6. 15/04/14 21:10:34 INFO mapred.LocalJobRunner: Starting task: attempt_local486772134_0001_m_000000_0  
  7. 15/04/14 21:10:34 INFO mapred.Task:  Using ResourceCalculatorPlugin : null  
  8. 15/04/14 21:10:34 INFO mapred.MapTask: Processing split: org.apache.hadoop.mapreduce.lib.db.DBInputFormat$DBInputSplit@4abf053f  
  9. 15/04/14 21:10:34 INFO mapred.MapTask: io.sort.mb = 100  
  10. 15/04/14 21:10:34 INFO mapred.MapTask: data buffer = 79691776/99614720  
  11. 15/04/14 21:10:34 INFO mapred.MapTask: record buffer = 262144/327680  
  12. 15/04/14 21:10:34 INFO mapred.MapTask: Starting flush of map output  
  13. 15/04/14 21:10:34 INFO mapred.MapTask: Finished spill 0  
  14. 15/04/14 21:10:34 INFO mapred.Task: Task:attempt_local486772134_0001_m_000000_0 is done. And is in the process of commiting  
  15. 15/04/14 21:10:34 INFO mapred.LocalJobRunner:   
  16. 15/04/14 21:10:34 INFO mapred.Task: Task 'attempt_local486772134_0001_m_000000_0' done.  
  17. 15/04/14 21:10:34 INFO mapred.LocalJobRunner: Finishing task: attempt_local486772134_0001_m_000000_0  
  18. 15/04/14 21:10:34 INFO mapred.LocalJobRunner: Map task executor complete.  
  19. 15/04/14 21:10:34 INFO mapred.Task:  Using ResourceCalculatorPlugin : null  
  20. 15/04/14 21:10:34 INFO mapred.LocalJobRunner:   
  21. 15/04/14 21:10:34 INFO mapred.Merger: Merging 1 sorted segments  
  22. 15/04/14 21:10:35 INFO mapred.Merger: Down to the last merge-pass, with 1 segments left of total size: 47 bytes  
  23. 15/04/14 21:10:35 INFO mapred.LocalJobRunner:   
  24. 15/04/14 21:10:35 INFO mapred.JobClient:  map 100% reduce 0%  
  25. 15/04/14 21:10:35 INFO mapred.Task: Task:attempt_local486772134_0001_r_000000_0 is done. And is in the process of commiting  
  26. 15/04/14 21:10:35 INFO mapred.LocalJobRunner:   
  27. 15/04/14 21:10:35 INFO mapred.Task: Task attempt_local486772134_0001_r_000000_0 is allowed to commit now  
  28. 15/04/14 21:10:35 INFO output.FileOutputCommitter: Saved output of task 'attempt_local486772134_0001_r_000000_0' to hdfs://192.168.1.100:9000/DBout1  
  29. 15/04/14 21:10:35 INFO mapred.LocalJobRunner: reduce > reduce  
  30. 15/04/14 21:10:35 INFO mapred.Task: Task 'attempt_local486772134_0001_r_000000_0' done.  
  31. 15/04/14 21:10:36 INFO mapred.JobClient:  map 100% reduce 100%  
  32. 15/04/14 21:10:36 INFO mapred.JobClient: Job complete: job_local486772134_0001  
  33. 15/04/14 21:10:36 INFO mapred.JobClient: Counters: 18  
  34. 15/04/14 21:10:36 INFO mapred.JobClient:   File Output Format Counters   
  35. 15/04/14 21:10:36 INFO mapred.JobClient:     Bytes Written=37  
  36. 15/04/14 21:10:36 INFO mapred.JobClient:   File Input Format Counters   
  37. 15/04/14 21:10:36 INFO mapred.JobClient:     Bytes Read=0  
  38. 15/04/14 21:10:36 INFO mapred.JobClient:   FileSystemCounters  
  39. 15/04/14 21:10:36 INFO mapred.JobClient:     FILE_BYTES_READ=295  
  40. 15/04/14 21:10:36 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=139062  
  41. 15/04/14 21:10:36 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=37  
  42. 15/04/14 21:10:36 INFO mapred.JobClient:   Map-Reduce Framework  
  43. 15/04/14 21:10:36 INFO mapred.JobClient:     Map output materialized bytes=51  
  44. 15/04/14 21:10:36 INFO mapred.JobClient:     Map input records=1  
  45. 15/04/14 21:10:36 INFO mapred.JobClient:     Reduce shuffle bytes=0  
  46. 15/04/14 21:10:36 INFO mapred.JobClient:     Spilled Records=2  
  47. 15/04/14 21:10:36 INFO mapred.JobClient:     Map output bytes=43  
  48. 15/04/14 21:10:36 INFO mapred.JobClient:     Total committed heap usage (bytes)=323878912  
  49. 15/04/14 21:10:36 INFO mapred.JobClient:     Combine input records=0  
  50. 15/04/14 21:10:36 INFO mapred.JobClient:     SPLIT_RAW_BYTES=78  
  51. 15/04/14 21:10:36 INFO mapred.JobClient:     Reduce input records=1  
  52. 15/04/14 21:10:36 INFO mapred.JobClient:     Reduce input groups=1  
  53. 15/04/14 21:10:36 INFO mapred.JobClient:     Combine output records=0  
  54. 15/04/14 21:10:36 INFO mapred.JobClient:     Reduce output records=1  
  55. 15/04/14 21:10:36 INFO mapred.JobClient:     Map output records=1  





解析:

指明驱动、要访问的数据库、用户名、密码:

  1. DBConfiguration.configureDB(conf, "com.mysql.jdbc.Driver""jdbc:mysql://192.168.1.1:3306/oled""root""mysqladmin");  

设置操作语句:

  1. DBInputFormat.setInput(job, MyDBWritable.class"select id,name from DB""select count(1) from DB");  

根据数据库字段,自定义数据类型,该类实现接口Writable、DBWritable。

  1. public static class MyDBWritable implements Writable,DBWritable 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值