文档章节

Sqoop

GordonNemo
 GordonNemo
发布于 06/23 21:32
字数 1513
阅读 11
收藏 0

1.Sqoop:

《=》 SQL to Hadoop  背景

1)场景:数据在RDBMS中,我们如何使用Hive或者Hadoop来进行数据分析呢?

1) RDBMS ==> Hadoop(广义)

2) Hadoop ==> RDBMS

 

2)原来可以通过MapReduce  InputFormat  OutputFormat 来实现,很麻烦。

 

3)Sqoop: RDBMS和Hadoop之间的一个桥梁

 

 

Sqoop 1.x: 1.4.7

底层是通过MapReduce来实现的,而且是只有map没有reduce的

没有任何操作,只是数据搬迁,没有计算。

ruozedata.person  ===>  HDFS  通过jdbc              

 

Sqoop 2.x: 1.99.7   了解一下

两个版本区别:

1)两个不同版本,完全不兼容

2)版本号划分方式

      Apache:1.4.x~ ,1.99.x~

     CDH:sqoop-1.4.3-cdh4,sqoop2-1.99.2-cdh4.5.0/

3)Sqoop2比Sqoop1的改进

      引入sqoop server,集中化管理Connector等

     多种访问方式:CLI,Web UI,REST API

      引入基于角色的安全机制

 

功能

Sqoop 1

Sqoop 2

用于所有主要 RDBMS 的连接器

支持

不支持

解决办法: 使用已在以下数据库上执行测试的通用 JDBC 连接器: Microsoft SQL Server 、PostgreSQL 、 MySQL 和 Oracle 。

此连接器应在任何其它符合 JDBC 要求的数据库上运行。但是,性能可能无法与 Sqoop 中的专用连接器相比

 

Kerberos 安全集成

支持

不支持

数据从 RDBMS 传输至 Hive 或HBase

支持

不支持

解决办法: 按照此两步方法操作。

                             将数据从 RDBMS 导入HDFS

                             在 Hive 中使用相应的工具和命令(例如   LOAD DATA   语句),手动将数据载入 Hive 或 HBase

 

数据从 Hive 或 HBase 传输至RDBMS

不支持

解决办法: 按照此两步方法操作。

                            从 Hive 或HBase 将数据提取至 HDFS(作为文本或Avro 文件)

                            使用 Sqoop 将上一步的输出导出至RDBMS

 

不支持

按照与 

 

2.Sqoop导入导出概念

RDBMS <==> Hadoop   出发点是Hadoop

导入:RDBMS ==> Hadoop

导出:Hadoop ==> RDBMS

 

3.Sqoop架构

 

 

4.Sqoop安装下载

 

wget http://archive.cloudera.com/cdh5/cdh/5/sqoop-1.4.6-cdh5.7.0.tar.gz

tar -zxvf xxxxx -C ~/app

 

export SQOOP_HOME=/home/hadoop/app/sqoop-1.4.6-cdh5.7.0

export PATH=$SQOOP_HOME/bin:$PATH

 

$SQOOP_HOME/conf/sqoop-env.sh

export HADOOP_COMMON_HOME=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0

export HADOOP_MAPRED_HOME=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0

export HIVE_HOME=/home/hadoop/app/hive-1.1.0-cdh5.7.0

 

拷贝mysql驱动到$SQOOP_HOME/lib

 

默认4 个map task

 

Sqoop help

[hadoop@hadoop05 bin]$ sqoop version

18/06/23 20:14:44 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6-cdh5.7.0

Sqoop 1.4.6-cdh5.7.0

git commit id

Compiled by jenkins on Wed Mar 23 11:30:51 PDT 2016

 

 ####list-databases \ 换行

[hadoop@hadoop05 bin]$sqoop list-databases --connect jdbc:mysql://localhost:3306 --username root --password 123456

结果:

information_schema

gordon

mysql

performance_schema

test

 

5.Sqoop实验

