kylin源代码的编译,打包(记一次修改bug记录)

注意本文讲述的是在linux(centos)下kylin的编译

准备条件:

git、maven,node.js 这里不再讲述git与maven的安装

kylin的编译中需要node.js的插件及相关命令

wget https://nodejs.org/dist/v10.9.0/node-v10.9.0-linux-x64.tar.xz    // 下载node.js,版本可自己选择
tar xf  node-v10.9.0-linux-x64.tar.xz       // 解压
cd node-v10.9.0-linux-x64/                 // 进入node的bin目录
ln -s /usr/software/nodejs/bin/npm   /usr/local/bin/ 
ln -s /usr/software/nodejs/bin/node   /usr/local/bin/     //建立node与npm命令的软连接,此时我已把 node-v10.9.0-linux-x64名称修改为 ndoejs

操作完之后在其他目录直接执行 node -v 能查看到node.js版本  

一、下载kylin源代码

方式1:

git clone https://github.com/apache/kylin kylin 

但此种方法只能得到现在kylin最新版本的源代码,如果希望得到kylin历史版本源码见方式2

方式2:访问kylin官网 http://kylin.apache.org/,在下载页面最底部找到“Previous Release” 以前版本下载

在此地址里可找到kylin所有的历史版本 https://archive.apache.org/dist/kylin/,找到你要下载的版本X.X.X,下载

apache-kylin-X.X.X-source-release.zip 该版本的源代码即可   

二 、解压

unzip  apache-kylin-X.X.X-source-release.zip

三 、编译

1、进入到解压好的目录 apache-kylin-X.X.X

执行命令 mvn clean install -DskipTests

2、cp -r server/src/main/webapp/WEB-INF webapp/app/WEB-INF

3、依次执行如下命令

(1)cd webapp

(2)npm install -g bower  执行完此命令后,会在上面node.js的目录下装好bower,

(3)建立bower命令的软连接  ln -s /usr/software/nodejs/bin/bower /usr/local/bin/

(3)bower --allow-root install 

四、打包

进入到 apache-kylin-X.X.X目录中 执行 build/script/package.sh -P cdh60 ,-P参数是执行要打包成的版本,可以使cdh57,hadoop3,hbase1x等

注意此步骤中可能遇到“build/script/build.sh: line 34: grunt: command not found”错误,主要是grunt命令没有找到

在打包过程中脚本已经帮你下载了grunt,同样到node.js的bin目录下配置软连接  

ln -s /usr/software/nodejs/bin/grunt /usr/local/bin/  ,再次执行打包命令即可

五,查看包

上面都执行完成后可在 apache-kylin-X.X.X根目录下找到dist文件夹,进入可看到打包好可安装文件 apache-kylin-X.X.X-bin.tar.gz

 

番外:

我此次打包编译kylin包,主要是为了解决kylin的一个bug,bug报错如下:

2019-09-18 20:22:54,917 WARN  [kylin-coproc--pool6-t6] : Call failed on IOException2019-09-18 20:22:54,917 WARN  [kylin-coproc--pool6-t6] : Call failed on IOExceptioncom.google.protobuf.InvalidProtocolBufferException: Protocol message was too large.  May be malicious.  Use CodedInputStream.setSizeLimit() to increase the size limit. at com.google.protobuf.InvalidProtocolBufferException.sizeLimitExceeded(InvalidProtocolBufferException.java:110) at com.google.protobuf.CodedInputStream.refillBuffer(CodedInputStream.java:755) at com.google.protobuf.CodedInputStream.isAtEnd(CodedInputStream.java:701) at com.google.protobuf.CodedInputStream.readTag(CodedInputStream.java:99) at org.apache.kylin.storage.hbase.cube.v2.coprocessor.endpoint.generated.CubeVisitProtos$CubeVisitResponse.(CubeVisitProtos.java:2307) at org.apache.kylin.storage.hbase.cube.v2.coprocessor.endpoint.generated.CubeVisitProtos$CubeVisitResponse.(CubeVisitProtos.java:2271) at org.apache.kylin.storage.hbase.cube.v2.coprocessor.endpoint.generated.CubeVisitProtos$CubeVisitResponse$1.parsePartialFrom(CubeVisitProtos.java:2380) at org.apache.kylin.storage.hbase.cube.v2.coprocessor.endpoint.generated.CubeVisitProtos$CubeVisitResponse$1.parsePartialFrom(CubeVisitProtos.java:2375) at org.apache.kylin.storage.hbase.cube.v2.coprocessor.endpoint.generated.CubeVisitProtos$CubeVisitResponse$Builder.mergeFrom(CubeVisitProtos.java:5101) at org.apache.kylin.storage.hbase.cube.v2.coprocessor.endpoint.generated.CubeVisitProtos$CubeVisitResponse$Builder.mergeFrom(CubeVisitProtos.java:4949) at com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.java:337) at com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.java:267) at com.google.protobuf.AbstractMessageLite$Builder.mergeFrom(AbstractMessageLite.java:210) at com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.java:904) at com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.java:267) at org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils.getResponse(CoprocessorRpcUtils.java:141) at org.apache.hadoop.hbase.client.RegionCoprocessorRpcChannel.callExecService(RegionCoprocessorRpcChannel.java:94) at org.apache.hadoop.hbase.client.SyncCoprocessorRpcChannel.callMethod(SyncCoprocessorRpcChannel.java:52) at org.apache.kylin.storage.hbase.cube.v2.coprocessor.endpoint.generated.CubeVisitProtos$CubeVisitService$Stub.visitCube(CubeVisitProtos.java:5616) at org.apache.kylin.storage.hbase.cube.v2.CubeHBaseEndpointRPC$1$1.call(CubeHBaseEndpointRPC.java:246) at org.apache.kylin.storage.hbase.cube.v2.CubeHBaseEndpointRPC$1$1.call(CubeHBaseEndpointRPC.java:242) at org.apache.hadoop.hbase.client.HTable$12.call(HTable.java:997) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748)

解决办法,修改kylin 类 CubeVisitProtos.java源代码,重新编译后把class文件替换到已在运行的kylin服务的包中,注意此时替换的目录是   ../apache-kylin-X.X.X/tomcat/webapps/kylin/WEB-INF/lib ,bug解决方案可见 https://issues.apache.org/jira/browse/KYLIN-3973

 

 

 

你可能感兴趣的:(kylin)