关键词:
正文
一、概述
sqoop 是 apache 旗下一款“Hadoop 和关系数据库服务器之间传送数据”的工具。
核心的功能有两个:
导入、迁入
导出、迁出
导入数据:MySQL,Oracle 导入数据到 Hadoop 的 HDFS、HIVE、HBASE 等数据存储系统
导出数据:从 Hadoop 的文件系统中导出数据到关系数据库 mysql 等 Sqoop 的本质还是一个命令行工具,和 HDFS,Hive 相比,并没有什么高深的理论。
sqoop:
工具:本质就是迁移数据, 迁移的方式:就是把sqoop的迁移命令转换成MR程序
hive
工具,本质就是执行计算,依赖于HDFS存储数据,把SQL转换成MR程序
二、工作机制
将导入或导出命令翻译成 MapReduce 程序来实现 在翻译出的 MapReduce 中主要是对 InputFormat 和 OutputFormat 进行定制
三、安装
1、前提概述
将来sqoop在使用的时候有可能会跟那些系统或者组件打交道?
HDFS, MapReduce, YARN, ZooKeeper, Hive, HBase, MySQL
sqoop就是一个工具, 只需要在一个节点上进行安装即可。
补充一点: 如果你的sqoop工具将来要进行hive或者hbase等等的系统和MySQL之间的交互
你安装的SQOOP软件的节点一定要包含以上你要使用的集群或者软件系统的安装包
补充一点: 将来要使用的azakban这个软件 除了会调度 hadoop的任务或者hbase或者hive的任务之外, 还会调度sqoop的任务
azkaban这个软件的安装节点也必须包含以上这些软件系统的客户端/2、
2、软件下载
下载地址http://mirrors.hust.edu.cn/apache/
sqoop版本说明
绝大部分企业所使用的sqoop的版本都是 sqoop1
sqoop-1.4.6 或者 sqoop-1.4.7 它是 sqoop1
sqoop-1.99.4----都是 sqoop2
此处使用sqoop-1.4.6版本sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
3、安装步骤
(1)上传解压缩安装包到指定目录
因为之前hive只是安装在hadoop3机器上,所以sqoop也同样安装在hadoop3机器上
[hadoop@hadoop3 ~]$ tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C apps/
(2)进入到 conf 文件夹,找到 sqoop-env-template.sh,修改其名称为 sqoop-env.sh cd conf
[hadoop@hadoop3 ~]$ cd apps/ [hadoop@hadoop3 apps]$ ls apache-hive-2.3.3-bin hadoop-2.7.5 hbase-1.2.6 sqoop-1.4.6.bin__hadoop-2.0.4-alpha zookeeper-3.4.10 [hadoop@hadoop3 apps]$ mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha/ sqoop-1.4.6 [hadoop@hadoop3 apps]$ cd sqoop-1.4.6/conf/ [hadoop@hadoop3 conf]$ ls oraoop-site-template.xml sqoop-env-template.sh sqoop-site.xml sqoop-env-template.cmd sqoop-site-template.xml [hadoop@hadoop3 conf]$ mv sqoop-env-template.sh sqoop-env.sh
(3)修改 sqoop-env.sh
[hadoop@hadoop3 conf]$ vi sqoop-env.sh
export HADOOP_COMMON_HOME=/home/hadoop/apps/hadoop-2.7.5 #Set path to where hadoop-*-core.jar is available export HADOOP_MAPRED_HOME=/home/hadoop/apps/hadoop-2.7.5 #set the path to where bin/hbase is available export HBASE_HOME=/home/hadoop/apps/hbase-1.2.6 #Set the path to where bin/hive is available export HIVE_HOME=/home/hadoop/apps/apache-hive-2.3.3-bin #Set the path for where zookeper config dir is export ZOOCFGDIR=/home/hadoop/apps/zookeeper-3.4.10/conf
为什么在sqoop-env.sh 文件中会要求分别进行 common和mapreduce的配置呢???
在apache的hadoop的安装中;四大组件都是安装在同一个hadoop_home中的
但是在CDH, HDP中, 这些组件都是可选的。
在安装hadoop的时候,可以选择性的只安装HDFS或者YARN,
CDH,HDP在安装hadoop的时候,会把HDFS和MapReduce有可能分别安装在不同的地方。
(4)加入 mysql 驱动包到 sqoop1.4.6/lib 目录下
[hadoop@hadoop3 ~]$ cp mysql-connector-java-5.1.40-bin.jar apps/sqoop-1.4.6/lib/
(5)配置系统环境变量
[hadoop@hadoop3 ~]$ vi .bashrc
#Sqoop export SQOOP_HOME=/home/hadoop/apps/sqoop-1.4.6 export PATH=$PATH:$SQOOP_HOME/bin
保存退出使其立即生效
[hadoop@hadoop3 ~]$ source .bashrc
(6)验证安装是否成功
sqoop-version 或者 sqoop version
四、Sqoop的基本命令
基本操作
首先,我们可以使用 sqoop help 来查看,sqoop 支持哪些命令
[hadoop@hadoop3 ~]$ sqoop help Warning: /home/hadoop/apps/sqoop-1.4.6/../hcatalog does not exist! HCatalog jobs will fail. Please set $HCAT_HOME to the root of your HCatalog installation. Warning: /home/hadoop/apps/sqoop-1.4.6/../accumulo does not exist! Accumulo imports will fail. Please set $ACCUMULO_HOME to the root of your Accumulo installation. 18/04/12 13:37:19 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6 usage: sqoop COMMAND [ARGS] Available commands: codegen Generate code to interact with database records create-hive-table Import a table definition into Hive eval Evaluate a SQL statement and display the results export Export an HDFS directory to a database table help List available commands import Import a table from a database to HDFS import-all-tables Import tables from a database to HDFS import-mainframe Import datasets from a mainframe server to HDFS job Work with saved jobs list-databases List available databases on a server list-tables List available tables in a database merge Merge results of incremental imports metastore Run a standalone Sqoop metastore version Display version information See 'sqoop help COMMAND' for information on a specific command. [hadoop@hadoop3 ~]$
然后得到这些支持了的命令之后,如果不知道使用方式,可以使用 sqoop command 的方式 来查看某条具体命令的使用方式,比如:
View Code
示例
列出MySQL数据有哪些数据库
[hadoop@hadoop3 ~]$ sqoop list-databases \\ > --connect jdbc:mysql://hadoop1:3306/ \\ > --username root \\ > --password root Warning: /home/hadoop/apps/sqoop-1.4.6/../hcatalog does not exist! HCatalog jobs will fail. Please set $HCAT_HOME to the root of your HCatalog installation. Warning: /home/hadoop/apps/sqoop-1.4.6/../accumulo does not exist! Accumulo imports will fail. Please set $ACCUMULO_HOME to the root of your Accumulo installation. 18/04/12 13:43:51 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6 18/04/12 13:43:51 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead. 18/04/12 13:43:51 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset. information_schema hivedb mysql performance_schema test [hadoop@hadoop3 ~]$
列出MySQL中的某个数据库有哪些数据表:
[hadoop@hadoop3 ~]$ sqoop list-tables \\
> --connect jdbc:mysql://hadoop1:3306/mysql \\
> --username root \\
> --password root
View Code
创建一张跟mysql中的help_keyword表一样的hive表hk:
sqoop create-hive-table \\ --connect jdbc:mysql://hadoop1:3306/mysql \\ --username root \\ --password root \\ --table help_keyword \\ --hive-table hk
View Code
五、Sqoop的数据导入
“导入工具”导入单个表从 RDBMS 到 HDFS。表中的每一行被视为 HDFS 的记录。所有记录 都存储为文本文件的文本数据(或者 Avro、sequence 文件等二进制数据)
1、从RDBMS导入到HDFS中
语法格式
sqoop import (generic-args) (import-args)
常用参数
--connect <jdbc-uri> jdbc 连接地址 --connection-manager <class-name> 连接管理者 --driver <class-name> 驱动类 --hadoop-mapred-home <dir> $HADOOP_MAPRED_HOME --help help 信息 -P 从命令行输入密码 --password <password> 密码 --username <username> 账号 --verbose 打印流程信息 --connection-param-file <filename> 可选参数
示例
普通导入:导入mysql库中的help_keyword的数据到HDFS上
导入的默认路径:/user/hadoop/help_keyword
sqoop import \\ --connect jdbc:mysql://hadoop1:3306/mysql \\ --username root \\ --password root \\ --table help_keyword \\ -m 1
View Code
查看导入的文件
[hadoop@hadoop4 ~]$ hadoop fs -cat /user/hadoop/help_keyword/part-m-00000
导入: 指定分隔符和导入路径
sqoop import \\ --connect jdbc:mysql://hadoop1:3306/mysql \\ --username root \\ --password root \\ --table help_keyword \\ --target-dir /user/hadoop11/my_help_keyword1 \\ --fields-terminated-by '\\t' \\ -m 2
导入数据:带where条件
sqoop import \\ --connect jdbc:mysql://hadoop1:3306/mysql \\ --username root \\ --password root \\ --where "name='STRING' " \\ --table help_keyword \\ --target-dir /sqoop/hadoop11/myoutport1 \\ -m 1
查询指定列
sqoop import \\ --connect jdbc:mysql://hadoop1:3306/mysql \\ --username root \\ --password root \\ --columns "name" \\ --where "name='STRING' " \\ --table help_keyword \\ --target-dir /sqoop/hadoop11/myoutport22 \\ -m 1 selct name from help_keyword where name = "string"
导入:指定自定义查询SQL
sqoop import \\ --connect jdbc:mysql://hadoop1:3306/ \\ --username root \\ --password root \\ --target-dir /user/hadoop/myimport33_1 \\ --query 'select help_keyword_id,name from mysql.help_keyword where $CONDITIONS and name = "STRING"' \\ --split-by help_keyword_id \\ --fields-terminated-by '\\t' \\ -m 4
在以上需要按照自定义SQL语句导出数据到HDFS的情况下:
1、引号问题,要么外层使用单引号,内层使用双引号,$CONDITIONS的$符号不用转义, 要么外层使用双引号,那么内层使用单引号,然后$CONDITIONS的$符号需要转义
2、自定义的SQL语句中必须带有WHERE \\$CONDITIONS
2、把MySQL数据库中的表数据导入到Hive中
Sqoop 导入关系型数据到 hive 的过程是先导入到 hdfs,然后再 load 进入 hive
普通导入:数据存储在默认的default hive库中,表名就是对应的mysql的表名:
sqoop import \\ --connect jdbc:mysql://hadoop1:3306/mysql \\ --username root \\ --password root \\ --table help_keyword \\ --hive-import \\ -m 1
导入过程
第一步:导入mysql.help_keyword的数据到hdfs的默认路径
第二步:自动仿造mysql.help_keyword去创建一张hive表, 创建在默认的default库中
第三步:把临时目录中的数据导入到hive表中
查看数据
[hadoop@hadoop3 ~]$ hadoop fs -cat /user/hive/warehouse/help_keyword/part-m-00000
指定行分隔符和列分隔符,指定hive-import,指定覆盖导入,指定自动创建hive表,指定表名,指定删除中间结果数据目录
sqoop import \\ --connect jdbc:mysql://hadoop1:3306/mysql \\ --username root \\ --password root \\ --table help_keyword \\ --fields-terminated-by "\\t" \\ --lines-terminated-by "\\n" \\ --hive-import \\ --hive-overwrite \\ --create-hive-table \\ --delete-target-dir \\ --hive-database mydb_test \\ --hive-table new_help_keyword
报错原因是hive-import 当前这个导入命令。 sqoop会自动给创建hive的表。 但是不会自动创建不存在的库
手动创建mydb_test数据块
hive> create database mydb_test; OK Time taken: 6.147 seconds hive>
之后再执行上面的语句没有报错
查询一下
select * from new_help_keyword limit 10;
上面的导入语句等价于
sqoop import \\ --connect jdbc:mysql://hadoop1:3306/mysql \\ --username root \\ --password root \\ --table help_keyword \\ --fields-terminated-by "\\t" \\ --lines-terminated-by "\\n" \\ --hive-import \\ --hive-overwrite \\ --create-hive-table \\ --hive-table mydb_test.new_help_keyword \\ --delete-target-dir
增量导入
执行增量导入之前,先清空hive数据库中的help_keyword表中的数据
truncate table help_keyword;
sqoop import \\ --connect jdbc:mysql://hadoop1:3306/mysql \\ --username root \\ --password root \\ --table help_keyword \\ --target-dir /user/hadoop/myimport_add \\ --incremental append \\ --check-column help_keyword_id \\ --last-value 500 \\ -m 1
语句执行成功
View Code
查看结果
3、把MySQL数据库中的表数据导入到hbase
普通导入
sqoop import \\ --connect jdbc:mysql://hadoop1: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(main):001:0> create 'new_help_keyword', 'base_info' 0 row(s) in 3.6280 seconds => Hbase::Table - new_help_keyword hbase(main):002:0>
django学习之路(代码片段)
<p><inputtype="text"name="name"placeholder="老师姓名"/></p>placeholder默认显示的字符信息<selectmultiplesize="10"name="class_ids">multiple多选size框大小1.母版layout.html%blockx1%%endblock%<h 查看详情
python深度学习之路-4监督学习(代码片段)
【Python深度学习之路】-4监督学习4.1了解监督学习(分类)监督学习:根据积累的经验数据对新的数据或将来的数据进行预测,或者进行分类的一种学习方式。无监督学习:对积累的经验数据中所存在的结构... 查看详情
机器学习之路--seaborn(代码片段)
seaborn是基于plt的封装好的库。有很强的作图功能。1、布局风格设置(图形的style)and细节设置用matplotlib作图:importnumpyasnpimportmatplotlibasmplimportmatplotlib.pyplotaspltx=np.linspace(0,14,100)foriinrange(1,7):plt.plot(x,np.sin(x+i*.5)*(7 查看详情
go语言学习之路(代码片段)
Go语言学习之路(二)面对对象编程思想抽象封装继承接口文件命令行参数Json序列化反序列化(unmarshal)单元测试RedisRedis简介Redis基本使用Go连接redisRedis连接池Go面试题goroutine和channel(275-283)协程goroutine... 查看详情
go语言学习之路(代码片段)
Go语言学习之路(二)面对对象编程思想抽象封装继承接口文件命令行参数Json序列化反序列化(unmarshal)单元测试RedisRedis简介Redis基本使用Go连接redisRedis连接池Go面试题goroutine和channel(275-283)协程goroutine... 查看详情
机器学习之路--matplotlib(代码片段)
1.绘制折线图在pandas里面有一种数据类型为datatime,可以将不规范的日期改为:xxxx-xx-xximportpandasaspdimportnumpyasnpa=pd.read_csv(‘UNRATE.csv‘)a[‘DATE‘]=pd.to_datetime(a[‘DATE‘])print(a.head(12))折线图importpandasaspdimportnumpyasnpi 查看详情
tensorflow学习之路---简单的代码(代码片段)
importnumpyimporttensorflowastf#自己创建的数据x_data=numpy.random.rand(100).astype(numpy.float32)#创建具有100个元素的数组y_data=x_data*0.1+0.3#具有自动遍历的功能 ##设置神经网络的结构###Weights=tf.Variable(tf.random_uniform([1],-1, 查看详情
python学习之路(15)(代码片段)
map/reducePython内建了map()和reduce()函数。如果你读过Google的那篇大名鼎鼎的论文“MapReduce:SimplifiedDataProcessingonLargeClusters”,你就能大概明白map/reduce的概念。我们先看map。map()函数接收两个参数,一个是函数,一个是Iterable,ma... 查看详情
数据集成工具的使用---sqoop从理论学习到熟练使用(代码片段)
本期与大家分享的是,小北精心整理的大数据学习笔记,数据采集工具Sqoop的详细介绍,希望对大家能有帮助,喜欢就给点鼓励吧,记得三连哦!欢迎各位大佬评论区指教讨论!💜🧡💛制... 查看详情
hive学习之路hive中文乱码(代码片段)
Hive注释中文乱码创建表的时候,comment说明字段包含中文,表成功创建成功之后,中文说明显示乱码createexternaltablemovie(userIDintcomment‘用户ID‘,movieIDintcomment‘电影ID‘,ratingintcomment‘电影评分‘,timestampedbigintcomment‘评分时间戳‘,... 查看详情
python学习之路(代码片段)
使用dict和setPython内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。举个例子,假设要根据同学的名字查找对应的成绩,如果用list实现,需要两个list:names=[‘M... 查看详情
kafka学习之路(代码片段)
基础概念Kafka最初是由Linkedin公司开发,是一个分布式、支持分区的、多副本的,基于zookeeper协调的分布式消息系统,可以实时的处理大量数据以满足各种需求场景:基于hadoop的批处理系统、低延迟的实时系统、storm/spark流式... 查看详情
glusterfs学习之路glusterfs部署(代码片段)
一、环境说明主机名IP地址角色gluster-node1192.168.56.11Server、Clientgluster-node2192.168.56.12Server、Clientgluster-node3192.168.56.13Server、Client二、GlusterFS安装(1)修改主机名[[email protected]~]#hostnamectlset-hostna 查看详情
python学习之路:numpy初识(代码片段)
importnumpyasnp;//一维NumPy数组myArray=np.array([1,2,3,4]);print(myArray);[1234]//打印一维数组的形状print(myArray.shape);(4,)//像普通的Python数组一样,NumPy数组的起始索引编号为0。print(myArray[0]);print(myArray[1]);12//像数组一样直接修改NumPy 查看详情
python学习之路(代码片段)
条件判断计算机之所以能做很多自动化的任务,因为它可以自己做条件判断。比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,用if语句实现:age=20ifage>=18:print(‘yourageis‘,age,‘%s‘%(‘岁‘))yourageis20岁根据Pytho... 查看详情
spark学习之路(十八)sparksql简单使用(代码片段)
讨论QQ:1586558083目录一、SparkSQL的进化之路二、认识SparkSQL2.1 什么是SparkSQL?2.2 SparkSQL的作用2.3 运行原理2.4 特点2.5 SparkSession2.7 DataFrames 三、RDD转换成为DataFrame3.1 方式一:通过 caseclass 创建 DataFrames(... 查看详情
机器学习之路--knn算法(代码片段)
机器学习实战这本书是基于python的,如果我们想要完成python开发,那么python的开发环境必不可少:(1)python3.52,64位,这是我用的python版本(2)numpy1.11.3,64位,这是python的科学计算包,是python的一个矩阵类型,... 查看详情
maui的学习之路--开篇(代码片段)
Maui的学习之路--开篇想了很久我决定发一个Maui介绍做为开篇,虽然这是老生常谈的话题,但是不能没有这样的探讨(请容我水一篇)。什么是.NETMaui.NETMaui是微软的一款基于.Net多平台应用UI(.NETMAUI)的跨平台框架... 查看详情