原文链接:

https://www.toutiao.com/i6772128429614563843/

首先我们已经安装好sqoop了,如果没有安装好参考文档《快速搭建CDH-Hadoop-Hive-Zoopkeeper-Sqoop环境进入Sqoop学习环境》

准备一些基本的认识

1、sqoop分为了sqoop1和sqoop2

2、sqoop2拆分server和client,类似于hiveserver2和beeline

3、sqoop早期是一些封装MR程序,以jar文件的形式,最后才演变成了框架

4、用于在hadoop和结构化数据库之间的高效传输批量数据的工具

下面我们开始做一些简单是使用,熟悉sqoop的使用方式

查看帮助信息:bin/sqoop help

连接mysql

bin/sqoop list-databases --connect jdbc:mysql://mastercdh:3306/ --username root --password password

可以将数据库罗列出来,显示mysql数据库说明安装成功

从关系型数据库中导入到HDFS(rdbms -> hdfs)

在mysql中创建一个库和表,方便我们练习

create table importhdfs(

id int primary key not null,

name varchar(20) not null

);

插入数据

insert into importhdfs values(1,'x1');

insert into importhdfs values(2,'x2');

insert into importhdfs values(3,'x3');

insert into importhdfs values(4,'x4');

insert into importhdfs values(5,'x5');

使用命令导入数据(注意反斜杠,反斜杠后面不能有空格等)

bin/sqoop import \

--connect jdbc:mysql://mastercdh:3306/sqoop_test \

--username root \

--password password \

--table importhdfs

我们可以看reduce数量,sqoop不运行reduce

或者

那么我们的数据在哪里?

搜索outputdir,就可以看到目录

hdfs://mastercdh:8020/user/root/importhdfs

我们就可以看到数据了

我们查看下数据

bin/hdfs dfs -text /user/root/importhdfs/part-m-00001

我们也可以

控制map任务的个数 -m,--num-mappers

输出目录路径如果存在则删除--delete-target-dir

指定输出目录 --target-dir

运行下

bin/sqoop import \

--connect jdbc:mysql://mastercdh:3306/sqoop_test \

--username root \

--password password \

--delete-target-dir \

--target-dir /sqoop_test \

--table importhdfs \

-m 1

我们查看数据

bin/hdfs dfs -text /sqoop_test/part-m-00000

这个数据分隔符是逗号

1,x1

2,x2

3,x3

4,x4

5,x5

我们可以指定数据输出分隔符(mysql默认是 ',')

分隔符参数fields-terminated-by

命令

bin/sqoop import \

--connect jdbc:mysql://mastercdh:3306/sqoop_test \

--username root \

--password password \

--delete-target-dir \

--target-dir /sqoop_test \

--table importhdfs \

-m 1 \

--fields-terminated-by "\t"

查看下数据

bin/hdfs dfs -text /sqoop_test/part-m-00000

其中有个日志信息

指定快速模式 --direct

命令

bin/sqoop import \

--connect jdbc:mysql://mastercdh:3306/sqoop_test \

--username root \

--password password \

--direct \

--delete-target-dir \

--target-dir /sqoop_test \

--table importhdfs \

-m 1 \

--fields-terminated-by "\t"

bin/hdfs dfs -text /sqoop_test/part-m-00000

增量导入,从原有的数据上进行追加数据。比如mysql中表数据变化了,那么我重新执行sqoop,会把HDFS上的数据删除,这不符合我们的要求,我们只希望在原来的基础上添加数据。

首先了解三个参数

--check-column (col):指定要导入时检查的列,行的检测列,一般都是拿主键作为检测列。注意:char、varchar类型不可以使用

--incremental (mode):有两种模式:append 和 lastmodifuied

append :追加 lastmodifuied:时间戳

--last-value (value):指定上次导入检测列最后字段的最大值,也就是最后一个值

在append模式下

增加几条数据

