hadoop与mysql数据库相连读出数据

转自:http://blog.csdn.net/qwertyu8656/article/details/6426054

用0.20.2版本 有些类已经过时 但必须要用 因为新版本对数据库连接支持不够

运行mysql创建数据库School,建立teacher表,并自行填写值

[c-sharp] view plaincopy

  1. DROP TABLE IF EXISTS `school`.`teacher`;
  2. CREATE TABLE  `school`.`teacher` (
  3. `id` int(11) default NULL,
  4. `name` char(20) default NULL,
  5. `age` int(11) default NULL,
  6. `departmentID` int(11) default NULL
  7. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

在eclipse中运行编译通过 但要加入必须的库 以及 hadoop0.20.2的eclipse的插件

[c-sharp] view plaincopy

  1. import java.io.IOException;
  2. import org.apache.hadoop.fs.Path;
  3. import org.apache.hadoop.io.LongWritable;
  4. import org.apache.hadoop.io.Text;
  5. import org.apache.hadoop.mapred.FileOutputFormat;
  6. import org.apache.hadoop.mapred.JobClient;
  7. import org.apache.hadoop.mapred.JobConf;
  8. import org.apache.hadoop.mapred.lib.IdentityReducer;
  9. import org.apache.hadoop.mapred.lib.db.DBConfiguration;
  10. import org.apache.hadoop.mapred.lib.db.DBInputFormat;
  11. public class DBAccess2 {
  12. public static void main(String[] args) throws IOException {
  13. JobConf conf = new JobConf(DBAccess2.class);
  14. conf.setOutputKeyClass(LongWritable.class);
  15. conf.setOutputValueClass(Text.class);
  16. conf.setInputFormat(DBInputFormat.class);
  17. FileOutputFormat.setOutputPath(conf, new Path("hdfs://localhost:9000/dbout"));
  18. DBConfiguration.configureDB(conf,"com.mysql.jdbc.Driver",
  19. "jdbc:mysql://localhost:3306/school","root","zxcvbnm");
  20. String [] fields = {"id", "name", "age", "departmentID"};
  21. DBInputFormat.setInput(conf, TeacherRecord.class, "teacher",
  22. null, "id", fields);
  23. conf.setMapperClass(DBAccessMapper.class);
  24. conf.setReducerClass(IdentityReducer.class);
  25. JobClient.runJob(conf);
  26. }
  27. }

注:请自行修改数据库连接语句 用户名 密码 等等。

[c-sharp] view plaincopy

  1. import java.io.IOException;
  2. import org.apache.hadoop.io.LongWritable;
  3. import org.apache.hadoop.io.Text;
  4. import org.apache.hadoop.mapred.MapReduceBase;
  5. import org.apache.hadoop.mapred.Mapper;
  6. import org.apache.hadoop.mapred.OutputCollector;
  7. import org.apache.hadoop.mapred.Reporter;
  8. public class DBAccessMapper extends MapReduceBase implements
  9. Mapper<LongWritable, TeacherRecord, LongWritable, Text> {
  10. @Override
  11. public void map(LongWritable key, TeacherRecord value,
  12. OutputCollector<LongWritable, Text> collector, Reporter reporter)
  13. throws IOException {
  14. // TODO Auto-generated method stub
  15. collector.collect(new LongWritable(value.id),
  16. new Text(value.toString()));
  17. }
  18. }

[c-sharp] view plaincopy

  1. import java.io.DataInput;
  2. import java.io.DataOutput;
  3. import java.io.IOException;
  4. import java.sql.PreparedStatement;
  5. import java.sql.ResultSet;
  6. import java.sql.SQLException;
  7. import org.apache.hadoop.io.Text;
  8. import org.apache.hadoop.io.Writable;
  9. import org.apache.hadoop.mapred.lib.db.DBWritable;
  10. public class TeacherRecord implements Writable, DBWritable{
  11. int id;
  12. String name;
  13. int age;
  14. int departmentID;
  15. @Override
  16. public void readFields(DataInput in) throws IOException {
  17. // TODO Auto-generated method stub
  18. this.id = in.readInt();
  19. this.name = Text.readString(in);
  20. this.age = in.readInt();
  21. this.departmentID = in.readInt();
  22. }
  23. @Override
  24. public void write(DataOutput out) throws IOException {
  25. // TODO Auto-generated method stub
  26. out.writeInt(this.id);
  27. Text.writeString(out, this.name);
  28. out.writeInt(this.age);
  29. out.writeInt(this.departmentID);
  30. }
  31. @Override
  32. public void readFields(ResultSet result) throws SQLException {
  33. // TODO Auto-generated method stub
  34. this.id = result.getInt(1);
  35. this.name = result.getString(2);
  36. this.age = result.getInt(3);
  37. this.departmentID = result.getInt(4);
  38. }
  39. @Override
  40. public void write(PreparedStatement stmt) throws SQLException {
  41. // TODO Auto-generated method stub
  42. stmt.setInt(1, this.id);
  43. stmt.setString(2, this.name);
  44. stmt.setInt(3, this.age);
  45. stmt.setInt(4, this.departmentID);
  46. }
  47. @Override
  48. public String toString() {
  49. // TODO Auto-generated method stub
  50. return new String(this.name + " " + this.age + " " + this.departmentID);
  51. }
  52. }

hadoop与mysql数据库相连读出数据

时间: 2024-08-29 07:33:14

hadoop与mysql数据库相连读出数据的相关文章

一步一步跟我学习hadoop(7)----hadoop连接mysql数据库运行数据读写数据库操作

为了方便 MapReduce 直接訪问关系型数据库(Mysql,Oracle).Hadoop提供了DBInputFormat和DBOutputFormat两个类.通过DBInputFormat类把数据库表数据读入到HDFS,依据DBOutputFormat类把MapReduce产生的结果集导入到数据库表中. 执行MapReduce时候报错:java.io.IOException: com.mysql.jdbc.Driver,通常是因为程序找不到mysql驱动包.解决方法是让每一个tasktrac

一步一步跟我学习hadoop(7)----hadoop连接mysql数据库执行数据读写数据库操作

为了方便 MapReduce 直接访问关系型数据库(Mysql,Oracle),Hadoop提供了DBInputFormat和DBOutputFormat两个类.通过DBInputFormat类把数据库表数据读入到HDFS,根据DBOutputFormat类把MapReduce产生的结果集导入到数据库表中. 运行MapReduce时候报错:java.io.IOException: com.mysql.jdbc.Driver,一般是由于程序找不到mysql驱动包.解决方法是让每个tasktrack

本地通过Eclipse链接Hadoop操作Mysql数据库问题小结

前一段时间,在上一篇博文中描述了自己抽时间在构建的完全分布式Hadoop环境过程中遇到的一些问题以及构建成功后,通过Eclipse操作HDFS的时候遇到的一些问题,最近又想进一步学习学习Hadoop操作Mysql数据库的一些知识,在这里网上存在很多分歧,很多人可能会笑话,用那么“笨重”的Hadoop来操作数据库,脑子有问题吧,Hadoop的HDFS优势在于处理分布式文件系统,这种说法没有任何错误,数据库的操作讲究“安全.轻便.快捷”,用Hadoop操作完全是不符合常理啊,那为啥还要学习这个东西呢

使用Sqoop1.4.4将MySQL数据库表中数据导入到HDFS中

问题导读:         1.--connect参数作用? 2.使用哪个参数从控制台读取数据库访问密码? 3.Sqoop将关系型数据库表中数据导入HDFS基本参数要求及命令? 4.数据默认导入HDFS文件系统中的路径? 5.--columns参数的作用? 6.--where参数的作用? 一.部分关键参数介绍 参数介绍 --connect <jdbc-uri> 指定关系型数据库JDBC连接字符串 --connection-manager <class-name> 指定数据库使用的管

使用sqoop将MySQL数据库中的数据导入Hbase

使用sqoop将MySQL数据库中的数据导入Hbase 前提:安装好 sqoop.hbase. 下载jbdc驱动:mysql-connector-java-5.1.10.jar 将 mysql-connector-java-5.1.10.jar 拷贝到 /usr/lib/sqoop/lib/ 下 MySQL导入HBase命令: sqoop import --connect jdbc:mysql://10.10.97.116:3306/rsearch --table researchers --h

【转】mysql数据库读写分离数据同步

转载请注明来源:mysql数据库读写分离数据同步 mysql数据库读写分离数据同步 我是用了两个xp(一个主的,一个从的)的系统测试成功的,linux系统我也做测试了,没有成功,不过我想我所遇到的问题是同一个问题,xp下的可以成功,linux下的应该也可以成功,稍候会测试,然后更新结果! PS:刚测试了下linux 可以同步成功,主服务器是xp,从服务器是centos,可以成功. 例: A机器 192.168.0.2 B机器 192.168.0.3 两个机器可以ping通,互相访问 先配置主服务

OpenLayers添加点【php请求MySQL数据库返回GeoJSON数据】

php请求MySQL数据库返回GeoJSON数据的实现方法请参见: http://www.cnblogs.com/marost/p/6234514.html OpenLayers[v3.19.1-dist]添加GeoJSON数据源图层 <!doctype html> <html lang="en"> <head> <link rel='stylesheet' href='ol.css'> <style> #map { heig

运用反射原理的简单工厂模式和运用反射原理从数据库里读出数据直接封装到实体集合里

一:简单工厂 最初学习的一个运用简单工厂的例子是做一个计算器: 首先是接口 public interface Cal { public double Calcu(double num1,double num2); } 然后是加减乘除类实现计算接口: public class Add implements Cal{ @Override public double Calcu(double num1, double num2) { return num1+num2; } } 再写一个工厂类,里面有一

EF 连接MySQL 数据库 ?保存中文数据后乱码问题

EF 连接MySQL 数据库  保存中文数据后乱码问题 采用Code First 生成的数据库,MySQL数据库中,生成的表的编码格式为***** 发现这个问题后,全部手动改成UTF8(图是另一个表的图),否则插入的数据,就会全部变成乱码 修改后可以正常插入数据(注意!!这里是直接用SQL 代码插入的数据) 之后用代码界面保存数据,如图 但数据中却变成乱码: 修改方法: 在连接MySQL的连接字符串中,加入配置文件信息:Character Set=utf8  来自为知笔记(Wiz)