Sqoop常用命令
一、命令列表
序号 | 命令 | 类 | 说明 |
---|---|---|---|
1 | import | importTool | 将数据导入到集群 |
2 | export | ExportTool | 将集群数据导出 |
3 | codegen | CodeGenTool | 获取数据库中某张表数据生成Java并打包Jar |
4 | 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版本信息 |
二、命令详细解释
2.1通用参数:
序号 | 参数 | 说明 |
---|---|---|
1 | –connect | 连接关系型数据库的URL |
2 | –connection-manager | 指定要使用的连接管理类,一般不用 |
3 | –diver | 手动指定使用 JDBC 驱动类 |
4 | –help | 打印帮助信息 |
5 | –password | 连接数据库的密码 |
6 | –username | 连接数据库的用户名 |
7 | –verbose | 在控制台打印出详细信息,(其实是将日志级别调低) |
8 | –hadoop-home | hadoop目录,可以覆盖配置文件里面的 |
2.2 import相关
- 略
2.3export 相关
- 略
2.4 codegen 命令
2.4.1 定义解释
Sqoop在进行每一次的导出任务时,都会调用codegen,生成一个java文件,并编译打包成一个jar,供MapReduce使用。
这个java文件包装了一系列的对导出数据的访问接口,我们可以尝试通过对这个java文件进行分析,找到指定双字节分隔符的方法。
一般地,如果是使用的–query用查询语句获取数据,生成的文件为QueryResult.java,QueryResult.jar,
如果使用的是–table,则用指定的表名对相应文件命名.java文件生成在sqoop脚本的同一目录下。
2.4.2 codegen语法
$ sqoop codegen(generic-args)(codegen-args)
2.4.3 参数
序号 | 参数 | 说明 |
---|---|---|
1 | –bindir
| 指定生成的Java文件编译成的class文件及将生成文件打包为jar的文件输出路径 |
2 | –class-name | 设定生成的Java文件指定的名称 |
3 | –outdir
| 生成Java文件存放的路径 |
4 | –package-name | 包名,如com.z,就会生成com和z两级目录 |
5 | –input-null-non-string | 在生成的Java文件中,可以将null字符串或者不存在的字符串设置为想要设定的值(例如空字符串) |
6 | -input-null-string | 将null字符串替换成想要替换的值(一般与5同时使用) |
7 | –map-column-java | 数据库字段在生成的Java文件中会映射成各种属性,且默认的数据类型与数据库类型保持对应关系。该参数可以改变默认类型,例如:–map-column-java id=long, name=String |
8 | –null-non-string | 在生成Java文件时,可以将不存在或者null的字符串设置为其他值 |
9 | –null-string | 在生成Java文件时,将null字符串设置为其他值(一般与8同时使用) |
10 | –table | 对应关系数据库中的表名,生成的Java文件中的各个属性与该表的各个字段一一对应 |
2.4.4 例子
./sqoop codegen --connect jdbc:mysql://localhost:3306/test --username root --password root --table test001 --fields-terminated-by "\t" --bindir /data1/lulu/test001/ --outdir /data1/lulu/test002
文件位置如下:
test002文件夹里面是 .java文件
2.4.5 直接运行jar
./sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password root --table test001 --target-dir /user/company --delete-target-dir --num-mappers 1 --jar-file /data1/lulu/test001/test001.jar --class-name test001
2.5 create-hive-table
–create-hive-table: 自动推断表字段类型直接建表
./sqoop create-hive-table --connect jdbc:mysql://localhost:3306/test --username root --password root --table test001 --fields-terminated-by "\t" --hive-database warehouse
2.6 eval 命令
执行sql语句,结果会打印在控制台,可以用来校验下import的查询条件是否正确,经常用于在import之前,了解一下SQL语句是否正确,数据是否正常,并可以将结果显示在控制台。
./sqoop eval --connect jdbc:mysql://localhost:3306/test --username root --password root --query "select * from test001"
2.7 import-all-tables
可以将RDBMS中的所有的表导入到hdfs中,每一个表都对应一个HDFS目录,数据也导入到hdfs
./sqoop import-all-tables --connect jdbc:mysql://localhost:3306/test --username root --password root --warehouse-dir /all_tables_new -m 1;
2.8 import-mainframe
直接import主机 ,一般不常用
2.9 job
用来生成一个sqoop任务,生成后不会立刻执行,需要手动执行,Sqoop可以将import任务保存为job,可以理解为起了个别名,这样方便的Sqoop任务的管理。
2.9.1 参数列表
参数 | 描述 |
---|---|
–create | 创建一个job,job-id是job名称 |
–delete | 删除这个job |
–exec | 执行这个job |
–show | Show the parameters for a saved job. |
–list | List all saved jobs |
–meta-connect | Specifies the JDBC connect string used to connect to the metastore |
2.9.2 例子
//import-all-tables 和前面的 -- 有一个空格
./sqoop job --create job_test001 -- import-all-tables --connect jdbc:mysql://localhost:3306/test --username root --password root -m 1 --warehouse-dir /all_tables_new_001;
./sqoop job --list
job存储方案
job的是有两种存储方案的,通过配置–meta-connect或者在conf/sqoop-site.xml 里配置 sqoop.metastore.client.autoconnect.url 参数来指定是否使用metastore-client
如果job信息放到 ${HOME}/.sqoop 目录下,此目录下有两个文件:
metastore.db.properties:metastore的配置信息
metastore.db.script:job的详细信息,通过sql语句存储
注意: 如果使用Oozie执行sqoop-job的话,务必将sqoop-site.xml 中的 sqoop.metastore.client.record.password参数设置为true
2.10 list-databases
列出数据库
./sqoop list-databases --connect jdbc:mysql://localhost:3306/ --username root --password root
2.11 list-tables
列出表
./sqoop list-tables --connect jdbc:mysql://localhost:3306/test --username root --password root
2.12 merge 合并两个数据集
需要先用 codegen 命令打成jar再运行。
2.13 metastore
记录了 Sqoop job 的元数据信息,如果不启动该服务,那么默认 job 元数据的存储目录为 ~/.sqoop,可在 sqoop-site.xml 中修改。