sqoop工具数据迁移
sqoop数据迁移工具
Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
我的环境
- centos6.5
- hadoop2.4
- sqoop-1.4.4.bin__hadoop-2.0.4-alpha.tar.gz 下载地址
- jdk1.7
- mysql
下面为大家介绍mysql的数据导入到hdfs
sqoop是一个工具是可以单机运行的,只需要启动hdfs、yarn(sqoop底层是执行mapreduce程序,所以要启动yarn)和mysql,安装上sqoop就可以实现了。
执行下面命令将mysql中的数据导入到hdfs
sqoop import --connect jdbc:mysql://192.168.1.112:3306/ecshop --username root --password root --table ecs_account_log #--connect [mysql连接地址和database] --username [用户名] --password [密码] --table [表名]
运行时控制台会打印出我们熟悉的mapreduce程序执行过程,执行后可以到hdfs的文件管理界面看到这样的目录
/user/你的登陆用户名/表明
以上是比较简单的语句,我们还可以自定义很多东西实现我们的需求
- 指定输出路径和输出的columns等等
./sqoop import --connect jdbc:mysql://192.168.1.112:3306/ecshop --username root --password root --table ecs_account_log --target-dir /sqoop/td4 -m 2 --fields-terminated-by '\t' --columns "log_id,user_id,user_money" --target-dir [输出路径] -m [map任务个数] --fields-terminated-by [以什么分割] #--columns [获取哪些列]
- 有条件的执行where
./sqoop import --connect jdbc:mysql://192.168.1.112:3306/ecshop --username root --password root --table ecs_account_log --target-dir /sqoop/td5 -m 2 --fields-terminated-by '\t' --where 'log_id > 2' #--where [条件]
- 写复杂sql语句导入到hdfs
./sqoop import --connect jdbc:mysql://192.168.1.112:3306/ecshop --username root --password root --query 'select * from ecs_account_log where log_id > 5 and $CONDITIONS ' --split-by log_id --target-dir /sqoop/td6 -m 2 #--query [自定义查询语句] --split-by [指定分隔参数,通常使用主键id] 注意当你使用--query时 -m 不为1 map任务不为1时就要指定--split-by参数了