1.sqoop的安装
1.1 与hadoop和hive的集成,修改/opt/cdh/sqoop-1.4.5-cdh5.3.6/conf/sqoop-env.sh 文件
1.2 验证安装是否成功 bin/sqoop version 查看sqoop版本
2.sqoop 基本操作
2.1 查看sqoop可用的命令 bin/sqoop help
2.2 查看某个命令的具体用法 bin/sqoop help 命令
2.3 查看可用的数据库列表
bin/sqoop list-databases \
--connect jdbc:mysql://life-hadoop.life.com:3306/ \
--username root \
--password root
2.4 将mysql表中的数据导入到hdfs中
bin/sqoop import \
--connect jdbc:mysql://life-hadoop.life.com:3306/sqoop \
--username root \
--password root \
--table my_user \
--target-dir /user/yanglin/sqoop/import/my_user \
--num-mappers 1
注:如果不指定导入的目录--target-dir 会默认导入到用户根目录 /user/yanglin/
默认导出格式为textfile,字段中间用,隔开
导出格式可以通过
--as-avrodatafile
--as-parquetfile
--as-sequencefile
--as-textfile 默认
同时可以自定只导出指定的列 --columns id,account
可以通过sql语句进行导入数据的清洗 --query 'select id ,account from my_user' 其中where 语句中必须包含$CONDITIONS
bin/sqoop import \
--connect jdbc:mysql://life-hadoop.life.com:3306/sqoop \
--username root \
--password root \
--query 'select id ,account from my_user where $CONDITIONS' \
--target-dir /user/yanglin/sqoop/import/my_user_query \
--num-mappers 1 \
--as-parquetfile
可以指定压缩格式 --compress 和 --compression-codec
bin/sqoop import \
--connect jdbc:mysql://life-hadoop.life.com:3306/sqoop \
--username root \
--password root \
--query 'select id ,account from my_user where $CONDITIONS' \
--target-dir /user/yanglin/sqoop/import/my_user_compress \
--num-mappers 1 \
--as-parquetfile \
--compress \
--compression-codec org.apache.hadoop.io.compress.SnappyCodec
可以指定导入数据的字段间的分割符,默认为,--fields-terminated-by '\t'
bin/sqoop import \
--connect jdbc:mysql://life-hadoop.life.com:3306/sqoop \
--username root \
--password root \
--table my_user \
--target-dir /user/yanglin/sqoop/import/my_user_terminated \
--num-mappers 1 \
--fields-terminated-by '\t'
可以通过指定 --delete-target-dir 在运行前,如果输出目录存在,则删除
2.4.2 增量导入
方法一:使用--query 将指定的输入导入
bin/sqoop import \
--connect jdbc:mysql://life-hadoop.life.com:3306/sqoop \
--username root \
--password root \
--query 'select * from my_user where $CONDITIONS and id>3 and id<7' \
--target-dir /user/yanglin/sqoop/import/my_user_query_where \
--num-mappers 1 \
--fields-terminated-by '\t'
方法二:使用sqoop自带命令,指定--check-column(依据哪一个列进行增量导入),--incremental(增量的方式为追加),--last-value(最后一条数据的id值)
bin/sqoop import \
--connect jdbc:mysql://life-hadoop.life.com:3306/sqoop \
--username root \
--password root \
--table my_user \
--target-dir /user/yanglin/sqoop/import/my_user_table_where \
--num-mappers 1 \
--fields-terminated-by '\t' \
--check-column id \
--incremental append \
--last-value 3 \
--direct
2.4.3 通过指定--direct,我们可以指定通过mysql将数据进行导出,速度更快
2.5 数据导出到rdms
bin/sqoop export \
--connect jdbc:mysql://life-hadoop.life.com:3306/sqoop \
--username root \
--password root \
--table my_user \
--export-dir /user/yanglin/sqoop/export/user \
--num-mappers 1 \
--fields-terminated-by '\t' \
--direct
2.6 将rdmb中的数据导入到hive表中
bin/sqoop import \
--connect jdbc:mysql://life-hadoop.life.com:3306/sqoop \
--table my_user \
--username root \
--password root \
--num-mappers 1 \
--fields-terminated-by '\t' \
--hive-import \
--hive-database chd_hive \
--hive-table user_import
3.使用脚本进行sqoop导入和导出
3.1 编写脚本文件sqoop_import.sql
#使用文件对sqoop进行导入
import
#mysql数据库连接
--connect
jdbc:mysql://life-hadoop.life.com:3306/sqoop
#mysql数据库用户名
--username
root
#mysql数据库密码
--password
root
#mysql数据库要导出的表名
--table
my_user
#导出到hdfs系统中路径
--target-dir
/user/yanglin/sqoop/import/my_user_options
#导出数据中字段的分割符
--fields-terminated-by
'\t'
3.2 运行脚本 --options-file
bin/sqoop --options-file /opt/data/sqoop_import.sql --num-mappers 1