sqoop之操作

导入:
传统关系型数据库---->大数据平台的
import
mysql------>hadoop
--connect 指定关系型数据库链接url mysql:jdbc://hadoop02:3306/
--username 指定数据库的用户名
--password 指定数据库的密码
--table 指定要导出数据的mysql数据库表 关系型数据库中的表名
需要导出数据的mysql的表名
-m 指定MapTask的个数
--target-dir 指定导入数据在HDFS上的存储目录
--fields-terminated-by 指定每条记录中字段之间的分隔符
--where 指定查询SQL的where条件
--query 指定查询SQL
--columns 指定查询列 指定的是mysql中需要导出的列

列出MySQL数据有哪些数据库:
sqoop list-databases \
--connect jdbc:mysql://hadoop02:3306/ \
--username root \
--password 123456

list-databases 列出mysql数据库中的所有库信息

列出MySQL中的某个数据库有哪些数据表:
sqoop list-tables \
--connect jdbc:mysql://hadoop02:3306/mysql \
--username root \
--password 123456

创建一张跟mysql中的help_keyword表一样的hive表hk:
sqoop create-hive-table \
--connect jdbc:mysql://hadoop02:3306/mysql \
--username root \
--password root \
--table help_keyword \
--hive-table hk

常用的数据导入:
mysql-->hdfs、hive、hbase
import
1)mysql---hdfs
导入MySQL表中数据到HDFS中:

// 普通导入:导入mysql库中的help_keyword的数据到HDFS上的默认路径:/user/hadoop/help_keyword
sqoop import \
--connect jdbc:mysql://hadoop02:3306/mysql \
--username root \
--password 123456 \
--table help_topic \
-m 1
mysql数据库的表 help_topic ---- hdfs上

默认目录:/user/hadoop/help_topic(表名)
_SUCCESS 成功标志文件
part-m-00000 结果文件 maptask输出的
默认分割符 ,

// 导入: 指定分隔符和导入路径
sqoop import \
--connect jdbc:mysql://hadoop02:3306/mysql \
--username root \
--password 123456 \
--table help_keyword \
--target-dir /user/data01/mydata/help_keyword \
--fields-terminated-by ‘\t‘ \
-m 1

// 导入数据:带where条件
sqoop import \
--connect jdbc:mysql://hadoop02:3306/mysql \
--username root \
--password 123456 \
--where "name=‘AT‘" \
--table help_keyword \
--target-dir /user/sqoop/data01/myoutport1 \
-m 1

相当于:select * from help_keyword where name=‘AT‘;

sqoop import \
--connect jdbc:mysql://hadoop02:3306/mysql \
--username root \
--password 123456 \
--where "help_keyword_id>200" \
--table help_keyword \
--target-dir /user/sqoop/data01/myoutport2 \
-m 1

select * from help_keyword where help_keyword_id>200;

// 查询指定列
sqoop import \
--connect jdbc:mysql://hadoop02:3306/mysql \
--username root \
--password 123456 \
--columns "name" \
--where "help_keyword_id>200" \
--table help_keyword \
--target-dir /user/sqoop/data01/myoutport3 \
-m 1
selct name from help_keyword where name = "string"

// 导入:指定自定义查询SQL
sqoop import \
--connect jdbc:mysql://hadoop02:3306/ \
--username root \
--password 123456 \
--target-dir /user/sqoop/data01/myimport4 \
--query ‘select * from mysql.help_keyword where help_keyword_id > 200 and $CONDITIONS‘ \
--split-by help_keyword_id \
--fields-terminated-by ‘\t‘ \
-m 4

注意:
--query和--where --columns 不能一起使用 一起使用会报错的
--split-by 指定多个maptask数据划分的 建
-m maptask的个数
当maptask超过一个的时候,指定maptask的切分的列
每一个maptask在进行数据分配的时候 根据指定的列分配

