Sqoop导入导出

Sqoop 导入

“导入工具”导入单个表从 RDBMS 到 HDFS。表中的每一行被视为 HDFS 的记录。所有记录都存储为文本文件的文本数据(或者 Avro、sequence 文件等二进制数据)。

下面的语法用于将数据导入 HDFS。

$ sqoop import (generic-args) (import-args)

Sqoop 测试表数据

mysql 中创建数据库 userdb,创建三张表: emp emp_add emp_conn。

导入 mysql 表数据到 HDFS

下面的命令用于从 MySQL 数据库服务器中的 emp 表导入 HDFS。

bin/sqoop import \

--connect jdbc:mysql://node-1:3306/userdb \

--username root \

--password root \

--target-dir /sqoopresult \

--table emp --m 1

其中--target-dir 可以用来指定导出数据存放至 HDFS 的目录;

mysql jdbc url 请使用 ip 地址。

为了验证在 HDFS 导入的数据,请使用以下命令查看导入的数据:

hdfs dfs -cat /sqoopresult/part-m-00000

可以看出它会用逗号,分隔 emp 表的数据和字段。

1201,gopal,manager,50000,TP

1202,manisha,Proof reader,50000,TP

1203,khalil,php dev,30000,AC

1204,prasanth,php dev,30000,AC

1205,kranthi,admin,20000,TP

导入 mysql 表数据到HIVE

将关系型数据的表结构复制到 hive 中

bin/sqoop create-hive-table \

--connect jdbc:mysql://node-1:3306/userdb \

--table emp_conn \

--username root \

--password root \

--hive-table test.emp_conn_sp

其中:

--table emp_add 为 mysql 中的数据库 sqoopdb 中的表。

--hive-table emp_add_sp 为 hive 中新建的表名称。

从关系数据库导入文件到 hive 中

bin/sqoop import \

--connect jdbc:mysql://node-1:3306/userdb \

--username root \

--password root \

--table emp_conn \

--hive-table test.emp_conn_1 \

--hive-import \

--m 1

导入表数据子集

--where 可以指定从关系数据库导入数据时的查询条件。它执行在各自的数据库服务器

相应的 SQL 查询,并将结果存储在 HDFS 的目标目录。

bin/sqoop import \

--connect jdbc:mysql://node-21:3306/sqoopdb \

--username root \

--password hadoop \

--where "city ='sec-bad'" \

--target-dir /wherequery \

--table emp_add --m 1

复杂查询条件:

bin/sqoop import \

--connect jdbc:mysql://node-21:3306/sqoopdb \

--username root \

--password hadoop \

--target-dir /wherequery12 \

--query 'select id,name,deg from emp WHERE id>1203 and $CONDITIONS' \

--split-by id \

--fields-terminated-by '\t' \

--m 1

增量导入

增量导入是仅导入新添加的表中的行的技术。

--check-column (col) 用来作为判断的列名,如 id

--incremental (mode) append:追加,比如对大于 last-value 指定的值之后的记录进行追加导入。lastmodified:最后的修改时间,追加 last-value指定的日期之后的记录

--last-value (value) 指定自从上次导入后列的最大值(大于该指定的值),也可以自己设定某一值假设新添加的数据转换成 emp 表如下:

1206, satish p, grp des, 20000, GR

下面的命令用于在 EMP 表执行增量导入:

bin/sqoop import \

--connect jdbc:mysql://node-21:3306/sqoopdb \

--username root \

--password hadoop \

--table emp --m 1 \

--incremental append \

--check-column id \

--last-value 1205

Sqoop 导出

将数据从 HDFS 导出到 RDBMS 数据库导出前,目标表必须存在于目标数据库中。默认操作是从将文件中的数据使用INSERT语句插入到表中,更新模式下,是生成UPDATE

语句更新表数据。

以下是 export 命令语法:

$ sqoop export (generic-args) (export-args)

导出 HDFS 数据到 mysql

数据是在 HDFS 中“emp/”目录的 emp_data 文件中:

1201,gopal,manager,50000,TP

1202,manisha,preader,50000,TP

1203,kalil,php dev,30000,AC

1204,prasanth,php dev,30000,AC

1205,kranthi,admin,20000,TP

1206,satishp,grpdes,20000,GR

首先需要手动创建 mysql 中的目标表:

mysql> USE sqoopdb;

mysql> CREATE TABLE employee (

id INT NOT NULL PRIMARY KEY,

name VARCHAR(20),

deg VARCHAR(20),

salary INT,

dept VARCHAR(10));

然后执行导出命令:

bin/sqoop export \

--connect jdbc:mysql://node-21:3306/sqoopdb \

--username root \

--password hadoop \

--table employee \

--export-dir /emp/emp_data

还可以用下面命令指定输入文件的分隔符

--input-fields-terminated-by '\t'

如果运行报错如下:

则需要把 localhost 更改为 ip 或者域名。

示例如下,将点击流模型表导出到 mysql

sqoop export \

--connect jdbc:mysql://hdp-node-01:3306/webdb --username root --password root \

--table click_stream_visit \

--export-dir /user/hive/warehouse/dw_click.db/click_stream_visit/datestr=2013-09-18 \

--input-fields-terminated-by '\001'

导出 hive数据到 mysql

sqoop export \

 --connect jdbc:mysql://node-1:3306/hive  --username root --password root \

 --table  t_user --export-dir /usr/hive/warehouse/hivetest.t_user  \

--input-fields-terminated-by '\001'  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值