5.1 列出所有的表

sqoop  list-tables \

--connect jdbc:mysql://localhost:3306/gordon \

--username root --password  123456

结果:

cds

city_info

columns_v2

compaction_queue

completed_txn_components

database_params

db_privs

dbs

delegation_tokens

func_ru

funcs

global_privs

hive_locks

…..

 

5.2 RDBMS ==> HDFS  导入 

sqoop import \

--connect jdbc:mysql://localhost:3306/gordon \

--username root --password 123456 \

--table city_info -m 1 \

--mapreduce-job-name FromMySQLToHDFS \

--delete-target-dir \

--columns "city_id,city_name,area" \

--target-dir CITY_INFO_COLUMN_WHERE \

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

--null-string '' --null-non-string '0' \

--where 'CITY_ID>3'

 

默认:

-m 4    设置map大小

位置:Emp  

[hadoop@hadoop05 bin]$ hadoop fs -ls /user/hadoop

Found 2 items

drwxr-xr-x   - hadoop supergroup          0 2018-06-23 20:25 /user/hadoop/CITY_INFO_COLUMN_WHERE

drwxr-xr-x   - hadoop supergroup          0 2018-06-23 14:18 /user/hadoop/EMP_COLUMN_WHERE

[hadoop@hadoop05 bin]$ hadoop fs -ls

Found 2 items

drwxr-xr-x   - hadoop supergroup          0 2018-06-23 20:25 CITY_INFO_COLUMN_WHERE

drwxr-xr-x   - hadoop supergroup          0 2018-06-23 14:18 EMP_COLUMN_WHERE

 

file: /tmp/sqoop-hadoop/compile/483c285e0889ae234a6c993d9e5301fe/city_info.jar

 

 

文本导入

表不存异常演示 table emp1

目前目录已经存在演示

--delete-target-dir \

 

 

####表不存在日志:

18/06/23 20:29:12 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM `city_` AS t LIMIT 1

18/06/23 20:29:12 ERROR manager.SqlManager: Error executing statement: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'gordon.city_' doesn't exist

 

[hadoop@hadoop05 bin]$ hadoop fs -ls CITY_INFO_COLUMN_WHERE

Found 2 items

-rw-r--r--   1 hadoop supergroup          0 2018-06-23 20:25 CITY_INFO_COLUMN_WHERE/_SUCCESS

-rw-r--r--   1 hadoop supergroup        128 2018-06-23 20:25 CITY_INFO_COLUMN_WHERE/part-m-00000

 

####查询生成的hadoop的数据

[hadoop@hadoop05 bin]$ hadoop fs -text  CITY_INFO_COLUMN_WHERE/part*

1        BEIJING        NC

2        SHANGHAI        EC

3        NANJING        EC

4        GUANGZHOU        SC

5        SANYA        SC

6        WUHAN        CC

7        CHANGSHA        CC

8        XIAN        NW

9        CHENGDU        SW

10        HAERBIN        NE

[hadoop@hadoop05 bin]$

 

 

5.3 RDBMS ==> HDFS  导入   按query查询语句导入

sqoop import \

--connect jdbc:mysql://localhost:3306/gordon \

--username root --password 123456 \

 -m 1 \

--mapreduce-job-name FromMySQLToHDFS \

--delete-target-dir \

--target-dir CITY_INFO_COLUMN_WHERE2 \

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

--null-string '' --null-non-string '0' \

--query "SELECT * FROM city_info WHERE CITY_ID>3 AND \$CONDITIONS" \

--split-by 'city_id'

 

注意:query使用双引号和单引号不一样

 

[hadoop@hadoop05 bin]$ hadoop fs -ls CITY_INFO_COLUMN_WHERE2

Found 2 items

-rw-r--r--   1 hadoop supergroup          0 2018-06-23 20:40 CITY_INFO_COLUMN_WHERE2/_SUCCESS

