真正了解sqoop的一切

一.sqoop的简单概论

1.sqoop产生的原因:

A. 多数使用hadoop技术的处理大数据业务的企业,有大量的数据存储在关系型数据中。

B. 由于没有工具支持,对hadoop和关系型数据库之间数据传输是一个很困难的事。

依据以上的原因sqoop产生的。

2. sqoop的介绍

sqoop是连接关系型数据库和hadoop的桥梁,主要有两个方面(导入和导出):

A. 将关系型数据库的数据导入到Hadoop 及其相关的系统中,如 Hive和HBase

B. 将数据从Hadoop 系统里抽取并导出到关系型数据库

导出和导入

3.Sqoop的优点:

A. 可以高效、可控的利用资源,可以通过调整任务数来控制任务的并发度。

B. 可以自动的完成数据映射和转换。由于导入数据库是有类型的,它可以自动根据数据库中的类型转换到Hadoop 中,当然用户也可以自定义它们之间的映射关系

C.支持多种数据库,如mysql,orcale等数据库

4. sqoop工作的机制:

将导入或导出命令翻译成MapReduce程序来实现在翻译出的,MapReduce 中主要是对InputFormat和OutputFormat进行定制

5. sqoop版本介绍:sqoop1和sqoop2

A. sqoop的版本sqoop1和sqoop2是两个不同的版本,它们是完全不兼容的

B. 版本划分方式: apache1.4.X之后的版本是1,1.99.0之上的版本是2

C. Sqoop2相比sqoop1的优势有:

1) 它引入的sqoop Server,便于集中化的管理Connector或者其它的第三方插件;

2) 多种访问方式:CLI、Web UI、REST API;

3) 它引入了基于角色的安全机制,管理员可以在sqoop Server上配置不同的角色。

D. Sqoop2和sqoop1的功能性对比:

功能性对比

E. sqoop1和sqoop2的架构区别:

1)sqoop1的架构图:

sqoop1的架构图

版本号:1.4.X以后的sqoop1

在架构上:sqoop1使用sqoop客户端直接提交代码方式

访问方式:CLI命令行控制台方式访问

安全性:命令或者脚本指定用户数据库名和密码

原理:Sqoop工具接收到客户端的shell命令或者Java api命令后,通过Sqoop中的任务翻译器(Task Translator)将命令转换为对应的MapReduce任务,而后将关系型数据库和Hadoop中的数据进行相互转移,进而完成数据的拷贝

2)sqoop2架构图:

sqoop2架构图

版本号:1.99.X以上的版本sqoop2

在架构上:sqoop2引入了 sqoop server,对对connector实现了集中的管理访问方式:REST API、 JAVA API、 WEB UI以及CLI控制台方式进行访问 

CLI方式访问,会通过交互过程界面,输入的密码信息会被看到,同时Sqoop2引入基亍角色的安全机制,Sqoop2比Sqoop多了一个Server端。

F. Sqoop1和sqoop2优缺点:

sqoop1优点:架构部署简单

sqoop1缺点:命令行方式容易出错,格式紧耦合,无法支持所有数据类型,安全机制不够完善,例如密码暴漏,安装需要root权限,connector必须符合JDBC模型

sqoop2优点:多种交互方式,命令行,web UI,rest API,conncetor集中化管理,所有的链接安装在sqoop server上,完善权限管理机制,connector规范化,仅仅负责数据的读写

sqoop2缺点:sqoop2的缺点,架构稍复杂,配置部署更繁琐

二.安装sqoop1:

1. 安装前提:

Sqoop需要安装在hive,hbase的服务器上,linux环境中必须有java和hadoop环境

Java 1.8.0_161

Hadoop  2.8.5

2. 下载软件:

软件下载地址:http://mirrors.hust.edu.cn/apache/sqoop

此处下载的软件是sqoop1的软件包:sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz

3. 安装sqoop:

A. 解压:

tar xf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz

mv sqoop-1.4.7.bin__hadoop-2.6.0 /usr/local/sqoop

B. 修改配置文件:

cd /usr/local/sqoop/conf

cp sqoop-env-template.sh  sqoop-env.sh

vim  sqoop-env.sh

export HADOOP_COMMON_HOME=/usr/local/hadoop

export HADOOP_MAPRED_HOME=/usr/local/hadoop

export HIVE_HOME=/usr/local/hive

注意:为什么在sqoop-env.sh文件中会要求分别进行 common和mapreduce的配置呢

在apache的hadoop的安装中四大组件都是安装在同一个hadoop_home中的,但是在CDH, HDP中, 这些组件都是可选的。在安装hadoop的时候,可以选择性的只安装HDFS或者YARN。CDH,HDP在安装hadoop的时候,会把HDFS和MapReduce有可能分别安装在不同的地方。

CDH(Cloudera’s Distribution, including Apache Hadoop),是Hadoop众多分支中的一种,由Cloudera维护,基于稳定版本的Apache Hadoop构建,并集成了很多补丁,可直接用于生产环境

HDP(Hortonworks Data Platform)是hortworks推出的100%开源的hadoop发行版本,以YARN 作为其架构中心,包含pig、hive、phoniex、hbase、storm、spark等大量组件,在最新的2.4版本,监控UI实现与grafana集成

C. 将mysql的驱动包放到sqoop的lib目录下

cp  mysql-connector-java-5.1.46.jar /usr/local/sqoop/lib

D. 修改环境变量:

export SQOOP_HOME=/usr/local/sqoop

