用mapreduce实现将mysql数据导出到HDFS上

因为业务需要,需要将一批mysql数据导入到HBASE,现在先将数据从Mysql导出到HDFS。

版本:hadoop CDH4.5,Hbase-0.946

  1、实体类

    YqBean 是我的实体类,请根据自己需要修改,实体类需要 implements Writable, DBWritable。

  2、MR实现

import java.io.IOException;
import java.util.Iterator;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.db.DBConfiguration;
import org.apache.hadoop.mapreduce.lib.db.DBInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

/**
 * @author
 * @version 创建时间:Jul 24, 2014 2:09:22 AM
 * 类说明
 */
public class AccessData {

    public static class DataAccessMap extends Mapper<LongWritable,YqBean,Text,Text>{
        @Override
        protected void map(LongWritable key, YqBean value,Context context)
                throws IOException, InterruptedException {
                System.out.println(value.toString());
                context.write(new Text(), new Text(value.toString()));
        }
    }

    public static class DataAccessReducer extends Reducer<Text,Text,Text,Text>{
        protected void reduce(Text key, Iterable<Text> values,
                Context context)
                throws IOException, InterruptedException {
             for(Iterator<Text> itr = values.iterator();itr.hasNext();)
             {
                     context.write(key, itr.next());
             }
        }
    }
    public static void main(String[] args) throws Exception {

        Configuration conf = new Configuration();
        //mysql的jdbc驱动
        DBConfiguration.configureDB(conf,"com.mysql.jdbc.Driver", "jdbc:mysql://ip:3306/tablename?useUnicode=true&characterEncoding=utf8", "username", "passwd");
        Job job = new Job(conf,"test mysql connection");
        job.setJarByClass(AccessData.class);    

        job.setMapperClass(DataAccessMap.class);
        job.setReducerClass(DataAccessReducer.class);    

        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(Text.class);    

        job.setInputFormatClass(DBInputFormat.class);
        FileOutputFormat.setOutputPath(job, new Path("hdfs://ip:9000/hdfsFile"));    

        //对应数据库中的列名(实体类字段)
       String[] fields = {"id","title","price","author","quantity","description","category_id","imgUrl"};
        DBInputFormat.setInput(job, YqBean.class,"tablename", "sql语句 ", "title", fields);
        System.exit(job.waitForCompletion(true)? 0 : 1);  

    }

}

用mapreduce实现将mysql数据导出到HDFS上

时间: 2024-11-05 13:51:23

用mapreduce实现将mysql数据导出到HDFS上的相关文章

HBase数据导出到HDFS

一.目的 把hbase中某张表的数据导出到hdfs上一份. 实现方式这里介绍两种:一种是自己写mr程序来完成,一种是使用hbase提供的类来完成. 二.自定义mr程序将hbase数据导出到hdfs上 2.1首先看看hbase中t1表中的数据: 2.2mr的代码如下: 比较重要的语句是 job.setNumReduceTasks(0);//为什么要设置reduce的数量是0呢?读者可以自己考虑下 TableMapReduceUtil.initTableMapperJob(args[0], new

mysql数据导出权限问题

mysql数据导出的方法有非常多,比如mysqldump, mysql -e 'sql' > file, 这些都能够非常方便的导出数据,但是在使用普通用户导出数据的时候,出现了问题. 1 select * into outfile "file_path" from my_table 上面的语句也是mysql导出数据的一种方式,在使用普通用户运行语句时.出现了一下错误: 1 ERROR 1045 (28000): Access denied for user 'my_user'@'

MySQL数据导出与导入

发一篇基础的,关于MySQL数据导出导入的文章,目的有二: 1.备忘 2.供开发人员测试 工具 mysql/source 导入mysqldump 导出 应用举例 导出 导出全库备份到本地的目录 mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines --default-character-set=utf8 --lock-all-tables --add-drop-database -A > db.all.sql 导出指定库到本地的目录(

mysql数据导出到excel以及相关计算

mysql 查询出数据之后, 可以选择导出文件 默认是csv文件  如果是整数类型的数据 可以CONCAT('\'', filed) 多加个'就可以变成文本了, 然后以文本编辑器打开csv文件 把'等字符替换为空字符串. 新建一个excel文件,找到数据-->自文本,选择下一步 格式为文本  确定即可 一些基本的excel函数: 计算某个字符或数字等的个数:=COUNTIF(A:A,"测试") 就是在A列的'测试'这个字符串出现的个数 根据身份证号计算性别:=IF(MOD(MID

MySQL数据导出导入【转】

MySQL基础 关于MySQL数据导出导入的文章,目的有二: 1.备忘 2.供开发人员测试 工具 mysqlmysqldump 应用举例 导出 导出全库备份到本地的目录 mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines --default-character-set=utf8 --lock-all-tables --add-drop-database -A > db.all.sql 导出指定库到本地的目录(例如mysql库) my

安装sqoop,并将Mysql中的表数据导出到HDFS下的文本文件

首先是安装mysql数据库.使用 sudo apt-get install mysql-server命令即可安装完成.然后进行表的创建和插入数据.如图. 然后下载sqoop和连接mysql数据库的jar包.接下来是安装sqoop.首先是配置sqoop-env.sh文件.如图. 然后将config-sqoop文件中不需要检查的注释掉.如图. 然后接下来是将sqoop-1.4.4.jar包和连接mysql的jar包copy到hadoop目录下的lib目录中,同时把hadoop-core-1.2.1.

MySql 数据导出/导入一些Tips

最近接触MySql比较多,借此记录下一些知识点. Tips: 1.数据导出为.sql文件时,会对单引号 ' 进行转义处理,最终INSERT 语句中的为 \' 2.插入不重复数据(insert if not exist)时,可以用 INSERT IGNORE或者REPLACE INSERT IGNORE:   插入重复则失败,但会忽略,继续执行下一条. REPLACE:    插入重复会直接覆盖,没有则新增. 以上两条均会导致自增ID不连续问题,INSERT失败会自增,REPLACE是先删除后IN

MYSQL数据导出与导入,secure_file_priv参数设置

https://www.imooc.com/article/41883 MySQL 报错 [Code: 1290, SQL State: HY000]  The MySQL server is running with the –secure-file-priv option so it cannot execute this statement 通过show variables like ‘%secure_file_priv%’; secure_file_priv参数说明 这个参数用来限制数据

使用Sqoop将MySql数据导入到HDFS

##以上完成后在h3机器上配置sqoop-1.4.4.bin__hadoop-2.0.4-alpha.tar.gz //将宿主机上MySql的test库中的users表的数据导入到HDFS,默认Sqoop会起4个Map运行MapReduce进行导入到HDFS,存放在HDFS路径为/user/root/users(user:默认用户,root:MySql数据库的用户,test:表名)目录下有四个输出文件sqoop import --connect jdbc:mysql://192.168.1.10