Sqoop2 vs Sqoop

被刻印的时光 ゝ 提交于 2019-12-01 02:44:53

以下文字内容部分译自Sqoop2 vs Sqoop

Sqoop1是一个客户端程序,用户只需在客户端添加驱动或者连接器到Sqoop中即可使用,

Sqoop2是一个基于服务的模型,新一代Sqoop,所有配置以及驱动都必须在服务端配置好。

从MapReduce的观点看,Sqoop1仅仅提交Map程序给集群,而Sqoop2会提交MR任务,

通过Mappper来从源头获取数据,再使用Reducer来转换数据。这相比Sqoop1更加清晰。

另一个主要区别是安全层面。管理员设置好来源和目标的连接,用户无需也不能获取到该连接的信息,只能使用它。这可以进一步做权限控制。

除了传统的CLI之外,Sqoop2也会提供Web UI,它们都使用Sqoop2服务器提供的REST服务。注意一点,Sqoop2的Web UI是Hue的一部分,而非属于Apache基金会。该REST接口可以方便的整合到其它框架中,例如Oozie的工作流中。

Sqoop2目前还是一个半成品亟待完善,且不支持Hadoop1。不多说了,看文档、看图说话:

接下来安装Sqoop2:

wget -q http://mirror.bit.edu.cn/apache/sqoop/1.99.6/sqoop-1.99.6-bin-hadoop200.tar.gz
tar xf sqoop-1.99.6-bin-hadoop200.tar.gz
sqoop2=/usr/local/sqoop2
mv sqoop-1.99.6-bin-hadoop200 $sqoop2
cd $sqoop2
sed -i 's/@LOGDIR@/logs/g' server/conf/sqoop.properties
./bin/sqoop2-server start

由于我的Hadoop位置单独安装,因此还需要修改:

#catalina.properties
common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar,${catalina.home}/../lib/*.jar,/usr/local/hadoop/share/hadoop/common/*.jar,/usr/local/hadoop/share/hadoop/common/lib/*.jar,/usr/local/hadoop/share/hadoop/hdfs/*.jar,/usr/local/hadoop/share/hadoop/hdfs/lib/*.jar,/usr/local/hadoop/share/hadoop/mapreduce/*.jar,/usr/local/hadoop/share/hadoop/mapreduce/lib/*.jar,/usr/local/hadoop/share/hadoop/yarn/lib/*.jar,/usr/local/hadoop/share/hadoop/yarn/*.jar,/usr/local/hive/lib/*.jar

#sqoop.properties
org.apache.sqoop.repository.jdbc.url=jdbc:derby:sqoop;create=true
org.apache.sqoop.submission.engine.mapreduce.configuration.directory=/usr/local/hadoop/etc/hadoop/


报错及解决:

  • java.sql.SQLException: No suitable driver found for jdbc:derby:sqoop;create=true

$sqoop2/server/webapps/sqoop.war中包含derby驱动包,但是tomcat(sqoop2是基于tomcat的web接口)

启动时需要创建连接池,因此要将derby.jar加入到$sqoop2/server/lib中即可。

Sqoop2将元数据及配置信息保存在数据库中,目前最新的1.99.6版本支持Derby及Postgresql数据库,

对于MySQL的支持将在1.99.7中加入,目前可以通过补丁的形式实现:Sqoop2: Add MySQL support for the metadata repository


  • java.lang.SecurityException: sealing violation: package org.apache.derby.impl.jdbc.authentication is sealed

由于tomcat启动时的classpath包含了Hive的lib,而Hive自带了derby的驱动包,因此会产生类冲突,删除掉Hive中的derby包即可。


java.lang.IllegalStateException: Class invariant violation at org.apache.log4j.LogManager.getLoggerRepository(LogManager.java:199) at org.apache.log4j.LogManager.getLogger(LogManager.java:228) at org.apache.log4j.Logger.getLogger(Logger.java:117) 这个是log4j的一个已知bug。 由org.apache.catalina.loader.WebappClassLoader.ENABLE_CLEAR_REFERENCES这个属性引起。它默认是TRUE,将其设置成FALSE就可以规避这个错误。 这个问题在TOMCAT和Glassfish两个容器里都会出现,不知道其他的会不会。 原因当这个属性为TRUE的时候,会在应用停止的时候会试图将所有为NULL的静态或不可修改字段(final)从已加载类里清除。
echo 'org.apache.catalina.loader.WebappClassLoader.ENABLE_CLEAR_REFERENCES=false' >> $sqoop2/server/conf/catalina.properties

eof.

本文参考:Sqoop1.9.x安装Derby JDBC database connection URL

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!