Sqoop 是一款 Apache 社区的开源软件,支持在 Hadoop 生态软件和结构化数据集(例如数据库)之间进行高效的批量数据传输。
背景信息
将 MySQL 数据导入 HDFS
在 Master 节点上执行如下命令。
sqoop import --connect <dburi>/<dbname> --username <username> --password <password> --table <tablename> --target-dir <hdfs-dir> --split-by <split-column> --check-column <col> --incremental <mode> --last-value <value>
|
参数 |
描述 |
|
dburi |
数据库的访问链接。例如 jdbc:mysql://192.168.**.**:3306/ 。 |
|
dbname |
数据库的名称。 |
|
username |
数据库登录用户名。 |
|
password |
数据库登录密码。 |
|
tablename |
MySQL 表的名称。 |
|
hdfs-dir |
HDFS 的写入目录。例如 /user/hive/result 。 |
|
split-column |
可选参数。指定一个用于切分任务的列,默认为表主键列。 |
|
col |
可选参数。增量导入场景的检查列。 |
|
mode |
可选参数。增量导入模式,支持 append 和 lastmodified 两种模式。 |
|
value |
可选参数。指定上次增量导入的检查列的最大值。 |
详细的参数信息请参见 Sqoop Import 。
将 HDFS 数据导入 MySQL
创建好对应 HDFS 中的数据结构的 MySQL 表后,在集群的 Master 节点上执行如下命令。
sqoop export --connect <dburi>/<dbname> --username <username> --password <password> --table <tablename> --export-dir <hdfs-dir>
|
参数 |
描述 |
|
dburi |
数据库的访问链接。例如 jdbc:mysql://192.168.**.**:3306/ 。 |
|
dbname |
数据库的名称。 |
|
username |
数据库登录用户名。 |
|
password |
数据库登录密码。 |
|
tablename |
MySQL 表的名称。 |
|
hdfs-dir |
HDFS 的写入目录。例如 /user/hive/result 。 |
详细的参数信息请参见 Sqoop Import 。
将 MySQL 数据导入 Hive
在集群的 Master 节点上执行如下命令。
sqoop import --connect <dburi>/<dbname> --username <username> --password <password> --table <tablename> --check-column <col> --incremental <mode> --last-value <value> --fields-terminated-by "\t" --lines-terminated-by "\n" --hive-import --target-dir <hdfs-dir> --hive-table <hive-tablename>
|
参数 |
描述 |
|
dburi |
数据库的访问链接。例如 jdbc:mysql://192.168.**.**:3306/ 。 |
|
dbname |
数据库的名称。 |
|
username |
数据库登录用户名。 |
|
password |
数据库登录密码。 |
|
tablename |
MySQL 表的名称。 |
|
col |
可选参数。增量导入场景的检查列。 |
|
mode |
可选参数。增量导入模式,支持 append 和 lastmodified 两种模式。 |
|
value |
可选参数。指定上次增量导入的检查列的最大值。 |
|
hdfs-dir |
HDFS 的写入目录。例如 /user/hive/result 。 |
|
hive-tablename |
Hive 中的表名。 |
详细的参数信息请参见 Sqoop Import 。
将 Hive 数据导入 MySQL
执行命令与导入 HDFS 数据至 MySQL 一致,但需要指定 Hive 表对应的 HDFS 路径。详情请参见 将 HDFS 数据导入 MySQL 。
将 MySQL 数据导入 OSS
在集群的 Master 节点上执行如下命令。
sqoop import --connect <dburi>/<dbname> --username <username> --password <password> --table <tablename> --target-dir <oss-dir> --temporary-rootdir <oss-tmpdir> --check-column <col> --incremental <mode> --last-value <value>
|
参数 |
描述 |
|
dburi |
数据库的访问链接。例如 jdbc:mysql://192.168.**.**:3306/ 。 |
|
dbname |
数据库的名称。 |
|
username |
数据库登录用户名。 |
|
password |
数据库登录密码。 |
|
tablename |
MySQL 表的名称。 |
|
oss-dir |
OSS 的写入目录。例如 oss://<AccessKeyId>:<AccessKeySecret>@<BucketName>.oss-cn-hangzhou-internal.aliyuncs.com/result 。 |
|
oss-tmpdir |
临时写入目录。指定 mode 为 append 模式时,需要指定该参数。 采用 append 模式后,Sqoop 会先将数据导入临时目录,然后将文件重命名为正常目标目录。如果目标目录已经存在于 HDFS 中,则 Sqoop 拒绝导入并覆盖该目录的内容。 |
|
col |
可选参数。增量导入场景的检查列。 |
|
mode |
可选参数。增量导入模式,支持 append 和 lastmodified 两种模式。 |
|
value |
可选参数。指定上次增量导入的检查列的最大值。 |
详细的参数信息请参见 Sqoop Import 。
将 OSS 数据导入 MySQL
创建好对应 OSS 中数据结构的 MySQL 表后,在集群的 Master 节点上执行如下命令。
sqoop export --connect <dburi>/<dbname> --username <username> --password <password> --table <tablename> --export-dir <oss-dir>
|
参数 |
描述 |
|
dburi |
数据库的访问链接。例如 jdbc:mysql://192.168.**.**:3306/ 。 |
|
dbname |
数据库的名称。 |
|
username |
数据库登录用户名。 |
|
password |
数据库登录密码。 |
|
tablename |
MySQL 表的名称。 |
|
oss-dir |
OSS 的写入目录。例如 oss://<AccessKeyId>:<AccessKeySecret>@<BucketName>.oss-cn-hangzhou-internal.aliyuncs.com/result 。 |
详细的参数信息请参见 Sqoop Import 。
使用 SQL 作为导入条件
命令和参数如下所示。
sqoop import --connect <dburi>/<dbname> --username <username> --password <password> --query <query-sql> --split-by <sp-column> --hive-import --hive-table <hive-tablename> --target-dir <hdfs-dir>
|
参数 |
描述 |
|
dburi |
数据库的访问链接。例如 jdbc:mysql://192.168.**.**:3306/ 。 |
|
dbname |
数据库的名称。 |
|
username |
数据库登录用户名。 |
|
password |
数据库登录密码。 |
|
query-sql |
使用的查询语句。例如
|
|
sp-column |
进行切分的条件。通常跟 MySQL 表的主键有关。 |
|
hdfs-dir |
HDFS 的写入目录。例如 /user/hive/result 。 |
|
hive-tablename |
Hive 中的表名。 |
详细的参数信息请参见 Sqoop Import 。
集群和其他数据库的网络配置请参见 在 E-MapReduce 上使用 Sqoop 工具与数据库同步数据进行网络配置 。