MapReduce 对mysql进行操作
了解实现方式
1.创建方法类实现DBWritable,Writable接口
DBWritable接口中实现两个方法
//DBWritable主要是实现对数据库读写操作 所以输出格式是PreparedStatement
//PreparedStatement接口继承并扩展了Statement接口,用来执行动态的SQL语句,即包含参数的
public void write(PreparedStatement stmt ) thorws SQLException{
}
//DBWritable主要是实现对数据库读写操作 所以输入格式是ResultSet
//ResultSet接口类似于一张数据表,用来暂时存放从数据库查询操作所获得的结果集
public void readFields(ResultSet result) thorws SQLException{
}
Writable接口实现两个方法
//Writable接口是对数据流进行操作的,所以输出是DataOutput类对象
public void write(DataOutput out) throws IOException {
}
//Writable接口是对数据流进行操作的,所以输入是DataInput类对象
public void readFields(DataInput in) throws IOException {
}
建立关系数据库连接
//提供数据库配置和创建连接的接口
//DBConfiguration类中提供了一个静态方法创建数据库连接:
//configureDB((Job job,String driverClass,String dbUrl,String userName,String Password))
//job为当前准备执行的作业,driverClasss为数据库厂商提供的访问其数据库的驱动程序,dbUrl为运行数据库的主机的地址,userName和password分别为数据库提供访问地用户名和相应的访问密码。
DBConfiguration.configureDB(conf, "com.mysql.jdbc.Driver", "jdbc:mysql://10.30.59.136:3306/world", "root", "123456");
相应的从关系数据库查询和读取数据的接口
- DBInputFormat:提供从数据库读取数据的格式。
- DBRecordReader:提供读取数据记录的接口。
DBInputFormat.setInput(job, Stu.class, "stu", null, "student_id", fileds1);
相应的向关系数据库直接输出结果的编程接口
- DBOutputFormat:提供向数据库输出数据的格式。
- DBRecordWrite:提供数据库写入数据记录的接口。
数据库连接完成后,即可完成从MapReduce程序向关系数据库写入数据的操作。为了告知数据库将写入哪个表中的哪些字段,DBOutputFormat中提供了一个静态方法来指定需要写入的数据表和字段:
setOutput(Job job,String tableName,String ... fieldName)
//tableName指定即将写入的数据表,后续参数将指定哪些字段数据将写入该表。
2.创建MySQL数据表
1.创建数据库
create database world;
2.创建数据表并导入数据
CREATE TABLE stu (
`id` int(11) NOT NULL,
`student_id` int(11) NULL DEFAULT NULL,
`name` varchar(255) ,
`age` int(11) ,
`sex` varchar(255) ,
`birthday` varchar(255) ,
)
INSERT INTO `stu` VALUES (1, 1, 'zs', 12, '1', '2019-07-17');
INSERT