谈 Kylin1.6 streaming kafka cube build 成功过程中遇到的坑

坑太多    --写在片首语

看着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!!!

posted @ 2016-12-17 22:10  七里飞  阅读(3919)  评论(2编辑  收藏  举报