insert into importhdfs values(5,'x5');

insert into importhdfs values(6,'x6');

insert into importhdfs values(7,'x7');

insert into importhdfs values(8,'x8');

insert into importhdfs values(9,'x9');

注意:append和--delete-target-dir不能同时使用

bin/sqoop import \

--connect jdbc:mysql://mastercdh:3306/sqoop_test \

--username root \

--password password \

--direct \

--target-dir /sqoop_test \

--table importhdfs \

-m 1 \

--fields-terminated-by "\t" \

--check-column id \

--incremental append \

--last-value 5

会有很多信息

查看

查看

bin/hdfs dfs -text /sqoop_test/part-m-00000

bin/hdfs dfs -text /sqoop_test/part-m-00001

在lastmodifuied模式下

如果check-column是时间列time的话

--check-column time time列下面的数据,指定的就是你添加数据时最后的时间戳

--last-value"2019-12-19 19:04:07" 最后一行的时间戳

创建表

create table inc_tab(

id int,

name varchar(20),

last_mod timestamp default current_timestamp on update current_timestamp

);

添加数据

insert into inc_tab(id,name) values(1,'inc1');

insert into inc_tab(id,name) values(2,'inc2');

insert into inc_tab(id,name) values(3,'inc3');

insert into inc_tab(id,name) values(4,'inc4');

insert into inc_tab(id,name) values(5,'inc5');

执行sqoop命令

bin/sqoop import \

--connect jdbc:mysql://mastercdh:3306/sqoop_test \

--username root \

--password password \

--table inc_tab \

--target-dir /sqoop_test_inc \

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

--num-mappers 1

查看数据

bin/hdfs dfs -text /sqoop_test_inc/part-m-00000

再添加几条数据

insert into inc_tab(id,name) values(6,'inc6');

insert into inc_tab(id,name) values(7,'inc7');

insert into inc_tab(id,name) values(8,'inc8');

使用lastmodifuied模式进行增量导入指定增量数据是以--append(附加)还是 --merge-key(合并)模式进行添加

bin/sqoop import \

--connect jdbc:mysql://mastercdh:3306/sqoop_test \

--username root \

--password password \

--table inc_tab \

--target-dir /sqoop_test_inc \

--check-column last_mod \

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

--incremental lastmodified \

--last-value "2019-12-20 03:13:51" \

--num-mappers 1 \

--merge-key id

bin/hdfs dfs -text /sqoop_test_inc/part-r-00000

这个地方是有reduce的

这些命令我们可以使用job执行:sqoop job

bin/sqoop job --create job01 创建

bin/sqoop job --delete 删除任务

bin/sqoop job --exec 执行job

bin/sqoop job --show 显示job的详细信息

bin/sqoop job --list 显示可执行的job

示例语句:

sqoop job --create myjob -- import --connect jdbc:mysql://example.com/db \

--table mytable

我们做个练习

先导入数据

insert into importhdfs values(11,'x11');

insert into importhdfs values(12,'x12');

insert into importhdfs values(13,'x13');

insert into importhdfs values(14,'x14');

insert into importhdfs values(15,'x15');

执行命令

bin/sqoop job \

--create job_importhdfs \

-- \

import \

--connect jdbc:mysql://mastercdh:3306/sqoop_test \

--username root \

--password password \

--direct \

--target-dir /sqoop_test \

--table importhdfs \

-m 1 \

--fields-terminated-by "\t" \

--check-column id \

--incremental append \

--last-value 10

我们查看是否成功

我们执行一下

bin/sqoop job --exec job_importhdfs

执行job的时候会确认密码,指定成mysql的登录密码

我们查看数据

可以选择行列

导出某几列数据或者几行数据

bin/sqoop import \

--connect jdbc:mysql://mastercdh:3306/sqoop_test \

--username root \

--password password \

--direct \

--delete-target-dir \

--target-dir /where_test_importhdfs \

