作者:Syn良子 出處:http://www.cnblogs.com/cssdongl 轉載請注明出處
Gobblin的前身是linkedin的Camus,好多人也用過,准備用Gobblin的方式來抽取數據,不過由於連接的集群是CDH的,而Gobblin默認支持的是hadoop2.3.0,因此需要手動編譯一個支持CDH的Gobblin版本,否則使用中會遇到無法寫入hdfs等不兼容的問題.整理記錄其中遇到的一些問題和解決方式.
一.編譯准備
1.github上下載gobblin0.6.2的源代碼解壓到本地.
2.了解Gradle自動化構建工具的基本使用
二.編譯和問題解決
在源代碼根目錄下用該命令進行編譯: ./gradlew clean build -PhadoopVersion=2.6.0-cdh5.4.0,不出意外會報錯,總結為以下幾類錯誤
1.找不到依賴的jar包,比如gradle-processors,coveralls-gradle-plugin等,這類問題都是因為對應的jar包無法下載成功(下載超時失敗居多),多執行幾次命令,如果還是不行,請手動下載,例如
根據錯誤提示手動下載需要的jar包,必要時請自覺翻牆
下載jar包完成后,放入gradle的module目錄,比如我的在當前用戶的 ~/.gradle/caches/modules-2/,根據jar包名放入對應的module文件夾下,重新build執行命令即可
2. fatal: Not a git repository (or any of the parent directories): .git 異常
這個問題和git有關系,如果是用git命令checkout下來的源代碼,一般不會有這個問題,而我是手動從github上下載的src壓縮包,則需要加上另外一個版本參數,如下
./gradlew clean build -PhadoopVersion=2.6.0-cdh5.4.0 -Pversion=gobblin_0.6.2-180-g5a11598
重新執行命令,該錯誤消失
3.Could not resolve all dependencies for configuration ':gobblin-compaction:runtime'.
這個錯誤需要加上另外一個參數,如下
./gradlew clean build -PhadoopVersion=2.6.0-cdh5.4.0 -Pversion=gobblin_0.6.2-180-g5a11598 –PuseHadoop2
4.Execution failed for task ':gobblin-yarn:test'.
這個問題大家基本都知道,test模塊編譯不過去,官方給的建議是加上另外一個參數來跳過,如下
./gradlew clean build -PhadoopVersion=2.6.0-cdh5.4.0 -Pversion=gobblin_0.6.2-180-g5a11598 -PuseHadoop2 -x test
繼續build,問題消失
5.編譯成功后,根目錄下找到gobblin-distribution-0.6.2.tar.gz解壓后,配置好后執行官方提供的wikipedia例子時報錯:gobblin-runtime-0.6.2.jar not a valid jar
去lib下查看,發現只有gobblin-runtime-gobblin-0.6.2.jar,沒有gobblin-runtime-0.6.2.jar,因此推斷這里Pversion多了個gobblin,修改命令如下
./gradlew clean build -PhadoopVersion=2.6.0-cdh5.4.0 -Pversion=0.6.2 -PuseHadoop2 -x test
這次打包正常,執行bin/gobblin-mapreduce.sh又報第2條中的異常:Not a git repository
又耐心翻了翻官方的issues,發現0.6.2這塊兒編譯問題很多,所以決定直接編譯gobblin-0.7.0源代碼,進入gobblin-0.7.0源代碼根目錄執行如下命令
./gradlew clean build -PhadoopVersion=2.6.0-cdh5.4.0 -Pversion=0.7.0 -PuseHadoop2 -x test
ok,這次一次性成功,解壓生成的gobblin-distribution-0.7.0.tar.gz,重新執行wikipedia的demo,成功執行
三.問題總結
Gobblin的編譯主要會遇到一些jar包依賴和版本的問題,所以按照上述方式來一步一步解決后可以編譯出適合自己的版本.官方文檔還是很詳細,大家可以多多查閱,另外還有源代碼可以參考.
參考資料:
http://gobblin.readthedocs.io/en/latest/Getting-Started/
https://github.com/linkedin/gobblin/issues/662