本文共 18310 字,大约阅读时间需要 61 分钟。
问题导读
1.Sqoop原理是怎样的?2.如何利用Sqoop导入数据?
3.如何利用Sqoop导出数据?
4.Sqoop常用的命令及对应参数有哪些?
第1章 Sqoop 简介 Sqoop 是一款开源的工具,主要用于在 Hadoop(Hive) 与传统的数据库 (mysql,postgresql,...) 间进行数据的高校传递,可以将一个关系型数据库(例如:MySQL,Oracle,Postgres等)中的数据导入到 Hadoop 的 HDFS 中,也可以将 HDFS 的数据导进到关系型数据库中。 Sqoop 项目开始于 2009 年,最早是作为 Hadoop 的一个第三方模块存在,后来为了让使用者能够快速部署,也为了让开发人员能够更快速的迭代开发,Sqoop 独立成为一个 Apache 顶级项目。 Sqoop2 的最新版本是 1.99.7。请注意,2 与 1 不兼容,且特征不完整,它并不打算用于生产部署。第2章 Sqoop 原理 将导入或导出命令翻译成 mapreduce 程序来实现。 在翻译出的 mapreduce 中主要是对 inputformat 和 outputformat 进行定制。第3章 Sqoop 安装 安装 Sqoop 的前提是已经具备 Java 和 Hadoop 的环境。3.1 下载并解压 1. 下载地址: 2. 上传安装包 sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz 到虚拟机中 3. 解压 sqoop 安装包到指定目录,如:
1 |
|
1 |
|
1 |
|
01 02 03 04 05 06 07 08 09 10 |
|
1 |
|
1 |
|
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 |
|
1 |
|
1 2 3 4 5 |
|
1 |
|
办法二:查询进程
1 |
|
2. 在 Mysql 中新建一张表并插入一些数据
1 2 3 4 5 |
|
1 2 3 4 5 6 7 8 9 |
|
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 |
|
01 02 03 04 05 06 07 08 09 10 |
|
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
01 02 03 04 05 06 07 08 09 10 |
|
01 02 03 04 05 06 07 08 09 10 11 12 |
|
原因:sqoop1.4.6 只支持 HBase1.0.1 之前的版本的自动创建 HBase 表的功能。
解决方案:手动创建 HBase 表
1 |
|
1 |
|
1 2 3 4 5 6 7 8 |
|
1 2 3 4 |
|
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 |
|
1 |
|
第5章 Sqoop 一些常用命令及参数5.1 常用命令列举 这里给大家列出来了一部分 Sqoop 操作时的常用参数,以供参考,需要深入学习的可以参看对应类的源代码。如下表所示:序号 | 命令 | 类 | 说明1 | import | ImportTool | 将数据导入到集群2 | export | ExportTool | 将集群数据导出3 | codegen | CodeGenTool | 获取数据库中某张表数据生成 Java 并打包 Jar4 | create-hive-table | CreateHiveTableTool | 创建 Hive 表5 | eval | EvalSqlTool | 查看 SQL 执行结果6 | import-all-tables | ImportAllTablesTool | 导入某个数据库下所有表到 HDFS 中7 | job | JobTool | 用来生成一个 sqoop 的任务,生成后,该任务并不执行,除非使用命令执行该任务。8 | list-databases | ListDatabasesTool | 列出所有数据库名9 | list-tables | ListTablesTool | 列出某个数据库下所有表10 | merge | MergeTool | 将 HDFS 中不同目录下面的数据合并在一起,并存放在指定的目录中11 | metastore | MetastoreTool | 记录 sqoop job 的元数据信息,如果不启动 metastore 实例,则默认的元数据存储目录为:~/.sqoop,如果要更改存储目录,可以在配置文件 sqoop-site.xml 中进行更改。12 | help | HelpTool | 打印 sqoop 帮助信息13 | version | VersionTool | 打印 sqoop 版本信息5.2 命令&参数详解 刚才列举了一些 Sqoop 的常用命令,对于不同的命令,有不同的参数,让我们来一一列举说明。 首先来我们来介绍一下公用的参数,所谓公用参数,就是大多数命令都支持的参数。5.2.1 公用参数:数据库连接
序号 | 参数 | 说明 |
1 | –connect | 连接关系型数据库的URL |
2 | –connection-manager | 指定要使用的连接管理类 |
3 | –driver | Hadoop根目录 |
4 | –help | 打印帮助信息 |
5 | –password | 连接数据库的密码 |
6 | –username | 连接数据库的用户名 |
7 | –verbose | 在控制台打印出详细信息 |
序号 | 参数 | 说明 |
1 | –enclosed-by < char> | 给字段值前加上指定的字符 |
2 | –escaped-by < char> | 对字段中的双引号加转义符 |
3 | –fields-terminated-by < char> | 设定每个字段是以什么符号作为结束,默认为逗号 |
4 | –lines-terminated-by < char> | 设定每行记录之间的分隔符,默认是 \n |
5 | –mysql-delimiters | Mysql默认的分隔符设置,字段之间以逗号分隔,行之间以 \n分隔,默认转义符是 \,字段值以单引号包裹 |
6 | –optionally-enclosed-by< char> | 给带有双引号或单引号的字段值前后加上指定字符 |
序号 | 参数 | 说明 |
1 | –input-enclosed-by < char> | 对字段值前后加上指定字符 |
2 | –input-escaped-by < char> | 对含有转移符的字段做转义处理 |
3 | –input-fields-terminated-by < char> | 字段之间的分隔符 |
4 | –input-lines-terminated-by < char> | 行之间的分隔符 |
5 | –input-optionally-enclosed-by < char> | 给带有双引号或单引号的字段前后加上指定字符 |
序号 | 参数 | 说明 |
1 | –hive-delims-replacement < arg> | 用自定义的字符串替换掉数据中的 \r\n 和 \013 \010 等字符 |
2 | –hive-drop-import-delims | 在导入数据到 hive 时,去掉数据中的 \r\n \013 \010这样的字符 |
3 | –map-column-hive < arg> | 生成 hive 表时,可以更改生成字段的数据类型 |
4 | –hive-partition-key | 创建分区,后面直接跟分区名,分区字段的默认类型为 string |
5 | –hive-partition-value < v> | 导入数据时,指定某个分区的值 |
6 | –hive-home < dir> | hive的安装目录,可以通过该参数覆盖之前默认配置的目录 |
7 | –hive-import | 将数据从关系数据库中导入到 hive 表中 |
8 | –hive-overwrite | 覆盖掉在 hive 表中已经存在的数据 |
9 | –create-hive-table | 默认是 false,即,如果目标表已经存在了,那么创建任务失败。 |
10 | –hive-table | 后面接要创建的 hive 表,默认使用 MySQL 的表名 |
11 | –table | 指定关系数据库的表名 |
1 2 3 4 5 6 |
|
01 02 03 04 05 06 07 08 09 10 11 12 13 |
|
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
序号 | 参数 | 说明 |
1 | –append | 将数据追加到 HDFS 中已经存在的 DataSet 中,如果使用该参数,sqoop 会把数据先导入到临时文件目录,再合并。 |
2 | –as-avrodatafile | 将数据导入到一个 Avro 数据文件中 |
3 | –as-sequencefile | 将数据导入到一个 sequence 文件中 |
4 | –as-textfile | 将数据导入到一个普通文本文件中 |
5 | –boundary-query < statement> | 边界查询,导入的数据为该参数的值(一条sql语句)所执行的结果区间内的数据。 |
6 | –columns < col1, col2, col3> | 指定要导入的字段 |
7 | –direct | 直接导入模式,使用的是关系数据库自带的导入导出工具,以便加快导入导出过程。 |
8 | –direct-split-size | 在使用上面direct直接导入的基础上,对导入的流按字节分块,即达到该阈值就产生一个新的文件 |
9 | –inline-lob-limit | 设定大对象数据类型的最大值 |
10 | –m或–num-mappers | 启动N个 map 来并行导入数据,默认4个。 |
11 | –query或–e < statement> | 将查询结果的数据导入,使用时必须伴随参–target-dir,–hive-table,如果查询中有 where 条件,则条件后必须加上 $CONDITIONS 关键字 |
12 | –split-by < column-name> | 按照某一列来切分表的工作单元,不能与–autoreset-to-one-mapper连用(请参考官方文档) |
13 | –table < table-name> | 关系数据库的表名 |
14 | –target-dir < dir> | 指定 HDFS 路径 |
15 | –warehouse-dir < dir> | 与14参数不能同时使用,导入数据到 HDFS 时指定的目录 |
16 | –where | 从关系数据库导入数据时的查询条件 |
17 | –z或–compress | 允许压缩 |
18 | –compression-codec | 指定 hadoop 压缩编码类,默认为 gzip(Use Hadoop codec default gzip) |
19 | –null-string < null-string> | string 类型的列如果 null,替换为指定字符串 |
20 | –null-non-string < null-string> | 非 string 类型的列如果 null,替换为指定字符串 |
21 | –check-column < col> | 作为增量导入判断的列名 |
22 | –incremental < mode> | mode:append 或 lastmodified |
23 | –last-value < value> | 指定某一个值,用于标记增量导入的位置 |
1 2 3 4 5 6 7 8 |
|
序号 | 参数 | 说明 |
1 | –direct | 利用数据库自带的导入导出工具,以便于提高效率 |
2 | –export-dir < dir> | 存放数据的HDFS的源目录 |
3 | -m或–num-mappers < n> | 启动N个map来并行导入数据,默认4个 |
4 | –table < table-name> | 指定导出到哪个RDBMS中的表 |
5 | –update-key < col-name> | 对某一列的字段进行更新操作 |
6 | –update-mode < mode> | updateonly,allowinsert(默认) |
7 | –input-null-string < null-string> | 请参考import该类似参数说明 |
8 | –input-null-non-string < null-string> | 请参考import该类似参数说明 |
9 | –staging-table < staging-table-name> | 创建一张临时表,用于存放所有事务的结果,然后将所有事务结果一次性导入到目标表中,防止错误 |
10 | –clear-staging-table | 如果第9个参数非空,则可以在导出操作执行前,清空临时事务结果表 |
1 2 3 4 5 6 7 8 |
|
序号 | 参数 | 说明 |
1 | –bindir < dir> | 指定生成的 Java 文件、编译成的 class 文件及将生成文件打包为 jar 的文件输出路径 |
2 | –class-name < name> | 设定生成的 Java 文件指定的名称 |
3 | -outdir < dir> | 生成 Java 文件存放的路径 |
4 | –package-name < name> | 包名,如 com.z,就会生成 com 和 z 两级目录 |
5 | –input-null-non-string < null-str> | 在生成的 Java 文件中,可以将 null 字符串或者不存在的字符串设置为想要设定的值(例如空字符串) |
6 | –input-null-string < null-str> | 将null字符串替换成想要替换的值(一般与5同时使用) |
7 | –map-column-java < arg> | 数据库字段在生成的 Java 文件中会映射成各种属性,且默认的数据类型与数据库类型保持对应关系。该参数可以改变默认类型,例如:–map-column-java id=long, name=String |
8 | –null-non-string < null-str> | 在生成 Java 文件时,可以将不存在或者 null 的字符串设置为其他值 |
9 | –null-string < null-str> | 在生成 Java 文件时,将 null 字符串设置为其他值(一般与8同时使用) |
10 | –table < table-name> | 对应关系数据库中的表名,生成的 Java 文件中的各个属性与该表的各个字段一一对应 |
1 2 3 4 5 6 |
|
序号 | 参数 | 说明 |
1 | –hive-home < dir> | Hive 的安装目录,可以通过该参数覆盖掉默认的 Hive 目录 |
2 | –hive-overwrite | 覆盖掉在 Hive 表中已经存在的数据 |
3 | –create-hive-table | 默认是 false,如果目标表已经存在了,那么创建任务会失败 |
4 | –hive-table | 后面接要创建的 hive 表 |
5 | –table | 指定关系数据库的表名 |
1 2 3 4 5 |
|
序号 | 参数 | 说明 |
1 | –query 或 --e | 后跟查询的 SQL 语句 |
1 2 3 4 5 |
|
序号 | 参数 | 说明 |
1 | –as-avrodatafile | 这些参数的含义均和import对应的含义一致 |
2 | –as-sequencefile | 同上 |
3 | –as-textfile | 同上 |
4 | –direct | 同上 |
5 | –direct-split-size < n> | 同上 |
6 | –inline-lob-limit < n> | 同上 |
7 | –m或—num-mappers < n> | 同上 |
8 | –warehouse-dir < dir> | 同上 |
9 | -z或–compress | 同上 |
10 | –compression-codec | 同上 |
1 2 3 4 5 6 7 8 9 |
|
序号 | 参数 | 说明 |
1 | –create < job-id> | 创建 job 参数 |
2 | –delete < job-id> | 删除一个 job |
3 | –exec < job-id> | 执行一个 job |
4 | –help | 显示 job 帮助 |
5 | –list | 显示 job 列表 |
6 | –meta-connect < jdbc-uri> | 用来连接 metastore 服务 |
7 | –show < job-id> | 显示一个 job 的信息 |
8 | –verbose | 打印命令运行时的详细信息 |
1 2 3 4 5 |
|
1 2 3 4 |
|
1 2 3 4 |
|
01 02 03 04 05 06 07 08 09 10 11 |
|
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
序号 | 参数 | 说明 |
1 | –new-data < path> | HDFS 待合并的数据目录,合并后在新的数据集中保留 |
2 | –onto < path> | HDFS 合并后,重复的部分在新的数据集中被覆盖 |
3 | –merge-key < col> | 合并键,一般是主键 ID |
4 | –jar-file < file> | 合并时引入的j ar 包,该 jar 包是通过 Codegen 工具生成的jar包 |
5 | –class-name < class> | 对应的表名或对象名,该 class 类是包含在 jar 包中的 |
6 | –target-dir < path> | 合并后的数据在 HDFS 里存放的目录 |
1 |
|
序号 | 参数 | 说明 |
1 | –shutdown | 关闭 metastore |
转载地址:https://blog.csdn.net/ytp552200ytp/article/details/89493939 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!