Sqoop 是一个开源工具,主要用于在Hadoop和传统的数据库(Mysql, Oracle,等)进行数据传递,可以将一个关系型数据库中的数据导入Hadoop 的HDFS中,也可以将HDFS中的数据导出到关系型数据库中。
1. 目前主要有sqoop1 和sqoop2两个版本,两者架构如下图所示:
a. sqoop1 架构: b. sqoop2 架构
很明显,sqoop2中引入了sqoop server集中化管理connector,以及rest api,web,CLI多种交互方式,并引入权限安全机制,较sqoop1有较大改变。他的配置过程及配置文件较sqoop1也有较大不同。
2. 安装和配置过程
tar zxvf sqoop-1.99.7-bin-hadoop200.tar.gz
mv sqoop-1.99.7-bin-hadoop200 sqoop
mv sqoop /home/hadoop/
cd /home/hadoop/sqoop && mkdir logs
2.1 sqoop 环境变量设置
.bashrc 中增加以下变量声明:
export SQOOP_HOME=/home/hadoop/sqoop
export PATH=$SQOOP_HOME/bin:$PATH
export CATALINA_HOME=$SQOOP_HOME/server
export LOGDIR=$SQOOP_HOME/logs
2.2 hadoop 参数配置
Sqoop server 需要模拟用户访问集群内外的HDFS和其他资源,所以,需要配置Hadoop通过所谓proxyuser系统显示地允许这种模拟。也就是要在hadoop 目录的etc/hadoop/core-site.xml 中增加下面两个属性。两个value的地方写*或实际用户名均可。
<property>
<name>hadoop.proxyuser.sqoop2.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.sqoop2.groups</name>
<value>*</value>
</property>
2.3 sqoop server 配置
主要是配置sqoop目录下的 conf/sqoop.properties文件的下面配置项:
# mapreduce的配置文件路径
org.apache.sqoop.submission.engine.mapreduce.configuration.directory=$HADOOP_HOME/etc/hadoop // 把$HADOOP_HOME替换为实际i的路径
# sqoop2支持hadoop的simple>和kerberos两种验证机制,需要配置,否则会报authentication异常
org.apache.sqoop.security.authentication.type=SIMPLE
org.apache.sqoop.security.authentication.handler=org.apache.sqoop.security.authentication.SimpleAuthenticationHandler
org.apache.sqoop.security.authentication.anonymous=true
同时,把有LOGDIR, BASEDIR引用的均替换为实际的绝对路径,如/home/hadoop/sqoop/logs, /home/hadoop/sqoop
2.4 安装mysql JDBC Driver 到sqoop/server/lib 下
cp -afr mysql-connector-java-xxx.jar sqoop/server/lib
2.5 初始化metadata repository 并验证配置是否生效:
bin/sqoop2-tool upgrade
执行 bin/sqoop2-tool verify 将看到如下 successful相关信息。
................
Verification was successful.
Tool class org.apache.sqoop.tools.tool.VerifyTool has finished correctly.
3. 启动
bin/sqoop.sh --help 会输出启动相关的帮助信息,如:
Usage: sqoop.sh COMMAND,
where COMMOND is one of :
server <start/stop/run>
client [script]
3.1 start server
启动sqoop2 server 前,确保Hadoop 已经启动,然后 bin/sqoop2-server start or bin/sqoop.sh serve rstart/stop
Starting the Sqoop2 server...
0 [main] INFO org.apache.sqoop.core.SqoopServer - Initializing Sqoop server.
5 [main] INFO org.apache.sqoop.core.PropertiesConfigurationProvider - Starting config file poller thread
Sqoop2 server started.
输入jps 能看到 SqoopJettyServer进程。
3.2 start client
bin/sqoop.sh slient 报下面错误,
java.lang.InternalError: Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable
sqoop.sh 脚本中的JAVA_OPTS 行,增加 -Djava.awt.headless=true
然后再启动就可以看到交互终端了
Setting conf dir: /home/hadoop/bigdata/sqoop/bin/../conf
Sqoop home directory: /home/hadoop/bigdata/sqoop
Sqoop Shell: Type 'help' or '\h' for help.
sqoop:000>
更多操作,见sqoop 官网文档:
https://sqoop.apache.org/docs/1.99.7/admin/Installation.html
https://sqoop.apache.org/docs/1.99.7/user/CommandLineClient.html
附: Sqoop2的核心概念 (摘录自 http://blog.csdn.net/gamer_gyt/article/details/55225700,以便理解客户端命令行中的操作和参数,引用的图片也来自于此网页)
由于sqoop2是C-S架构,Sqoop的用户都必须通过sqoop-client类来与服务器交互,sqoop-client提供给用户的有:
连接服务器
搜索connectors
创建Link
创建Job
提交Job
返回Job运行信息等功能
这些基本功能包含了用户在数据迁移的过程中所用到的所有信息。
sqoop2中将数据迁移任务中的相关概念进行细分。将数据迁移任务中的数据源, 数据传输配置, 数据传输任务进行提取抽象。经过抽象分别得到核心概念Connector, Link, Job, Driver。
(1)connector
sqoop2中预定一了各种里链接,这些链接是一些配置模板,比如最基本的generic-jdbc-connector,还有hdfs-connector,通过这些模板,可以创建出对应数据源的link,比如我们链接mysql,就是使用JDBC的方式进行链接,这时候就从这个generic-jdbc-connector模板继承出一个link,可以这么理解。
(2)link
Connector是和数据源(类型)相关的。对于Link是和具体的任务Job相关的。
针对具体的Job, 例如从MySQL->HDFS 的数据迁移Job。就需要针对该Job创建和数据源MySQL的Link1,和数据目的地MySQL的Link2.
Link是和Job相关的, 针对特定的数据源,配置信息。
Link定义了从某一个数据源读出和写入时的配置信息。
(3)job
Link定义了从某一个数据源的进行读出和写入时的配置信息。Job是从一个数据源读出, 写入到另外的一个数据源的过程。
所以Job需要由Link(From), Link(To),以及Driver的信息组成。
(4)Dirver
提供了对于Job任务运行的其他信息。比如对Map/Reduce任务的配置。