Sqoop2 vs Sqoop

如下文字內容部分譯自Sqoop2 vs Sqoophtml

Sqoop1是一個客戶端程序,用戶只需在客戶端添加驅動或者鏈接器到Sqoop中便可使用, java

Sqoop2是一個基於服務的模型,新一代Sqoop,全部配置以及驅動都必須在服務端配置好。 web

從MapReduce的觀點看,Sqoop1僅僅提交Map程序給集羣,而Sqoop2會提交MR任務, sql

經過Mappper來從源頭獲取數據,再使用Reducer來轉換數據。這相比Sqoop1更加清晰。 shell

另外一個主要區別是安全層面。管理員設置好來源和目標的鏈接,用戶無需也不能獲取到該鏈接的信息,只能使用它。這能夠進一步作權限控制。 數據庫

除了傳統的CLI以外,Sqoop2也會提供Web UI,它們都使用Sqoop2服務器提供的REST服務。注意一點,Sqoop2的Web UI是Hue的一部分,而非屬於Apache基金會。該REST接口能夠方便的整合到其它框架中,例如Oozie的工做流中。 apache

Sqoop2目前仍是一個半成品亟待完善,且不支持Hadoop1。很少說了,看文檔、看圖說話: tomcat

接下來安裝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

相關文章
相關標籤/搜索