文档章节

Sqoop

GordonNemo
 GordonNemo
发布于 06/23 21:32
字数 1513
阅读 11
收藏 0
点赞 0
评论 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
博文 34
码字总数 55490
作品 0
杭州
架构师
Apache Sqoop 1.4.5 发布

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

oschina
2014/08/14
3.4K
1
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.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
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
Installing Sqoop2 On Oracle Linux 7.4

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

candon123
2017/12/20
0
0
Apache Sqoop 1.99.2 发布,Hadoop 数据迁移

Apache Sqoop 团队很高兴的宣布 Sqoop 1.99.2 发布,这是 Sqoop 2 的一个重要里程碑,详细改进请看发行说明。 其中新特性包括: [SQOOP-643] - Sqoop2: Implement simple listings for conn...

红薯
2013/04/26
2K
0
sqoop导入数据时出现的一个问题

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/mapred/JobConf at org.apache.sqoop.orm.CompilationManager.findHadoopCoreJar(CompilationManager.java:......

尚浩宇
2015/10/09
1K
1
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
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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

使用爬虫实现代理IP池之放弃篇

啥叫代理IP以及代理IP池 概念上的东西网上搜索一下就好了,这里简单科普一下(大部分会读这篇文章的人,基本是不需要我来科普的),白话说就是能联网并提供代理访问互联网的服务器,它提供的...

一别丶经年
16分钟前
0
0
rabbitmq学习记录(五)交换机Exchange-fanout

之前学习的都是一条消息发给一个消费者,下面开始记录如何把一条信息发给多个消费者 这边我们用到了交换机Exchange 交换机模式:fanout 模式特点:生产者把消息发送给Exchange之后,Exchang...

人觉非常君
37分钟前
0
0
sqoop导入数据到Base并同步hive与impala

使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟 基础环境 Sqool和Hive、HBase简介 Sqoop Hive HBase 测试Sqoop 使用Sqoop从MySQL导入数据到Hive 使用复杂SQL 调整Hive数据类型 不断更新 ...

hblt-j
43分钟前
0
0
Dart 服务端开发 文件上传

clent端使用angular组件 upload_component.html form id="myForm" method="POST" enctype="multipart/form-data"> <input type="file" name="fileData"> <!-- file field --></form>......

scooplol
43分钟前
0
0
apache和tomcat同时开启,乱码问题

tomcat和apache同时开启,会走apache的转发,执行的是AJP/1.3协议。所以在tomcat的配置文件server中, <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" useBodyEncodingForU......

Kefy
59分钟前
0
0
使用ssh-keygen和ssh-copy-id三步实现SSH无密码登录 和ssh常用命令

ssh-keygen 产生公钥与私钥对. ssh-copy-id 将本机的公钥复制到远程机器的authorized_keys文件中,ssh-copy-id也能让你有到远程机器的home, ~./ssh , 和 ~/.ssh/authorized_keys的权利 第一步...

xtof
今天
0
0
orcale 查询表结构

SELECT t.table_name, t.colUMN_NAME, t.DATA_TYPE || '(' || t.DATA_LENGTH || ')', t1.COMMENTS FROM User_Tab_Cols t, User_Col_Comments t1WHERE t.table_name......

wertwang
今天
0
0
Java 之 反射

反射,剖析 Java类 中的 各个组成部分,映射成 一个个 Java对象,多用于 框架和组件,写出复用性高的通用程序。 测试类代码如下: class Person { private String name; public St...

绝世武神
今天
0
0
华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大

华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大!华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大! 在华为最新发布的nova 3手机上,抖音通过华为himedia SDK集成了60fps、超级...

华为终端开放实验室
今天
0
0
多 SSH Key 实现同一台服务器部署多 Git 仓库

本文以以下需求为背景,介绍详细的做法: 需在同一台服务器同时部署两个不同的 Github 仓库(对 Bitbucket 等 git 服务同样适用) root 用户可在远程登录 SSH 后附上预期的 SSH Key 进行 gi...

yeahlife
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部