每一个maptask的任务是顺序 平均分配的
201-452 252条数据 4个maptask
maptask0 201-263
maptask1 264-326
maptask2 327-389
maptask3 390-452
报错:
Encountered IOException running import job: java.io.IOException: Query [select * from mysql.help_keyword where help_keyword_id > 200] must contain ‘$CONDITIONS‘ in WHERE clause.
sql语句中必须包含$CONDITIONS
$CONDITIONS sqoop命令的语法要求 没有任何实际意义的
where过滤条件中 最后添加 and $CONDITIONS

sqoop import \
--connect jdbc:mysql://hadoop02:3306/mysql \
--username root \
--password 123456 \
--target-dir /user/hadoop/myimport33_2 \
--query "select * from help_keyword where $CONDITIONS" \
--split-by help_keyword_id \
--fields-terminated-by ‘\t‘ \
-m 2

在以上需要按照自定义SQL语句导出数据到HDFS的情况下:
1、引号问题,要么外层使用单引号,内层使用双引号,$CONDITIONS的$符号不用转义, 要么外层使用双引号,那么内层使用单引号,然后$CONDITIONS的$符号需要转义
2、自定义的SQL语句中必须带有WHERE \$CONDITIONS

2)mysql---->hive中
注意:在hive中创建出来表 但是hive库需要自己手动创建
导入MySQL数据库中的表数据到Hive中:

// 普通导入:数据存储在默认的default hive库中,表名就是对应的mysql的表名:
sqoop import \
--connect jdbc:mysql://hadoop02:3306/mysql \
--username root \
--password 123456 \
--table help_topic \
--hive-import \
-m 1

--table 指定关系型数据库中的表
--hive-import 将数据导入到hive中

默认的会将数据导入到hive的default数据库下 表名同mysql中的表名

第一步:导入mysql.help_keyword的数据到hdfs的默认路径 /user/用户/help_keyword
第二步:自动仿造mysql.help_keyword去创建一张hive表,
创建在默认的default库中 表名同mysql中的表名
第三步:把临时目录中的数据导入到hive表的数据目录下
load data inpath

// 指定行分隔符和列分隔符,指定hive-import,指定覆盖导入,指定自动创建hive表,指定表名,指定删除中间结果数据目录
sqoop import \
--connect jdbc:mysql://hadoop02:3306/mysql \
--username root \
--password 123456 \
--table help_keyword \
--fields-terminated-by "\t" \
--lines-terminated-by "\n" \
--hive-import \
--hive-overwrite \
--create-hive-table \
--delete-target-dir \
--hive-database weibo \
--hive-table new_help_keyword

hive-import 当前这个导入命令。 sqoop会自动给创建hive的表。 但是不会自动创建不存在的库
--hive-overwrite 覆盖导入hive表
--create-hive-table 创建hive表
--hive-database 指定hive表的数据库 数据库一定是hive已经存在的 不会自动创建
--hive-table 指定hive的表名 不需要创建 自动创建的

注意:hive的表会自动创建 库不会自动创建 手动创建

另外一种写法:
sqoop import \
--connect jdbc:mysql://hadoop02:3306/ \
--username root \
--password 123456 \
--table mysql.help_keyword \
--fields-terminated-by "\t" \
--lines-terminated-by "\n" \
--hive-import \
--hive-overwrite \
--create-hive-table \
--hive-table mydb_test.new_help_keyword01 \
--delete-target-dir

--hive-overwrite 覆盖导入

// 增量导入
1-200 201-400
将mysql中新增的数据导入到大数据平台
在原来的数据基础上 进行追加数据导入
条件:
有一个标识增量的建 通常主键

sqoop import \
--connect jdbc:mysql://hadoop02:3306/mysql \
--username root \
--password 123456 \
--table help_keyword \
--target-dir /user/hadoop/myimport_add \
--incremental append \
--check-column help_keyword_id \
--last-value 200 \
-m 1

参数:
sqoop数据导入hive/hdfs的时候 有两种导入方式:
1)全量数据导入 mysql的数据每次全部导入
2)增量数据导入 每一次只导入新增的数据