-rw-r--r--   1 hadoop supergroup         88 2018-06-23 20:40 CITY_INFO_COLUMN_WHERE2/part-m-00000

[hadoop@hadoop05 bin]$ hadoop fs -ls CITY_INFO_COLUMN_WHERE2/part*

-rw-r--r--   1 hadoop supergroup         88 2018-06-23 20:40 CITY_INFO_COLUMN_WHERE2/part-m-00000

[hadoop@hadoop05 bin]$ hadoop fs -text CITY_INFO_COLUMN_WHERE2/part*

4        GUANGZHOU        SC

5        SANYA        SC

6        WUHAN        CC

7        CHANGSHA        CC

8        XIAN        NW

9        CHENGDU        SW

10        HAERBIN        NE

[hadoop@hadoop05 bin]$

 

 

5.4 执行一个sql直接打印出来

sqoop eval \

--connect jdbc:mysql://localhost:3306/gordon \

--username root --password 123456 \

--query 'select * from city_info'

18/06/23 20:44:40 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.

-------------------------------------------------------------

| city_id     | city_name            | area                 |

-------------------------------------------------------------

| 1           | BEIJING              | NC                   |

| 2           | SHANGHAI             | EC                   |

| 3           | NANJING              | EC                   |

| 4           | GUANGZHOU            | SC                   |

| 5           | SANYA                | SC                   |

| 6           | WUHAN                | CC                   |

| 7           | CHANGSHA             | CC                   |

| 8           | XIAN                 | NW                   |

| 9           | CHENGDU              | SW                   |

| 10          | HAERBIN              | NE                   |

-------------------------------------------------------------

 

5.5 shell脚本

Vi  city_info.opt        

import

--connect

jdbc:mysql://localhost:3306/gordon

--username

root

--password

123456

--table

city_info

--delete-target-dir

 

sqoop --options-file city_info

        

 

5.6  HDFS==> RDBMS  导出

create table city_info_demo as select * from city_info where 1=2;

 

sqoop export \

--connect jdbc:mysql://localhost:3306/gordon \

--username root --password 123456 \

 -m 2 \

--mapreduce-job-name FromHDFSToMySQL \

--table city_info_demo \

--export-dir /user/hadoop/CITY_INFO_COLUMN_WHERE2

        

 

5.7 HDFS ==>RDBMS  导出  对应按列的表

 

sqoop export \

--connect jdbc:mysql://localhost:3306/gordon \

--username root --password 123456 \

 -m 2 \

--mapreduce-job-name FromHDFSToMySQL \

--table city_info_demo \

--columns "city_id,city_name" \

--export-dir /user/hadoop/CITY_INFO_COLUMN_WHERE2

 

 

5.8  RDBMS==>HIVE  导入

 

sqoop import \

--connect jdbc:mysql://localhost:3306/gordon \

--username root --password 123456 \

--table top4 -m 1 \

--mapreduce-job-name FromMySQLToHive \

--delete-target-dir \

--hive-database hive3_gordon \

--hive-table top4 \

--hive-import \

--hive-partition-key 'tt' \

--hive-partition-value '2016-05-05' \

--fields-terminated-by '\t' --hive-overwrite

 

--create-hive-table自动创建表不建议使用,(因为不满足要求,类型会自动转换),建议大家先创建一个hive表再进行sqoop导入数据到hive表

 

分区表

create table top4(product_id int,product_name string,area string,click_count int,rank int,dayday string)

partitioned by (pt string)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY '\t'

注意:内部走load

 

 

 

5.9  HIVE==>RDBMS  导出

      场景:大数据统计完的结果需要做展示。

Hive To MySQL

Hive的数据:HDFS

HDFS2MySQL ==  Hive2MySQL

 Hive2MySQL测试

        

sqoop export \

--connect jdbc:mysql://localhost:3306/gordon \

--username root --password 123456 \

--table top3 -m 1 \

--mapreduce-job-name top3_imp \

