近期用到Sqoop进行数据导出导入,发现网上很多的博客都不够精细,所以本人就针对Sqoop1.4.7的官方文档进行了学习,以下是学习笔记。
sqoop是沟通HDFS和关系型数据库的桥梁,可以从HDFS导出数据到关系型数据库,也可以从关系型数据库导入数据到HDFS。当然也支持Hive、HBase跟关系型数据库之间的互相导出导入。这是一个可以进行双向转化数据的工具。
Sqoop是Apache提供的工具,下载的时候一定要先确定hadoop的版本,要找和hadoop匹配的版本,如果不匹配将会发生不可预知的问题。Sqoop目前支持4种主要的Hadoop版本 0.20、0.23、1.0和2.0。
官方要求必须有jdk和hadoop的支持,并且有版本要求。
本人使用的jdk为1.8.131版本,Hadoop为2.7.1版本。这里jdk和Hadoop的安装请参阅:Hadoop伪分布式模式搭建、Hadoop完全分布式集群搭建、Centos 7+CDH5.7.2全部署流程,三者皆可。
将Sqoop的安装包上传到linux中,进行解压就可以直接使用。以下是本人使用的Sqoop的版本:
sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
sqoop可以通过已配置的环境变量JAVA_HOME找到JDK,可以通过已配置的环境变量HADOOP_HOME找到Hadoop,所以Sqoop不需要做任何配置就可以直接工作。
当然如果想在任何目录使用Sqoop的命令的话,就必须配置Sqoop的环境变量。如下是本人配置的Sqoop的环境变量:
export SQOOP_HOME=/home/software/sqoop1.4.7
export PATH=$PATH:$SQOOP_HOME/bin
这里本人使用的是MySQL数据库,因为Sqoop需要连接数据库,所以需要将连接数据库的驱动jar包加入sqoop的lib目录下。以下是本人使用的jar包:
mysql-connector-java-5.1.38-bin.jar
当然,如果你使用的是其他关系型数据库,相应的就需要导入其他关系型数据库的jar包。
如下是基础的命令格式:
$ sqoop tool-name [tool-arguments]
这个命令的意思是以sqoop命令开头,然后跟上要使用的工具名称(工具模块在下文有介绍),然后跟上要使用的工具相应的参数选项。
Sqoop提供了相应的帮助工具,以下是Sqoop帮助命令展示:
$ sqoop help
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 mainframe datasets to HDFS
list-databases List available databases on a server
list-tables List available tables in a database
version Display version information
See 'sqoop help COMMAND' for information on a specific command.
可以通过输入以下内容来显示特定工具的帮助:
sqoop help (tool-name)
例如:
sqoop help import
也可以将--help参数添加到任何命令中:
sqoop import --help
这两种方式,效果是一样的。
除了使用sqoop (toolname)语法之外,还可以使用指定sqoop-(toolname)语法的别名脚本。
例如:Sqoop内置的脚本sqoop-import、sqoop-export等。
generic:泛型。specific arguments:特定参数。
要控制每个Sqoop工具的操作,就要使用泛型和特定参数。
例如:
导入数据的用法:
$ sqoop help import
usage: sqoop import [GENERIC-ARGS] [TOOL-ARGS]
Common arguments:
--connect <jdbc-uri> Specify JDBC connect string
--connect-manager <class-name> Specify connection manager class to use
--driver <class-name> Manually specify JDBC driver class to use
--hadoop-mapred-home <dir> Override $HADOOP_MAPRED_HOME
--help Print usage instructions
--password-file Set path for file containing authentication password
-P Read password from console
--password <password> Set authentication password
--username <username> Set authentication username
--verbose Print more information while working
--hadoop-home <dir> Deprecated. Override $HADOOP_HOME
通用Hadoop命令行参数:(必须在任何特定于工具的参数之前)
支持的通用选项是
-conf <配置文件>指定一个应用程序配置文件
-D <property = value>给定属性的使用值
-fs <local | namenode:port>指定一个namenode
-jt <local | jobtracker:port>指定作业跟踪器
-files <逗号分隔的文件列表>指定要复制到地图缩小集群的逗号分隔文件
-libjars <逗号分隔的jar列表>指定要包含在classpath中的逗号分隔的jar文件。
-archives <逗号分隔的存档列表>指定要在计算机上解除存档的逗号分隔档案。
一般的命令行语法是:
bin/hadoop command [genericOptions] [commandOptions]
必须提供通用的参数-conf,-D工具名称后,依此类推,但之前的任何特定工具的参数(如--connect)。
注意:Hadoop参数前面是单个破折号字符(-),而特定于工具的参数则以两个破折号(--)开头,单个字符参数则是单个破折号,如-P。
-conf、-D、-fs和-jt参数控制配置Hadoop的服务器设置。
例如:-D mapred.job.name=<job_name>可用于设置Sqoop启动的MR作业的名称,如果未指定,名称将默认为作业的jar名称 - 该名称是从所使用的表名派生的。
这些-files、-libjars和-archives参数通常不用于Sqoop,但在Hadoop的内部包含这些参数解析系统。
官方释义:
使用scoop的时候,命令行选项可以放置到选项文件中。一个选项文件是一个文本文件,每一行标识一个选项,顺序是选项出现在命令行的顺序。
个人理解:
其实就是将经常重复使用的命令选项或者经常替换参数的命令选项写到一个文件中,这样既可重用,也实现了解耦。
要指定选项文件,只需创建一个选项文件。
1.选项文件允许一个选项存在于多行中,通过在中间行末尾使用反斜杠标识语句选项结束。
2.选项文件支持注解,在选项文件中以#字符开头即可。注释需要新起一行使用,不能和选项文本混写。
3.选项文件中所有注释和空行都会被忽略。
4.选项文件中开头和结尾的空格被忽略。
5.选项文件中用“”标识的字符串中出现的空格是有效的,不会被忽略。引用的字符串不能超过行的范围。
1.可以在命令行中的任何位置指定选项文件,其中的选项遵循选项排序规则。
选项排序规则:
通用选项首先出现,接下来是工具特定的选项,最后是打算传递给子程序的选项。
2.通过--options-file参数将选项文件传递到命令行。
3.可以在一个命令行中指定多个选项文件。调用选项文件需要写出选项文件的全路径。
例如:
用于导入的Sqoop命令:
$ sqoop import --connect jdbc:mysql://localhost/db --username foo --table TEST
使用选项文件命令如下:
$ sqoop --options-file /users/homer/work/import.txt --table TEST
选项文件/users/homer/work/import.txt包含以下内容:
import
--connect
jdbc:mysql://localhost/db
--username
foo
为了便于阅读,选项文件可以有空行和注释。因此,上述选项文件可以有如下的形式:
#
#Sqoop导入的选项文件
#
#指定被调用的工具
import
#连接参数和值:多行执行一个选项
--connect
jdbc:mysql://localhost/db
#用户名参数和值
--username
foo
#
#应该在命令行中指定剩余选项。
#
Sqoop是相关工具的集合。要使用Sqoop,可以指定要使用的工具以及控制该工具的参数。包含以下工具:
sqoop help工具:帮助工具。(上面已经做了介绍)
sqoop-import:单表导入。
sqoop-import-all-tables:多表导入。
sqoop-import-mainframe:PDS导入。
sqoop-export:数据导出。
validation:对数据进行计算,符合条件的数据进行导入或导出
sqoop-job:创建和处理保存的作业。
sqoop-metastore:配置Sqoop为元数据共享库。
sqoop-merge:合并数据集。
sqoop-codegen:生成封装和解释导入记录的Java类
sqoop-create-hive-table:基于先前导入数据,填充Hive matestore表。
sqoop-list-databases:列出可用的数据库模式。
sqoop-list-tables:列出模式内的表。
sqoop-eval:基本的SQL执行shell。
sqoop-version:显示Sqoop版本信息。
以后会陆续进行这些工具的具体介绍。
下一篇: