坑太多 --寫在片首語
看着Kylin官網(http://kylin.apache.org/docs16/tutorial/cube_streaming.html)里的輕描淡寫,似乎只要一步步按着它的步驟來做,就可以很快跑通並得到期待的果子 。但,然並卵。。。這次的實踐讓我很清醒地了解到, 在開源的世界里,真的是版本太多,bug太多,坑太多。。。
如果僅僅是閱讀了文檔一百遍,而並未去實踐,那么也許僅僅閱讀理解水平會提高不少。為了走完這一遍操作,得到期待的結果,居然cost 10 days! 不過也可能是作為剛接觸開源平台1個月的我問題分析能力欠缺!
坑1 :官方文檔沒有重點顯示說明已更最新!文檔中的命令並不適用於舊版本的Kylin(cost 2 days)
我本次實踐是從12月初開始,當時公司安裝的還是Kylin1.5。但也恰好是這幾天,最新的kylin1.6發布了!很自然的 官方文檔(http://kylin.apache.org/docs16/tutorial/cube_streaming.html)也被 更新成了最新版本。但是,文檔的開頭並沒有很明顯地提醒說明此點!由於Kylin1.6在Kylin1.5的基礎上對Streaming的支持作了很大的改動,例如build streaming cube 命令的改變(kylin1.5 中的 sh命令被deprecated )。所以很明顯 , 當我用Kylin1.6的命令方式去在安裝的Kylin1.5上執行時,總是報些NoSuchMethod的錯誤!好吧,還好對這個錯誤有點感覺,隱約感覺到這是因為版本不兼容的原因。從發現問題到升級到Kylin1.6,花了約2天的時間吧!
不同版本的Kylin build streaming cube 的命令的區別:
Kylin1.6:
curl -X PUT --user ADMIN:KYLIN -H "Content-Type: application/json;charset=utf-8" -d '{ "sourceOffsetStart": 0, "sourceOffsetEnd": 9223372036854775807, "buildType": "BUILD"}' http://192.168.18.12:7070/kylin/api/cubes/StreamingCube12/build2
說明:我正是用此命令對着安裝的kylin1.5來運行,始終報錯,使我迷糊了N久!
Kylin1.5:
$KYLIN_HOME/bin/streaming_build.sh STREAMING_CUBE 300000 0
坑 2 : 官方文檔僅能供參考,不可奉為真經!太認真你就輸了!(cost 1 days)
如下,我從官網copy過的命令中用到的startSourceOffset 和 endSourceOffset的名稱,運行過程中卻直接報錯。仔細比較命令中的名稱和CLI中報錯提示的名稱sourceOffsetStart和sourceOffsetEnd可以發現細微的區別。由此,官網中的文檔也僅供參考,不可迷信!如果 自己太認真,你就輸了!(關於官方文檔內容這塊的
issue,在我清理維護Kylin的HBase文件的過程中還發現了個bug,詳見 https://issues.apache.org/jira/browse/KYLIN-2261)
從CLI中的截圖報錯:

坑3 : Kylin1.6 + Kafka1.0才可以Work , Kylin1.6 + Kafka0.9 有Bug (cost 2 days)
也許是因為前面的問題有點心急,也許是因為習慣性地忽略文檔的非實踐操作部分。所以直接從操作步驟開始重新動手干活了。但最終提交Curl命令后,又直接報如下JavaLangNullPointer或NoSuchMethodError的錯誤,還TMD在這倆錯誤中隨機出現一個!簡直就是看得頭大 !!!不得已, 提交了個issue給Kylin官方Commnuity(https://issues.apache.org/jira/browse/KYLIN-2262?filter=-2)。官方reproduce了此Error,也基本確認了版本不兼容的事實。這個過程,又差不多耗了我兩天時間吧!與官方的這種溝通總是這么不夠效率,不過好在是尋找答案的方向沒搞錯!

坑4:集群資源問題 (cost 2 days)
公司工作用的CDH不能貿然升級Kafka組件,迫於領導建議,我不得不自己搭建環境。由於目前也沒有其它的CDH測試環境可用,所以就先湊合着用個人電腦(配置還算可以 12G+四核+I7)下載了個CDH 的ovf虛擬機來做接下來的測試驗證。一切准備就緒,到最后一步提交build cube時,又直接報錯
java.lang.InterruptedException (https://issues.apache.org/jira/browse/KYLIN-2278)!
無語!提交issue后隔天了卻無人問津。只能猜測是因為本機配置太Low,不得不還是用公司的的棒一點的機器 ,重頭搭建CDH環境並安裝Kylin1.6 + Kafka1.0了。
坑5:由於Hadoop莫名(本來是三個機器的集群,但只有一個機器可以用,所以工程師又改成了單節點模式)的原因,build cube的MR job 一直處於pending狀態。
心里涼涼的,為什么每一步都不順利?依然提交了個issue(https://issues.apache.org/jira/browse/KYLIN-2281),卻依舊是空等。當然在等待的過程中也與工程師商議,決定給服務器重新安裝Linux,消除一切可能的系統環境問題,重新安裝CDH5.7+Kylin1.6+Kafka1.0 . (cost 2 days)
如下圖1,是在kylin的Monitor頁面看到的job狀態。NND,Duration居然這么久,但Progress還是0.00%。

如下圖2,在hadoop的監控頁面,可以看到它處於pending過程中,雖然我反復刪除-創建 了多次

6.經過輾轉,最終得到了嶄新的環境,並同時參照文檔(https://kyligence.gitbooks.io/kap-manual/content/zh-cn/quickstart/quickstart_cdh.cn.html),對YARN做了部分設置如下,

然后提交命令,最終,終於看到了期待的結果!!!(cost 1 Day)

命令:
curl -X PUT --user ADMIN:KYLIN -H "Content-Type: application/json;charset=utf-8" -d '{ "sourceOffsetStart": 0, "sourceOffsetEnd": 9223372036854775807, "buildType": "BUILD"}' http://192.168.18.62:7070/kylin/api/cubes/StreamingCube32/build2
Thanks God!!!
