Hadoop之Sqoop
来源:互联网 发布:淘宝找相似 编辑:程序博客网 时间:2024/06/08 18:25
sqoop
Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS及其相关系统(Hbase,Hive),也可以将HDFS的数据导进到关系型数据库中。
Sqoop项目开始于2009年,最早是作为Hadoop的一个第三方模块存在,后来为了让使用者能够快速部署,也为了让开发人员能够更快速的迭代开发,Sqoop独立成为一个Apache项目。对于某些NoSQL数据库它也提供了连接器。Sqoop,类似于其他ETL工具,使用元数据模型来判断数据类型并在数据从数据源转移到Hadoop时确保类型安全的数据处理。Sqoop专为大数据批量传输设计,能够分割数据集并创建Hadoop任务来处理每个区块、利用MapReduce加快数据传输速度,以批处理方式进行数据传输。
进行增量导入是与效率有关的最受关注的问题,因为Sqoop专门是为大数据集设计的。Sqoop支持增量更新,将新记录添加到最近一次的导出的数据源上,或者指定上次修改的时间戳。
sqoop基本使用
1、从mysql导到HDFS
通过bin/sqoop help找到import参数
方向的概念:
mysql将数据导出到HDFS
HDFS是从mysql将数据导入
准备;建库
create database if not exists sqoop;
建表:
create table mysqltohdfs(
id int primary key not null,
name varchar(20) not null
);
插数据:
insert into mysqltohdfs value('1','one');
insert into mysqltohdfs value('2','two');
insert into mysqltohdfs value('3','three');
insert into mysqltohdfs value('4','four');
insert into mysqltohdfs value('5','five');
insert into mysqltohdfs value('6','six');
insert into mysqltohdfs value('7','seven');
insert into mysqltohdfs value('8','eight');
insert into mysqltohdfs value('9','night');
insert into mysqltohdfs value('10','ten');
insert into mysqltohdfs value('11','eleven');
insert into mysqltohdfs value('12','t12');
insert into mysqltohdfs value('13','t13');
insert into mysqltohdfs value('14','t14');
insert into mysqltohdfs value('15','t15');
insert into mysqltohdfs value('16','t16');
insert into mysqltohdfs value('17','t17');
insert into mysqltohdfs value('18','t18');
【mysql导入到HDFS】
bin/sqoop import \
--connect \
jdbc:mysql://bigdata-01.yushu.com:3306/sqoop \
--username root \
--password 123456 \
--table mysqltohdfs
【mysql导入到HDFS-指定导入的路径】
bin/sqoop import \
--connect \
jdbc:mysql://bigdata-01.yushu.com:3306/sqoop \
--username root \
--password 123456 \
--table mysqltohdfs \
--target-dir /sqoop
【mysql导入到HDFS 指定Mapper个数】
bin/sqoop import \
--connect \
jdbc:mysql://bigdata-01.yushu.com:3306/sqoop \
--username root \
--password 123456 \
--table mysqltohdfs \
--delete-target-dir \
--target-dir /sqoop \
--num-mappers 1
--delete-target-dir \删除目标目录
--num-mappers 1指定mapper个数
Input parsing arguments:输入指定分隔符
Output line formatting arguments:输出指定分隔符
【mysql导入到HDFS 指定Mapper个数 指定输出分隔符】
bin/sqoop import \
--connect \
jdbc:mysql://bigdata-01.yushu.com:3306/sqoop \
--username root \
--password 123456 \
--table tohdfs \
--delete-target-dir \
--target-dir /sqoop \
--num-mappers 3 \
--fields-terminated-by '\t'
-从MYSQL输入,输出到HDFS --fields-terminated-by '\t'输出指定的分割符
WARN manager.MySQLManager: It looks like you are importing from mysql.
WARN manager.MySQLManager: This transfer can be faster! Use the --direct
WARN manager.MySQLManager: option to exercise a MySQL-specific fast path.
INFO manager.MySQLManager: Setting zero DATETIME behavior to convertToNull (mysql)
【mysql导入到HDFS 更快的运行方式】
bin/sqoop import \
--connect \
jdbc:mysql://bigdata-01.yushu.com:3306/sqoop \
--username root \
--password 123456 \
--direct \
--table tohdfs \
--delete-target-dir \
--target-dir /sqoop \
--num-mappers 1 \
--fields-terminated-by '\t'
--direct 简称:快速模式
Incremental import arguments:
--check-column <column> Source column to check for incremental
change
--incremental <import-type> Define an incremental import of type
'append' or 'lastmodified'
--last-value <value> Last imported value in the incremental
check column
检查列,将某一列作为一个增量导入的依据,一般是主键
实现导入方式: 'append' or 'lastmodified'
根据最后插入的值来判断 ,--last-value指的是上一次最后插入的值
或者是最后导入的那条记录的时间
【mysql导入到HDFS 增量导入】
bin/sqoop import \
--connect \
jdbc:mysql://bigdata-01.yushu.com:3306/sqoop \
--username root \
--password 123456 \
--direct \
--table mysqltohdfs \
--target-dir /sqoop \
--num-mappers 1 \
--fields-terminated-by '\t' \
--check-column id \
--incremental append \
--last-value 11
-》注意如果是增量导入,原目录是不能删除的 在原有文件的基础上新增记录。
ImportTool: (Consider saving this with 'sqoop job --create')
尝试可以将sqoop打包成一个job,代表这个任务去使用定时,实现增量导入
$ bin/sqoop job --help
创建sqoop job
bin/sqoop job \
--create stu_info2 \
-- \
import \
--connect \
jdbc:mysql://bigdata-01.yushu.com:3306/sqoop \
--username root \
--password 123456 \
--direct \
--table mysqltohdfs \
--target-dir /sqoop \
--num-mappers 1 \
--fields-terminated-by '\t' \
--check-column id \
--incremental append \
--last-value 14
方向的概念:
mysql将数据导出到HDFS
HDFS是从mysql将数据导入
准备;建库
create database if not exists sqoop;
建表:
create table mysqltohdfs(
id int primary key not null,
name varchar(20) not null
);
插数据:
insert into mysqltohdfs value('1','one');
insert into mysqltohdfs value('2','two');
insert into mysqltohdfs value('3','three');
insert into mysqltohdfs value('4','four');
insert into mysqltohdfs value('5','five');
insert into mysqltohdfs value('6','six');
insert into mysqltohdfs value('7','seven');
insert into mysqltohdfs value('8','eight');
insert into mysqltohdfs value('9','night');
insert into mysqltohdfs value('10','ten');
insert into mysqltohdfs value('11','eleven');
insert into mysqltohdfs value('12','t12');
insert into mysqltohdfs value('13','t13');
insert into mysqltohdfs value('14','t14');
insert into mysqltohdfs value('15','t15');
insert into mysqltohdfs value('16','t16');
insert into mysqltohdfs value('17','t17');
insert into mysqltohdfs value('18','t18');
【mysql导入到HDFS】
bin/sqoop import \
--connect \
jdbc:mysql://bigdata-01.yushu.com:3306/sqoop \
--username root \
--password 123456 \
--table mysqltohdfs
【mysql导入到HDFS-指定导入的路径】
bin/sqoop import \
--connect \
jdbc:mysql://bigdata-01.yushu.com:3306/sqoop \
--username root \
--password 123456 \
--table mysqltohdfs \
--target-dir /sqoop
【mysql导入到HDFS 指定Mapper个数】
bin/sqoop import \
--connect \
jdbc:mysql://bigdata-01.yushu.com:3306/sqoop \
--username root \
--password 123456 \
--table mysqltohdfs \
--delete-target-dir \
--target-dir /sqoop \
--num-mappers 1
--delete-target-dir \删除目标目录
--num-mappers 1指定mapper个数
Input parsing arguments:输入指定分隔符
Output line formatting arguments:输出指定分隔符
【mysql导入到HDFS 指定Mapper个数 指定输出分隔符】
bin/sqoop import \
--connect \
jdbc:mysql://bigdata-01.yushu.com:3306/sqoop \
--username root \
--password 123456 \
--table tohdfs \
--delete-target-dir \
--target-dir /sqoop \
--num-mappers 3 \
--fields-terminated-by '\t'
-从MYSQL输入,输出到HDFS --fields-terminated-by '\t'输出指定的分割符
WARN manager.MySQLManager: It looks like you are importing from mysql.
WARN manager.MySQLManager: This transfer can be faster! Use the --direct
WARN manager.MySQLManager: option to exercise a MySQL-specific fast path.
INFO manager.MySQLManager: Setting zero DATETIME behavior to convertToNull (mysql)
【mysql导入到HDFS 更快的运行方式】
bin/sqoop import \
--connect \
jdbc:mysql://bigdata-01.yushu.com:3306/sqoop \
--username root \
--password 123456 \
--direct \
--table tohdfs \
--delete-target-dir \
--target-dir /sqoop \
--num-mappers 1 \
--fields-terminated-by '\t'
--direct 简称:快速模式
Incremental import arguments:
--check-column <column> Source column to check for incremental
change
--incremental <import-type> Define an incremental import of type
'append' or 'lastmodified'
--last-value <value> Last imported value in the incremental
check column
检查列,将某一列作为一个增量导入的依据,一般是主键
实现导入方式: 'append' or 'lastmodified'
根据最后插入的值来判断 ,--last-value指的是上一次最后插入的值
或者是最后导入的那条记录的时间
【mysql导入到HDFS 增量导入】
bin/sqoop import \
--connect \
jdbc:mysql://bigdata-01.yushu.com:3306/sqoop \
--username root \
--password 123456 \
--direct \
--table mysqltohdfs \
--target-dir /sqoop \
--num-mappers 1 \
--fields-terminated-by '\t' \
--check-column id \
--incremental append \
--last-value 11
-》注意如果是增量导入,原目录是不能删除的 在原有文件的基础上新增记录。
ImportTool: (Consider saving this with 'sqoop job --create')
尝试可以将sqoop打包成一个job,代表这个任务去使用定时,实现增量导入
$ bin/sqoop job --help
创建sqoop job
bin/sqoop job \
--create stu_info2 \
-- \
import \
--connect \
jdbc:mysql://bigdata-01.yushu.com:3306/sqoop \
--username root \
--password 123456 \
--direct \
--table mysqltohdfs \
--target-dir /sqoop \
--num-mappers 1 \
--fields-terminated-by '\t' \
--check-column id \
--incremental append \
--last-value 14
执行任务:bin/sqoop job --exec stu_info2
--last-value '2017-05-14 15:00:30'
$ bin/sqoop job --show stu_info 查看是否有某个任务
$ bin/sqoop job --list 查看任务列表
十一、将mysql的数据导入hive中
-》和mysql导到HDFS一样,先将数据文件放到HDFS上,然后将结果集移动到hive的表对应的文件夹下
bin/sqoop import \
--connect \
jdbc:mysql://bigdata-01.yushu.com:3306/sqoop \
--username root \
--password 123456 \
--table mysqltohdfs \
--hive-import \
--hive-database student \
--hive-table stu_info \
--num-mappers 1 \
--fields-terminated-by '\t';
create database student;
create table stu_info(
id int,
name string
)
row format delimited fields terminated by '\t'
十二、sqoop导出
1、从HDFS导出到mysql
bin/sqoop export \
--connect \
jdbc:mysql://bigdata-01.yushu.com:3306/sqoop \
--username root \
--password 123456 \
--table hdfstomysql \
--export-dir /sqoop \
--num-mappers 1 \
--input-fields-terminated-by '\t'
建表:
create table hdfstomysql(
id int primary key not null,
name varchar(20) not null
);
--options-file 相当于hive中-f选项
$ bin/sqoop job --show stu_info 查看是否有某个任务
$ bin/sqoop job --list 查看任务列表
十一、将mysql的数据导入hive中
-》和mysql导到HDFS一样,先将数据文件放到HDFS上,然后将结果集移动到hive的表对应的文件夹下
bin/sqoop import \
--connect \
jdbc:mysql://bigdata-01.yushu.com:3306/sqoop \
--username root \
--password 123456 \
--table mysqltohdfs \
--hive-import \
--hive-database student \
--hive-table stu_info \
--num-mappers 1 \
--fields-terminated-by '\t';
create database student;
create table stu_info(
id int,
name string
)
row format delimited fields terminated by '\t'
十二、sqoop导出
1、从HDFS导出到mysql
bin/sqoop export \
--connect \
jdbc:mysql://bigdata-01.yushu.com:3306/sqoop \
--username root \
--password 123456 \
--table hdfstomysql \
--export-dir /sqoop \
--num-mappers 1 \
--input-fields-terminated-by '\t'
建表:
create table hdfstomysql(
id int primary key not null,
name varchar(20) not null
);
--options-file 相当于hive中-f选项
create table filetomysql(
id int primary key not null,
name varchar(20) not null
);
执行sqoop 文件
bin/sqoop --options-file sqoop.file
文件内容:
export
--connect
jdbc:mysql://bigdata-01.yushu.com:3306/sqoop
--username
root
--password
123456
--table
filetomysql
--export-dir
/sqoop
--num-mappers
1
--input-fields-terminated-by
'\t'
2、从Hive导出到mysql
bin/sqoop export \
--connect \
jdbc:mysql://bigdata-01.yushu.com:3306/sqoop \
--username root \
--password 123456 \
--table hivetomysql \
--export-dir /user/hive/warehouse/student.db/stu_info \
--num-mappers 1 \
--input-fields-terminated-by '\t'
);
执行sqoop 文件
bin/sqoop --options-file sqoop.file
文件内容:
export
--connect
jdbc:mysql://bigdata-01.yushu.com:3306/sqoop
--username
root
--password
123456
--table
filetomysql
--export-dir
/sqoop
--num-mappers
1
--input-fields-terminated-by
'\t'
2、从Hive导出到mysql
bin/sqoop export \
--connect \
jdbc:mysql://bigdata-01.yushu.com:3306/sqoop \
--username root \
--password 123456 \
--table hivetomysql \
--export-dir /user/hive/warehouse/student.db/stu_info \
--num-mappers 1 \
--input-fields-terminated-by '\t'
阅读全文
0 0
- hadoop安装之-sqoop
- Hadoop之Sqoop
- hadoop之sqoop抽取数据
- Hadoop系列七:Hadoop之sqoop篇
- 【Hadoop系列第八章】Flume 和 sqoop(下)之 sqoop
- Hadoop之——SQOOP笔记
- hadoop之sqoop准备工作------>windows10安装mysql
- hadoop之sqoop------>数据迁移工具
- Hadoop之Sqoop架构以及应用介绍
- mysql数据导入Hadoop之Sqoop安装
- Hadoop-Sqoop
- sqoop之sqoop简介
- hadoop学习之sqoop(7):sqoop的安装与使用
- 【Hadoop系列第八章】Flume 和 sqoop(上)之 Flume
- 走向云计算之Hadoop数据同步框架Sqoop
- Hadoop之Sqoop框架学习(笔记19)
- Hadoop入门之Sqoop的安装和数据导入导出
- Hadoop之Sqoop导出Hive表到Mysql
- Jsp的脚本、声明、表达式 详解
- Problem 1049: Lost My Music【可持久化栈+倍增】
- kafka1.0安装部署
- [LC]246. Strobogrammatic Number
- nginx + gunicorn + pypy + gevent 部署 web.py
- Hadoop之Sqoop
- 表处于"装入暂挂"状态 DB2 SQL Error: SQLCODE=-668, SQLSTATE=57016错误解决方法
- C#进阶系列——WebApi 身份认证解决方案:Basic基础认证
- CAD2014 X64 调试arx
- 主成分分析与因子分析之比较及实证分析
- nova 之compute服务
- Caffe学习之数据层及参数设置
- 装饰器模式(Decorator Pattern)
- 各种数据库字符串拼接方法