Incremental import arguments:
--check-column <column> Source column to check for incremental
change
指定用于标识增量的键 用于检验
help_keyword_id
--incremental <import-type> Define an incremental import of type
‘append‘ or ‘lastmodified‘
增量导入的方式 id
append 追加 *****
lastmodified 最后一次修改的时间或建
--last-value <value> Last imported value in the incremental
check column
指定上一次的最后最后一个增量的建的值 500
这次导入则是从这个值的下一个值开始导入

#########################################################
3)导入mysql数据到hbase:

sqoop import \
--connect jdbc:mysql://hadoop02:3306/mysql \
--username root \
--password root \
--table help_keyword \
--hbase-table new_help_keyword \
--column-family person \
--hbase-row-key help_keyword_id
注意:hbase中的表需要手动创建的 不会自动创建的
--hbase-table 指定hbase的表名的
--column-family 指定hbase的列族的
--hbase-row-key 指定导入到hbase的rowkey的建

导出:
hadoop(hdfs hive hbase)------>mysql中

很不幸: 可以从HDFS导出到MySQL,
也可以从Hive导出数据到MySQL,
但是没有一种直接的方式可以让HBase的数据导出到MySQL
面试问题:如何将habse的数据导出mysql中

思考:

HDFS 和 Hive , HBase 不可以?

HBase的SQL客户端: hive + phoenix

hbase表中的 key 的值不确定 和 很多。

想办法,还是可以实现把hbase中的数据导出mysql

导出的需求很少: 本身数据量是很大的。 MySQL

所有的计算任务的处理结果,有时候是需要被导出到MySQL中的。

注意:导出的RDBMS的表必须自己预先创建,不会自动创建

create database sqoopdb default character set utf8 COLLATE utf8_general_ci;
use sqoopdb;
CREATE TABLE sqoopfur (
id INT,
name VARCHAR(60)
);

// 导出HDFS数据到MySQL:
sqoop export \
--connect jdbc:mysql://hadoop02:3306/sqoopdb \
--username root \
--password 123456 \
--table sqoopfur \
--export-dir /user/hadoop/myimport_add \
--fields-terminated-by ‘,‘

--export-dir 指定hdfs需要导出的数据的文件夹
fields-terminated-by ‘\t‘ 指定的是hdfs上文件的分隔符

注意:不会创建mysql上的数据库 和表的需要手动创建

// 导出hive数据到MySQL:等同于hdfs---》mysql的
sqoop export \
--connect jdbc:mysql://hadoop02:3306/sqoopdb \
--username root \
--password 123456 \
--table uv_info \
--export-dir /user/hive/warehouse/uv/dt=2011-08-03 \
--input-fields-terminated-by ‘\t‘

--export-dir 指定的是hive的表在hdfs的存储目录
hive---mysql本质 hdfs---mysql中

一些其他操作:

列出mysql数据库中的所有数据库
sqoop list-databases \
--connect jdbc:mysql://hadoop02:3306/ \
-username root \
-password root

连接mysql并列出数据库中的表
sqoop list-tables \
--connect jdbc:mysql://hadoop02:3306/jdbc_test1704 \
-username root \
-password root

将关系型数据的表结构复制到hive中
sqoop create-hive-table \
--connect jdbc:mysql://hadoop02:3306/jdbc_test1704 \
--table student \
--username root \
--password root \
--hive-table mydb_test.student \
--fields-terminated-by "\t" \
--lines-terminated-by "\n"

原文地址:https://www.cnblogs.com/zhangxiaofan/p/10995037.html

时间: 2024-10-27 13:37:48

sqoop之操作的相关文章

sqoop基本 操作

列出 hive的 全部库 sqoop list-databases --connect jdbc:mysql://localhost --username hive --password hive 列出全部的表 sqoop list-tables --connect jdbc:mysql://localhost/hive_metadata --username hive --password hive mysql导入到hdfs中 sqoop import -connect jdbc:mysql:

Sqoop基础操作

1.查看数据库 sqoop list-databases \ #查看数据库的命令 --connect jdbc:mysql://master:3306 \ #数据库连接地址 --username root \ #用户名 --password root #密码 2.根据mysql表创建hive表 sqoop create-hive-table --connect jdbc:mysql://master:3306/test --username root --password root --tabl