export PATH=$SQOOP_HOME/bin:$PATH

4.安装显示:

安装成功显示

三.Sqoop的使用

1. 查看数据库的名称:

sqoop list-databases --connect jdbc:mysql://ip:3306/ --username 用户名--password 密码

2. 列举出数据库中的表名:

sqoop list-tables --connect jdbc:mysql://ip:3306/数据库名称 --username 用户名 --password 密码

3. 导入:

sqoop import  

--connect jdbc:mysql://ip:3306/databasename  #指定JDBC的URL 其中database指的是(Mysql或者Oracle)中的数据库名

--table  tablename  #要读取数据库database中的表名           

--username root      #用户名 

--password  123456  #密码    

--target-dir   /path  #指的是HDFS中导入表的存放目录(注意:是目录)

--fields-terminated-by '\t'   #设定导入数据后每个字段的分隔符,默认;分隔

--lines-terminated-by '\n'    #设定导入数据后每行的分隔符

--m 1  #并发的map数量1,如果不设置默认启动4个map task执行数据导入,则需要指定一个列来作为划分map task任务的依据

-- where ’查询条件‘   #导入查询出来的内容,表的子集

--incremental  append  #增量导入

--check-column:column_id   #指定增量导入时的参考列

--last-value:num   #上一次导入column_id的最后一个值

--null-string ‘’   #导入的字段为空时,用指定的字符进行替换

以上导入到hdfs中

--hive-import    #导入到hive

--hive-overwrite   #可以多次写入

--hive-database  databasename   #创建数据库,如果数据库不存在的必须写,默认存放在default中

--create-hive-table   #sqoop默认自动创建hive表

--delete-target-dir  #删除中间结果数据目录

--hive-table tablename   #创建表名

4. 导入所有的表放到hdfs中:

sqoop import-all-tables  --connect jdbc:mysql://ip:3306/库名 --username 用户名  --password  密码  --target-dir 导入存放的目录

5. 导出(目标表必须在mysql数据库中已经建好,数据存放在hdfs中):

sqoop export

--connect jdbs:mysql://ip:3600/库名 #指定JDBC的URL 其中database指的是(Mysql或者Oracle)中的数据库名

--username用户名  #数据库的用户名

--password密码     #数据库的密码

--table表名        #需要导入到数据库中的表名

--export-dir导入数据的名称    #hdfs上的数据文件

--fields-terminated-by ‘\t’       #HDFS中被导出的文件字段之间的分隔符

--lines-terminated-by '\n'    #设定导入数据后每行的分隔符

--m 1  #并发的map数量1,如果不设置默认启动4个map task执行数据导入,则需要指定一个列来作为划分map task任务的依据

--incremental  append  #增量导入

--check-column:column_id   #指定增量导入时的参考列

--last-value:num   #上一次导入column_id的最后一个值

--null-string ‘’   #导出的字段为空时,用指定的字符进行替换

6. 创建和维护sqoop作业:sqoop作业创建并保存导入和导出命令。

A.创建作业:

sqoop job --create作业名 -- import --connect jdbc:mysql://ip:3306/数据库 --username 用户名 --table 表名 --password 密码 --m 1 --target-dir  存放目录

注意加粗的地方是有空格的

B. 验证作业(显示已经保存的作业):

sqoop job  --list

C. 显示作业详细信息:

sqoop  job --show作业名称

D.删除作业:

sqoop  job  --delete作业名

E. 执行作业:

sqoop  job --exec作业

7. eval:它允许用户针对各自的数据库服务器执行用户定义的查询,并在控制台中预览结果,可以使用期望导入结果数据。

A.选择查询:

sqoop eval -connect jdbc:mysql://ip:3306/数据库 --username 用户名  --password 密码 --query ”select * from emp limit 1“

选择查询

B.插入查询:

sqoop eval  jdbc:mysql://ip:3306/数据库 --username 用户名  --password 密码 --query "insert into emp values(4,'ceshi','hebei')"

插入查询

8.codegen:从面向对象的应用程序的角度来看,每个数据库表都有一个DAO类,它包含用于初始化对象的'getter'和'setter'方法。该工具(-codegen)自动生成DAO类。

它根据表模式结构在Java中生成DAO类。Java定义被实例化为导入过程的一部分。这个工具的主要用途是检查Java是否丢失了Java代码。如果是这样,它将使用字段之间的默认分隔符创建Java的新版本,其实就是生成表名.java

语法:sqoop codegen --connectjdbc:mysql://ip:3306/数据库 --username 用户名 --table 表名 --m 1 --password 密码

回显中会显示文件存放的位置。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • 1/列出mysql数据库中的所有数据库sqoop list-databases -connect jdbc:mys...
    时待吾阅读 2,739评论 1 5
  • 1/列出mysql数据库中的所有数据库sqoop list-databases -connect jdbc:mys...
    时待吾阅读 1,341评论 0 0
  • 上节课学习了Hadoop集群测试,这节课我们一起学习一下Sqoop,Sqoop是专门用来迁移数据的,它可以把数据库...
    文子轩阅读 6,879评论 1 9
  • Apache Sqoop is a tool designed for efficiently transferr...
    白面葫芦娃92阅读 1,359评论 0 0
  • 最近看了一本书《荷尔蒙战争》,颠覆了我对性别差异的认知。作者认为人类世界过去对男女性别差异是源于生理构造的不...
    紫夜星沙阅读 792评论 0 12