近期用到Sqoop进行数据导出导入,发现网上不少的博客都不够精细,因此本人就针对Sqoop1.4.7的官方文档进行了学习,如下是学习笔记,若有错误,请批评指正,谢谢!java
sqoop是沟通HDFS和关系型数据库的桥梁,能够从HDFS导出数据到关系型数据库,也能够从关系型数据库导入数据到HDFS。固然也支持Hive、HBase跟关系型数据库之间的互相导出导入。这是一个能够进行双向转化数据的工具。node
Sqoop是Apache提供的工具,下载的时候必定要先肯定hadoop的版本,要找和hadoop匹配的版本,若是不匹配将会发生不可预知的问题。Sqoop目前支持4种主要的Hadoop版本 0.20、0.2三、1.0和2.0。mysql
官方要求必须有jdk和hadoop的支持,而且有版本要求。linux
本人使用的jdk为1.8.131版本,Hadoop为2.7.1版本。这里jdk、Hadoop、Hive以及HBase的安装能够查看本人以前的文章:Hadoop伪分布式模式搭建、Hadoop彻底分布式集群搭建、HIVE简介、HBase简介及搭建、Centos 7+CDH5.7.2所有署流程。sql
将Sqoop的安装包上传到linux中,进行解压就能够直接使用。如下是本人使用的Sqoop的版本:shell
sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz数据库
sqoop能够经过已配置的环境变量JAVA_HOME找到JDK,能够经过已配置的环境变量HADOOP_HOME找到Hadoop,因此Sqoop不须要作任何配置就能够直接工做。bash
固然若是想在任何目录使用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版本信息。
之后会陆续进行这些工具的具体介绍。