导入模板
sqoop import \
--connect jdbc:mysql://ip:3306/test \
--username root \
--password 123456\
--table users\
--fields-terminated-by '\t' \
--delete-target-dir \
--num-mappers 1 \
--hive-import \
--hive-database sqoop\
--hive-table users
参数解释:
import:从MySQL导入到HDFS文件系统数据
--connect:数据库JDBC连接字符串
--username:数据库用户名
--password:数据库密码
--table:数据库表名
--columns:数据库列名
--where: 查询条件
--query: 指定查询sql
--delete-target-dir 导入后删除hdfs的目录
--num-mappers 1 指定map数量=1,可以简写为 -m 1
--hive-import 导入hive
--hive-database sqoop hive的database
--hive-table users hive表
–hive-partition-key 分区字段
–hive-partition-value 分区值
–hive-overwrite 覆盖数据
实际上import命令,从MySQL导入到HDFS文的背后依然是执行的MapReduce。执行完map后,又执行了load data
如果导出的数据库是mysql 则可以添加一个 属性 --direct ,加了 direct 属性在导出mysql数据库表中的数据会快一点 执行的是mysq自带的导出功能
实际案例
导出
--update-mode主要有两种模式 updateonly(默认)和allowinsert
updateonly:该模式用于更新Hive表与目标表中数据的不一致,即在不一致时,将Hive中的数据同步给目标表(如MySQL、Oracle等的目标表中),这种不一致是指,一条记录中的不一致,比如Hive表和MySQL中都有一个id=1的记录,但是其中一个字段的取值不同,则该模式会将这种差异抹除。
allowinsert:该模式用于将Hive中有但目标表中无的记录同步到目标表中,但同时也会同步不一致的记录。可以这种模式可以包含updateony模式的操作,这也是为什么没有命名为insertonly的原因吧。