RDBMS->HDFS
全表导入
sqoop import \
--driver com.mysql.jdbc.Driver \
--connect jdbc:mysql://CentOS:3306/test?characterEncoding=UTF-8 \
--username root \
--password root \
--table t_user \
--num-mappers 4 \
--fields-terminated-by '\t' \
--target-dir /mysql/test/t_user \
--delete-target-dir
参数 | 含义 |
---|---|
–-connect | 连接的数据库地址 |
-–username | 连接的数据库的用户名 |
–-password | 连接的数据库的密码 |
–-table | 想要导出数据的表 |
–target-dir | 要导入到hdfs中的目录(如果不指定,默认存储在“/user/用户名/导入的表名” 目录下) |
-–delete-target-dir | 表示如果在hdfs中有该目录,则先删除,然后再导入数据到该目录下 |
–num-mappers | 表示设置的maptask个数,默认为4个,决定最终在hdfs中生成的文件个数(将table中的数据分成几个文件分别存储) |
–fields-terminated-by | 指定字段的分割符号 |
字段导入
sqoop import \
--driver com.mysql.jdbc.Driver \
--connect jdbc:mysql://CentOS:3306/test?characterEncoding=UTF-8 \
--username root \
--password root \
--table t_user \
--columns id,name,age \
--where "id > 2 or name like '%z%'" \
--target-dir /mysql/test/t_user \
--delete-target-dir \
--num-mappers 4 \
--fields-terminated-by '\t'
字段 | 含义 |
---|---|
–columns | 指定要查询的字段 |
–where | 指定过滤条件 |
导入查询
sqoop import \
--driver com.mysql.jdbc.Driver \
--connect jdbc:mysql://CentOS:3306/test \
--username root \
--password root \
--num-mappers 3 \
--fields-terminated-by '\t' \
--query 'select id, name,sex, age ,birthDay from t_user where $CONDITIONS LIMIT 100 ' \
--split-by id \
--target-dir /mysql/test/t_user \
--delete-target-dir
如果要并行导入查询结果,则每个Map任务将需要执行查询的副本,其结果由Sqoop推断的边界条件进行分区。您的查询必须包含令牌
$CONDITIONS
,每个Sqoop进程将用唯一条件表达式
替换该令牌。您还必须使用--split-by
选择拆分列。
RDBMS -> Hive
全量导入
sqoop import \
--connect jdbc:mysql://CentOS:3306/test \
--username root \
--password root \
--table t_user \
--num-mappers 3 \
--hive-import \
--fields-terminated-by "\t" \
--hive-overwrite \
--hive-table baizhi.t_user
[root@CentOS ~]# cp /usr/apache-hive-1.2.2-bin/lib/hive-common-1.2.2.jar /usr/sqoop-1.4.7/lib/
[root@CentOS ~]# cp /usr/apache-hive-1.2.2-bin/lib/hive-exec-1.2.2.jar /usr/sqoop-1.4.7/lib/
导入分区
sqoop import \
--connect jdbc:mysql://CentOS:3306/test \
--username root \
--password root \
--table t_user \
--num-mappers 3 \
--hive-import \
--fields-terminated-by "\t" \
--hive-overwrite \
--hive-table baizhi.t_user \
--hive-partition-key city \
--hive-partition-value 'bj'
RDBMS-> Hbase
sqoop import \
--connect jdbc:mysql://CentOS:3306/test \
--username root \
--password root \
--table t_user \
--num-mappers 3 \
--hbase-table baizhi:t_user1 \
--column-family cf1 \
--hbase-create-table \
--hbase-row-key id \
--hbase-bulkload
参数 | 含义 |
---|---|
–hbase-table | 写入hbase中的表 |
–column-family | 导入的列簇 |
–hbase-create-table | 创建表 |
–hbase-row-key | 指定字段作为rowkey |
–hbase-bulkload | 启动Hbase 批量写入 |
HDFS -> MySQL
0 zhangsan true 20 2020-01-11
1 lisi false 25 2020-01-10
3 wangwu true 30 2020-01-17
create table t_user(
id int primary key auto_increment,
name VARCHAR(32),
sex boolean,
age int,
birthDay date
) CHARACTER SET=utf8;
sqoop-export \
--connect jdbc:mysql://CentOS:3306/test \
--username root \
--password root \
--table t_user \
--update-key id \
--update-mode allowinsert \
--export-dir /mysql/test/t_user \
--input-fields-terminated-by '\t'
导入模式可选值可以是updateonly或者allowinsert,updateonly仅仅会更新已经存在的记录。
Hbase-> MySQL
1、现将Hbase数据->HIVE
[root@CentOS ~]# hive -e 'use baizhi;create table t_tmp as select * from t_employee'
create table t_employee(empno INT,
ename varchar(32),
job varchar(32),
mgr INT,
hiredate TIMESTAMP,
sal DECIMAL(7,2),
comm DECIMAL(7,2),
deptno INT)
2、将Hive数据导出到MySQL
sqoop-export \
--connect jdbc:mysql://CentOS:3306/test \
--username root \
--password root \
--table t_employee \
--export-dir '/user/hive/warehouse/baizhi.db/t_tmp' \
--input-fields-terminated-by '\001' \
--input-null-string '\\N' \
--input-null-non-string '\\N';
参数 | 含义 |
---|---|
–export-dir | 需要读取的文件位置 |
–input-fields-terminated-by | 字段分割符号 |
–input-null-string | 对于一些字符串字段,出现该值认为是null |
–input-null-non-string | 对于一些字符串非空字段,出现该值认为是null |
来源:CSDN
作者:麦田里的守望者·
链接:https://blog.csdn.net/weixin_38231448/article/details/103939464