--export-dir /user/hive/warehouse/hive3_gordon.db/top3/day=2016-05-05  \

--columns "product_id,product_name,area,click_count,rank,dayday" \

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

 

 

5.10  sqoop  job

sqoop job --create ruozejob -- \

import \

--connect jdbc:mysql://localhost:3306/gordon \

--username root --password 123456 \

--table city_info -m 1 \

--mapreduce-job-name FromMySQLToHDFS \

--delete-target-dir

 

####删除

Sqoop job --delete ruozejob

 

 

 

© 著作权归作者所有

共有 人打赏支持
GordonNemo
粉丝 4
博文 35
码字总数 60946
作品 0
杭州
架构师
Apache Sqoop 1.4.6 发布,Hadoop 数据迁移

Apache Sqoop 1.4.6 发布,这是 Apache Sqoop 地五个版本,现已提供下载: http://www.apache.org/dyn/closer.cgi/sqoop/ 更新内容如下: Bug 修复 [SQOOP-1125] - Out of memory errors wh......

oschina
2015/05/11
1K
0
Apache Sqoop 1.99.4 发布,Hadoop 数据迁移

Apache Sqoop 1.99.4 发布,这是 Sqoop2 的第四个里程碑版本,是非常重要的一个里程碑。 Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : ...

oschina
2014/11/27
2.2K
0
Apache Sqoop 1.4.5 发布

Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导入到Hadoop的HDFS中,也可以将HDFS的数据导入到关系...

oschina
2014/08/14
3.4K
1
sqoop1.4.6吧mysql的数据导入进hdfs,同样的环境在sqoop1.4.4就可以正常运行

INFO tool.CodeGenTool: Beginning code generation 15/11/25 12:46:30 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM `cc` AS t LIMIT 1 15/11/25 12:46:30 ERROR ma......

happy俊vs哥
2015/11/25
435
0
sqoop没有添加驱动包的时候也可以运行

问题是这样的,我使用sqoop1.4.6把mysql的数据导入hdfs上,不管在${SQOOP_HOME}/lib这里面有没有mysql驱动包,他就是报错, 15/11/26 06:47:52 INFO manager.SqlManager: Executing SQL sta...

happy俊vs哥
2015/11/26
525
0

没有更多内容

加载失败,请刷新页面

加载更多

数字转换为字符的L受哪个参数影响

我们知道,如果想把金额带上本位币,一般加上L, 比如: select to_char(salary,'L99,9999.00') from employees; 下面显示如下: SALARY TO_CHAR(SALARY,'L99, 2900 ¥2,900.00 2500 ¥2,500.00 ...

tututu_jiang
16分钟前
0
0
shell编程(告警系统主脚本、告警系统配置文件、告警系统监控项目)

告警系统主脚本 先定义监控系统的各个目录,然后再去定义主脚本,因为是分布式的,所以需要每台机器都这样做,如果事先有创建好各个目录和各个脚本,那么就可以把这些目录和脚本copy到其他机...

蛋黄_Yolks
16分钟前
0
0
SAP HANA Backup and Recovery

SAP HANA Backup and Recovery Skip to end of metadata Created by Paul Power, last modified on Nov 23, 2017 Go to start of metadata Purpose System Privileges How to Perform a Back......

rootliu
18分钟前
0
0
JVM的持久代——何去何从?

本文会介绍一些JVM内存结构的基本概念,然后很快会讲到持久代,来看下Java SE 8发布后它究竟到哪去了。 基础知识 JVM只不过是运行在你系统上的另一个进程而已,这一切的魔法始于一个java命令...

java知识分子
35分钟前
0
0
Hive和HBase的区别

hive是文件的视图,hbase是建了索引的key-value表。 先放结论:Hbase和Hive在大数据架构中处在不同位置,Hbase主要解决实时数据查询问题,Hive主要解决数据处理和计算问题,一般是配合使用。...

飓风2000
41分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部