sqoop介绍及使用

sqoop

1、sqoop作用是数据迁移的一个工具
2、将传统关系型数据库数据迁移到大数据平台上(例如hive hdfs hbase)
3、sqoop的 迁入从传统关系型数据库=====》大数据平台上
迁出 大数据平台=====》传统关系型数据库平台

sqoop的本质

sqoop的本质就是将迁入迁出命令转换为mapperreducer任务 相当于定制了mapreducer的输入输出类·
**例如:**迁入
从关系型数据库mysql读取数据写到hdfs上
mapper从数据库读取数据相当于定义了mapper的输入类 然后输出到 hdfs上

sqoop命令
sqoop 开启sqoop的客户端
–counnect 指定数据库的连接(mysql的连接)
– username 指定数据库的用户名(mysql的用户名)
–passsword 指定数据库的密码(mysql的登录密码)
****注意:“–”不可以省略

查询所有数据库列表
sqoop list-databases \

–connect jdbc:mysql://hadoop03:3306/ \
–username root
–password root

查询bd1901库中所有的表
sqoop list-tables
–connect jdbc:mysql://hadoop03:3306/bd1901
–username root
–password root
""是用于换行的主要是写代码是整齐可以不加把所有代码写在一行也可以

sqoop help 查看帮助文档
sqoop help 具体命令 查看某一个命令的帮助文档
import 数据导入

数据导入
mysql==》hdfs
导入到默认的路径下
sqoop import
–connect jdbc:mysql://hadoop03:3306/mysql
–username root
–password root
–table help_keyword
-m 1
–table 指定需要导入到hdfs的mysql中的表名
–m 指定maptask的个数

指定导入到hdfs的路径
sqoop import
–connect jdbc:mysql://hadoop03:3306/mysql
–username root
–password root
–table help_keywork
–target-dir /data/sqoop/nydata/help_keyword
–fields-terminated-by ‘\t’
-m 1
–target-dir 导入到hdfs的路径
–field-terminated-by 设置导入到hdfs的字段之间分割符

指定过滤条件where导入hdfs
sqoop import
–connect jdbc:mysql://hadoop03:3306:mysql
–username root
–password root
*–where “help_keyword_id>200” *
–table help_keywork
–target-dir /data/sqoop/nydata/help_keyword
–fields-terminated-by ‘\t’
-m 1

指定导入hdfs部分列 --columns多列之间**,**隔开
sqoop import
–connect jdbc:mysql://hadoop03:3306/mysql
–username root
–password root
*– columns “name” *
–table help_keywork
–target-dir /data/sqoop/nydata/help_keyword
–fields-terminated-by ‘\t’
-m 1

指定sql查询结果导入到dfs上
sqoop import
–connect jdbc:mysql://hadoop03:3306/
–username root
–password root
*–query ‘select * from mysql.help_keyword where help_keyword_id >200 and $CONDITIONS¥’ *
–split-by help_keyword_id
–fields-terminated-by ‘\t’
-m 1

注意:这个–query不能和 --where --columns 一起用的
正常的sql执行的时候 报错
Query [select * from mysql.help_keyword where help_keyword_id > 200] must contain ' C O N D I T I O N S i n W H E R E c l a u s e . s q o o p s q l w h e r e CONDITIONS' in WHERE clause. sqoop的语法要求 要求sql查询语句中的where过滤条件中 必须包含 CONDITIONS
$CONDITIONS 没有实际意义 纯属语法要求

mysql==>hive

导入到hive的默认路径
sqoop import
–connect jdbc:mysql://hadoop:3306/mysql
–username root
–password root
–table help_keyword
–hive-import
–hive-overwrite
–create-hive-table
–delete-target-dir
–hive-database weibo
–hive-table new_help_keyword

--delete-target-dir \删除hdfs默认路径
–create-hive-table 创建hive表的
–hive-database 指定hive的数据库的
–hive-table 指定hive中的表名的

增量数据导入
每次导入到大数据平台的数据 只是新增数据

全量数据导入:
每次导入到大数据平台 将所有数据全部导入

sqoop import
–connect jdbc:mysql://hdp03:3306/mysql
–username root
–password 123456
–table help_keyword
–target-dir /data/sqoop/mydata/help_increment
–incremental append
–check-column help_keyword_id
–last-value 200
-m 1

–check-column Source column to check for incremental change
指定用于标识增量的键 用于检验 一般指定主键

增量导入的方式 id
append 追加 *****
lastmodified 最后一次修改的时间

**

数据导出

**
大数据平台 结果数据—mysql中
1)hdfs-mysql
sqoop export
–connect jdbc:mysql://hdp03:3306/sqoopdatabase
–username root
–password 123456
–table sqoopfur
–export-dir /data/sqoop/mydata/help_keyword
–fields-terminated-by '\t’

–table 指定mysql中的表 存储hdfs导出数据的表名
–export-dir 指定hdfs需要导出的路径的
–fields-terminated-by 指定hdfs文件 列之间的分割符的

注意: 导出数据的时候 mysql中的库和表 都不会进行创建
需要手动创建
2)hive–mysql

sqoop export
–connect jdbc:mysql://hdp03:3306/sqoopdb
–username root
–password 123456
–table uv_info
–export-dir /user/myhive/warehouse/weibo.db/new_help_keyword
–input-fields-terminated-by '\t’

–export-dir 指定hive的表数据存储的hdfs的目录的
–input-fields-terminated-by 指定hive的表文件的分割符的

3)hbase—mysql 中
不支持
没有一种直接的方式可以将hbase的数据直接导出mysql的

猜你喜欢

转载自blog.csdn.net/weixin_44701192/article/details/90744981