--table importhdfs \

-m 1 \

--fields-terminated-by "\t" \

--where 'id<6'

查看数据

bin/hdfs dfs -text /where_test_importhdfs/part-m-00000

导出某几列

--query使用要点:

不能使用--table

如果--query的sql语句带着where字句,

必须要加上标识符$CONDITIONS

查看数据

bin/hdfs dfs -text /where_test_importhdfs_sql/part-m-00000

mysql导入数据到hive中该如何做呢?

先登录hive

在hive中操作,创建数据库:

create database frommysql;

创建表

创建表

create table importhive_info(

num int,

name string

)row format delimited fields terminated by "\t";

数据也有了

执行语句

bin/sqoop import \

--connect jdbc:mysql://mastercdh:3306/sqoop_test \

--username root \

--password password \

--direct \

--table importhdfs \

--delete-target-dir \

--hive-import \

--hive-database frommysql \

--hive-table importhive_info \

--fields-terminated-by "\t" \

-m 1

执行报错

但是我们数据库明明有

查看mysql元数据信息发现新建的库表都没有

难道没有使用mysql的元数据库?初始化出问题了吗?于是重新初始化

bin/schematool -dbType mysql –initSchema

出现derby信息,还是旧信息

我的配置没有起作用?

为什么会有元数据库呢?说明之前是对的,仔细核对了一遍,发现是配置文件被我改动的问题。

这个地方写错路径了(截图已改对)

重新启动

Mysql中元数据库有了

重新创建上面的库表

元数据有信息了

在执行之前的sqoop语句

查看下hive中的数据已经有了

这个地方注意:运行mr任务时,结果将会保存在默认的输出目录上。还在/user/hive/warehouse。

从hdfs导入到mysql(export)

常规模式导入数据到mysql

我们创建一个表

create table tomysql(

id int primary key not null,

name varchar(20) not null

);

导出语句

bin/sqoop export \

--connect jdbc:mysql://mastercdh:3306/sqoop_test \

--username root \

--password password \

--table tomysql \

--export-dir /user/hive/warehouse/frommysql.db/importhive_info \

-m 1 \

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

查看下数据

sqoop运行一个file文件

在mysql重新建表file_to_mysql

创建文本

export

--connect

jdbc:mysql://mastercdh:3306/sqoop_test

--username

root

--password

password

--table

file_to_mysql

--export-dir

/user/hive/warehouse/frommysql.db/importhive_info

-m

1

--input-fields-terminated-by

'\t'

执行命令

bin/sqoop --options-file /data/test/filetomysql

查看数据已经有了

sqoop的使用之import导入到HDFS的更多相关文章

  1. 15.sqoop数据从mysql里面导入到HDFS里面

    表数据 在mysql中有一个库userdb中三个表:emp, emp_add和emp_contact 表emp id name deg salary dept 1201 gopal manager 5 ...

  2. 使用 sqoop 将mysql数据导入到hdfs(import)

    Sqoop 将mysql 数据导入到hdfs(import) 1.创建mysql表 CREATE TABLE `sqoop_test` ( `id` ) DEFAULT NULL, `name` va ...

  3. Sqoop导入到hdfs

    1.注意win下直接复制进linux 改一下--等 sqoop-list-databases --connect jdbc:mysql://122.206.79.212:3306/ --usernam ...

  4. sqoop操作之Oracle导入到HDFS

    导入表的所有字段 sqoop import --connect jdbc:oracle:thin:@192.168.1.100:1521:ORCL \ --username SCOTT --passw ...

  5. sqoop命令,mysql导入到hdfs、hbase、hive

    1.测试MySQL连接 bin/sqoop list-databases --connect jdbc:mysql://192.168.1.187:3306/trade_dev --username ...

  6. sqoop数据导入到Hdfs 或者hive

    用java代码调用shell脚本执行sqoop将hive表中数据导出到mysql http://www.cnblogs.com/xuyou551/p/7999773.html 用sqoop将mysql ...

  7. sqoop从mysql导入到hdfs出现乱码问题

    最近把hive元数据库的快照数据导入到hdfs中,以便对历史的元数据进行查询. 命令如下: sqoop import -D mapred.job.queue.name=do.production -- ...

  8. 大数据之路week07--day07 (Sqoop 从mysql增量导入到HDFS)

    我们之前导入的都是全量导入,一次性全部导入,但是实际开发并不是这样,例如web端进行用户注册,mysql就增加了一条数据,但是HDFS中的数据并没有进行更新,但是又再全部导入一次又完全没有必要. 所以 ...

  9. Sqoop(三)将关系型数据库中的数据导入到HDFS(包括hive,hbase中)

    一.说明: 将关系型数据库中的数据导入到 HDFS(包括 Hive, HBase) 中,如果导入的是 Hive,那么当 Hive 中没有对应表时,则自动创建. 二.操作 1.创建一张跟mysql中的i ...

