文档章节

Sqoop

GordonNemo
 GordonNemo
发布于 06/23 21:32
字数 1513
阅读 17
收藏 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

 

 

 

© 著作权归作者所有

共有 人打赏支持
上一篇: Nginx入门
下一篇: Hive函数
GordonNemo
粉丝 5
博文 51
码字总数 92627
作品 0
杭州
架构师
私信 提问
Apache Sqoop 1.4.5 发布

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

oschina
2014/08/14
3.5K
1
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
Sqoop1配置过程

注:sqoop官网提供sqoop1和sqoop2两个版本,sqoop2不支持hive、hbase等。 配置过程 1、解压sqoop tar包,本例解压到/usr/local/sqoop-1.4.6目录。 2、复制/usr/local/sqoop-1.4.6/conf下的s...

源子
2016/10/13
3
0
sqoop使用mysql做为metastore

<property> <name>sqoop.metastore.client.enable.autoconnect</name> <value>false</value> <description>If true, Sqoop will connect to a local metastore for job management when no o......

Jiangnan_
2016/03/08
129
0

没有更多内容

加载失败,请刷新页面

加载更多

结合Spring和Groovy解决脚本热加载

前言 去年写过一篇文件介绍了采用jpython解决动态配置热加载的问题jpython解决热加载,今年在实现规则引擎过程中准备进行升级,采用groovy脚本解决。 方案 将一些规则相关,如统计,排序,过...

春哥大魔王的博客
3分钟前
0
0
以太坊应用开发接口:JSON RPC API

以太坊应用开发接口指的是以太坊节点软件提供的API接口,去中心化应用可以利用这个接口访问以太坊上的智能合约。以太坊应用开发接口采用JSON-PRC标准,通常是通过HTTP或websocket提供给应用程...

汇智网教程
7分钟前
0
0
排序--二分插入排序

二分插入排序是对直接插入排序的一个优化,在排序--直接插入排序中已经分析过直接插入排序的最坏时间复杂度是平方级别的,二分插入排序则是通过二分查找对寻找插入位置进行了优化,在找到插入...

FAT_mt
17分钟前
1
0
Quora点赞过万!麻省理工5.0GPA十条学习技巧

美国版知乎Quora上有个问题是:顶尖学生如何学习。排名第一的答案已经赢得13.5K次点赞,我们翻译出来分享给大家。 MIT normally does not rank its students. So if you hear that someone g...

乔老哥
30分钟前
1
0
IOC的学习(1)

1.IOC理论概要 java中,一个对象A怎么才能调用对象B? 当一个对象的构建,需要多个其他对象时,对象和对象有复杂的构建关系。spring帮助我们维系对象的依赖关系,降低系统的实现成本,前提是...

杨健-YJ
42分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部