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>

指定某一个值,用于标记增量导入的位置-下一个

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3