随机推荐

  1. webapck搭建环境,让你知道vue中的h函数的作用和虚拟节点如何上树!

    搭建环境 npm init 初始化项目 npm i -D snabbdom 安装 npm i -D webpack@5 webpack-cli@3 webpack-dev-server@3 简单介绍 ...

  2. 推荐2个Mac OS X上的JSON工具

    原文:http://www.giser.net/?p=887 1 visual JSON 能够将JSON串以列表的方式展示,方便对JSON数据的解析. 2 JSONModeler 可以解析JSON串生 ...

  3. ssm项目中常用的上传文件

    在项目中,上传文件一般是必不可少的,所以今天学到新的上传方式,就干脆将学习过的上传方式记录一下 一.表单直接上传图片 表单头要设置 <form action="" metho ...

  4. 使用.NET 6开发TodoList应用(2)——项目结构搭建

    为了不影响阅读的体验,我把系列导航放到文章最后了,有需要的小伙伴可以直接通过导航跳转到对应的文章 : P TodoList需求简介 首先明确一下我们即将开发的这个TodoList应用都需要完成什么功能 ...

  5. 如何完成符合ISO 26262要求的基于模型设计(MBD)的测试

    背景介绍 随着汽车行业的迅速发展,汽车的复杂程度不断增加,越来越多的汽车电子控制系统具有与安全相关的功能,因此对ECU的安全要求也越来越高.复杂的软件功能,将会带来大量的软件风险问题,如何保证软件的安 ...

  6. 解决VMware开机黑屏问题

    最近搞虚拟机.一直遇见了许多问题.发现某一天.VMware开机后.其中一个虚拟机直接卡住黑屏了.关的时候就一直显示.xxx繁忙.无法关闭.网上搜到了解决方法.这边记录一下. 1.关闭所有服务 2.修复 ...

  7. [源码解析] PyTorch 分布式之弹性训练(3)---代理

    [源码解析] PyTorch 分布式之弹性训练(3)---代理 目录 [源码解析] PyTorch 分布式之弹性训练(3)---代理 0x00 摘要 0x01 总体背景 1.1 功能分离 1.2 Re ...

  8. windows平台使用 pthreads库

    note 近日封装一些跨平台库时, 发现线程的创建需要做平台的区分, windows的线程创建和Linux下的线程操作不一样.很麻烦,还要做平台区分. 能否在windows上使用pthread的线程库 ...

  9. c++设计模式概述之备忘录

    代买写的不够规范,,目的是缩短篇幅,实际中请不要这样做. 1.概述 和这个模式相似的生活场景,比如 office的撤销操作.VS  和 xcode等IDE的撤销操作 . 其实都是恢复到上一个或者下一个 ...

  10. 【LeetCode】959. Regions Cut By Slashes 由斜杠划分区域(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题思路 代码 日期 题目地址:https://leetcod ...