Sqoop一些常用命令及参数(二)
命令&参数详解-2 命令&参数(1)
import
将关系型数据库中的数据导入到HDFS(包括Hive,HBase)中,如果导入的是Hive,那么当Hive中没有对应表时,则自动创建。
先在关系型数据库MySQL中创建一个表access


一、命令
1.导入数据到hive中
|
$ bin/sqoop import \ --connect jdbc:mysql://bigdata111:3306/test \ --username root \ --password 000000 \ --num-mappers 1 \ --table access \ --hive-import \ --fields-terminated-by "\t" |
如果关系数据库的表格没有设置主键,出现报错:
ERROR tool.ImportTool: Error during import: No primary key could be found for table access. Please specify one with --split-by or perform a sequential import with '-m 1'.
解决办法:
加上:--num-mappers 1 \
这样就能看到Hive数据库中含有access表格了:


2.增量导入数据到hive中,mode=append
关系型数据库MySQL中的表access内容:

非关系型数据库Hive中的表student4内容:

|
append导入: $ bin/sqoop import \ --connect jdbc:mysql://bigdata111:3306/test \ --username root \ --password 000000 \ --table access \ --num-mappers 1 \ --fields-terminated-by "\t" \ --target-dir /user/hive/warehouse111/student4 \ --check-column id \ --incremental append \ --last-value 1 |

尖叫提示:
1)append不能与--hive-等参数同时使用(Append mode for hive imports is not yet supported. Please remove the parameter --append-mode)
2)--last-value 1 的意思是标记增量的位置为第二行,也就是说,当数据再次导出的时候,从第二行开始算
3)如果 --last-value N , N > MYSQL中最大行数,则HDFS会创建一个空文件。如果N<=0 , 那么就是所有数据。
3.增量导入数据到hdfs中,mode=lastmodified(注:卡住)
|
先在mysql中建表并插入几条数据: mysql> create table staff_timestamp(id int(4), name varchar(255), sex varchar(255), last_modified timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP); mysql> insert into staff_timestamp (id, name, sex) values(1, 'AAA', 'female'); mysql> insert into staff_timestamp (id, name, sex) values(2, 'BBB', 'female'); 先导入一部分数据: $ bin/sqoop import \ --connect jdbc:mysql://bigdata111:3306/test \ --username root \ --password 000000 \ --table staff_timestamp \ --delete-target-dir \ --hive-import \ --fields-terminated-by "\t" \ --m 1 再增量导入一部分数据: mysql> insert into staff_timestamp (id, name, sex) values(3, 'CCC', 'female');
$ bin/sqoop import \ --connect jdbc:mysql://bigdata112:3306/test \ --username root \ --password 000000 \ --table staff_timestamp \ --check-column last_modified \ --incremental lastmodified \ --m 1 \ --last-value "2020-04-17 19:50:06" \ --append \ --fields-terminated-by "\t" \ --warehouse-dir /user/hive/warehouse111/ |
尖叫提示-1:
使用lastmodified方式导入数据要指定增量数据是要--append(追加)还是要--merge-key(合并)
尖叫提示-2:
在Hive中,如果不指定输出路径,可以去看以下两个目录
1)/user/root(此为用户名)
2)/user/hive/warehouse111 个人配置的目录
尖叫提示-3:
last-value指定的值是会包含于增量导入的数据中
比如上面命令中就是将小于2020-04-17 19:50:06(包括本身)的行都追加进去~
如果卡住,在yarn-site.xml中加入以下配置
|
<property> <name>yarn.nodemanager.resource.memory-mb</name> <value>20480</value> </property>
<property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>2048</value> </property>
<property> <name>yarn.nodemanager.vmem-pmem-ratio</name> <value>2.1</value> </property> |
二、参数:
|
序号 |
参数 |
说明 |
|
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 LASTMODIFIED检查的字段,意思就是当该字段发生更新或者添加操作,则才会执行导入 |
|
23 |
--last-value <value> |
指定某一个值,用于标记增量导入的位置-下一个 |




浙公网安备 33010602011771号