背景:sqoop主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。这里主要以mysql为例介绍一下,导入导出的使用方法。
详情参考官方文档:http://sqoop.apache.org/docs/1.4.5/SqoopUserGuide.html#_purpose_4
1.首先安装对应版本的sqoop
2.拷贝mysql的jar包到,/home/sqoop/lib 下
3.使用方式介绍
导入数据到hdfs
1)方式一sqoop import \
--connect jdbc:mysql://localhost/db \
--username root \
--password 123456 \
--table table123 \
--target-dir /user/foo/joinresults \ #hdfs路径
--num-mappers 1 \ #map数量
--as-parquetfile \ #设置文件格式
--columns id,name \ #可设置要导出的列
2)方式二sql的方式
sqoop import \
--connect jdbc:mysql://localhost/db \
--username root \
--password 123456 \
--query 'select * from table123 WHERE $CONDITIONS' \ #where是必须的
--target-dir /user/foo/joinresults \ #hdfs路径
--delete-target-dir \ #若目标目录已存在,则删除
--compress \ #指定压缩
--compression-codec org.apache.hadoop.io.compress.snappyCodec \ #指定压缩方式snappy
--fields-terminated-by '|'
3)导入增量数据除了在sql里用where条件过滤,还可以有命令选项如下
sqoop import \
--connect jdbc:mysql://localhost/db \
--username root \
--password 123456 \
--query 'select * from table123 WHERE $CONDITIONS' \ #where是必须的
--target-dir /user/foo/joinresults \ #hdfs路径
#--delete-target-dir \ #若目标目录已存在,则删除(不能通下边的append追加,一起使用)
--check-column \ #检查哪一列,如id
--incremental append \ #追加,还可选 lastmodified
--last-value 7636 \ #id大于7636的
4)快速导出数据
sqoop import \
--connect jdbc:mysql://localhost/db \
--username root \
--password 123456 \
--query 'select * from table123 WHERE $CONDITIONS' \ #where是必须的
--target-dir /user/foo/joinresults \ #导入hdfs路径
--delete-target-dir \ #若目标目录已存在,则删除(不能通下边的append追加,一起使用)
--direct \ #用这个命令从mysql导出的时候就不走mapreduce而是直接import的,速度用比以前快很多。
5)数据导出
sqoop export \
--connect jdbc:mysql://localhost/db \
--username root \
--password 123456 \
--table table123 \
--export-dir /user/foo/joinresults \ #导出hdfs路径
6)导入导出到hive
sqoop import \
--connect jdbc:mysql://localhost/db \
--username root \
--password 123456 \
--query 'select * from table123 WHERE $CONDITIONS' \ #where是必须的
--fields-terminated-by '|'
--hive-import \
--hive-database default \
--hive-table table 123 \
导出hive到mysql
sqoop export \
--connect jdbc:mysql://localhost/db \
--username root \
--password 123456 \
--table table123 \
--export-dir /user/foo/joinresults \ #导出hive表数据存储路径
--input-fields-terminated-by '|' \ #分隔符
注意:
1.4.6以前的版本从database导入数据到hive的话,hive存储格式如果为parquet的话,导入会出错
脚本执行的方式
bin/sqoop --option-file /opt/script/sqoop_test.txt --table tablename(还可以用这种方式传递参数)
vi sqoop_test.txt
import
--connect
jdbc:mysql://localhost/db
--username
root
--password
123456
--table
table123
--target-dir
/user/foo/joinresults
--num-mappers
1