设为首页 收藏本站
查看: 1272|回复: 0

[经验分享] Hadoop编程之MapReduce操作Mysql数据库

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-6-6 10:31:01 | 显示全部楼层 |阅读模式
1,首先建立mysql的数据库,表:如下图
1361811068_3342.jpg



下面是MapReduce编程了,需要导入mysql数据库驱动jar包;
首先需要自定义Recoder,这里是CourceRecord
public class CourceRecord implements Writable, DBWritable {
  int id;
  String name;
  int count;
  int no;
  
//从in流反序列化出内容
  @Override
  public void readFields(DataInput in) throws IOException {
    this.id = in.readInt();
    this.name = Text.readString(in);
    this.count = in.readInt();
    this.no = in.readInt();
  }
  //将内容序列化到out流
  @Override
  public void write(DataOutput out) throws IOException {
    out.writeInt(this.id);
    Text.writeString(out, this.name);
    out.writeInt(this.count);
    out.writeInt(this.no);
  }
  @Override
  public void readFields(ResultSet result) throws SQLException {
    this.id = result.getInt(1);
    this.name = result.getString(2);
    this.count = result.getInt(3);
    this.no = result.getInt(4);
  }
  @Override
  public void write(PreparedStatement stmt) throws SQLException {
    stmt.setInt(1, this.id);
    stmt.setString(2, this.name);
    stmt.setInt(3, this.count);
    stmt.setInt(4, this.no);
  }
  @Override
  public String toString() {
    return new String(this.name + " " + this.count + " " + this.no);
  }
}

------------------------------------------------map类-----------------------------------
public class DBMapper extends MapReduceBase implements
    Mapper {
  public void map(LongWritable key, CourceRecord value,
      OutputCollector collector, Reporter reporter)
      throws IOException {
    collector.collect(new LongWritable(value.id),
    new Text(value.toString()));
  }
}

--------------------------------------driver驱动类DB------------------
public class DB {
  public static void main(String[] args) throws IOException {
    String[] argc={"jdbc:mysql://localhost/test","root", "111111"};
  
    try {
      JobConf conf = new JobConf(DB.class);
      Class.forName("com.mysql.jdbc.Driver");
      DBConfiguration.configureDB(conf, "com.mysql.jdbc.Driver",argc[0], argc[1], argc[2]);
      String[] fields = { "id", "name", "count", "no" };
      DBInputFormat.setInput(conf, CourceRecord.class, "tb", null,"id", fields);
      
      conf.setInputFormat(DBInputFormat.class);
      conf.setOutputKeyClass(LongWritable.class);
      conf.setOutputValueClass(Text.class);
  
      
      Path path = new Path("DBOUTPUT");
      FileOutputFormat.setOutputPath(conf, path);
      
      conf.setMapperClass(DBMapper.class);
      conf.setReducerClass(IdentityReducer.class);
      //如果文件存在则删除
      FileSystem hdfs = path.getFileSystem(conf);
      if (hdfs.exists(path)) {
        hdfs.delete(path, true);
      }
      
      JobClient.runJob(conf);
    }
    catch(ClassNotFoundException e) {
        System.err.println("mysql.jdbc.Driver not found");  
    }
  }
------------------------------------------------------

运行:在DBOUTPUT目录下生成一个part-00000的文件,其内容为:
17 hello 28 17
18 hadoop 28 18
19 java 28 19
20 hive 16 20
21 hbase 18 21
22 pig 18 22

实例是跑起来了,主要是DB的一个配置,相关设置函数:
DBConfiguration.configureDB (JobConf job, String  driverClass, String Url, String userName, String passwd)

DBInputFormat.setInput(JobConf job, Class inputClass, String tableName, String conditions,String orderBy, String fieldNames)

DBOutputFormat.setOut(JobConf job,String tablename,String fieldNames);
eg:DBOutputFormat.setOut(job,"tb",28,"mahout",30,401)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-20256-1-1.html 上篇帖子: 写好Hive 程序的五个提示 下篇帖子: Hadoop 2.0 NameNode HA和Federation实践 数据库
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表