sqoop搭建

sqoop版本1.99.7#此搭建过程在最后启动job的时候失败了,每个版本的差异性蛮大的. 版本下载链接:http://pan.baidu.com/s/1pKYrusz 密码:7ib5 搭建sqoop之前,已经配置好了hadoop和java的环境 当第一次启动后,KILL掉HADOOP进程后出现的各种问题,重启机器解决问题. This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh 错误: 找不到或无法加载主类

Apache Sqoop - Overview Apache Sqoop 概述

使用Hadoop来分析和处理数据需要将数据加载到集群中并且将它和企业生产数据库中的其他数据进行结合处理.从生产系统加载大块数据到Hadoop中或者从大型集群的map reduce应用中获得数据是个挑战.用户必须意识到确保数据一致性,消耗生产系统资源,供应下游管道的数据预处理这些细节.用脚本来转化数据是低效和耗时的方式.使用map reduce应用直接去获取外部系统的数据使得应用变得复杂和增加了生产系统来自集群节点过度负载的风险. 这就是Apache Sqoop能够做到的.Aapche Sqoop

sqoop的安装与使用

1.什么是Sqoop Sqoop即 SQL to Hadoop ,是一款方便的在传统型数据库与Hadoop之间进行数据迁移的工具,充分利用MapReduce并行特点以批处理的方式加快数据传输,发展至今主要演化了二大版本,Sqoop1和Sqoop2. Sqoop工具是hadoop下连接关系型数据库和Hadoop的桥梁,支持关系型数据库和hive.hdfs,hbase之间数据的相互导入,可以使用全表导入和增量导入. 那么为什么选择Sqoop呢? 高效可控的利用资源,任务并行度,超时时间. 数据类型映

sqoop测试Mysql数据库的使用

测试Mysql数据库的使用 前提:导入mysql jdbc的jar包 ①  测试数据库连接 sqoop list-databases–connect jdbc:mysql://192.168.10.63 –username root–password 123456 ②Sqoop的使用 以下所有的命令每行之后都存在一个空格,不要忘记 (以下6中命令都没有进行过成功测试) <1>mysql–>hdfs sqoop export –connect jdbc:mysql://192.168.10

Hadoop学习之第八章节:Sqoop安装配置

一.Sqoop介绍 Sqoop是一个用来将Hadoop(Hive.HBase)和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如:MySQL ,Oracle ,Postgres等)中的数据导入到Hadoop的HDFS中,也可以将HDFS的数据导入到关系型数据库中. Sqoop目前已经是Apache的顶级项目了,目前版本是1.4.4 和 Sqoop2 1.99.3,本文以1.4.4的版本为例讲解基本的安装配置和简单应用的演示. 版本为: sqoop-1.4.6.bin__hadoo

sqoop产生背景及概述

sqoop产生背景 多数是用Hadoop技术处理大数据业务的企业有大量的数据存储在传统的关系型数据库(RDBMS)中:由于缺乏工具的支持.对Hadoop和传统数据库系统中的数据进行相互传输是一件十分困难的事情:Sqoop就是一个在RDBMS和Hadoop之间进行数据传输的项目: sqoop概述 sqoop是Hive/HDFS/HBase与关系数据库之间 导入和导出工具 sqoop: SQL-to-Hadoop1)连接传统关系型数据库和Hadoop的桥梁: 把关系型数据的数据导入到Hadoop与其

安装 sqoop

简介 Sqoop是一个用来将Hadoop(Hive.HBase)和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如:MySQL ,Oracle ,Postgres等)中的数据导入到Hadoop的HDFS中,也可以将HDFS的数据导入到关系型数据库中,但是不能将hbase.hive的数据导入到关系型数据库. 下载 因为官方并不建议在生产环境中使用sqoop2,即1.99.7,所以这里我用的是sqoop1,即1.4.7 点击下载:sqoop-1.4.7.bin__hadoop-2.6