spark1.2.0编译
spark 有三种编译方式:SBT、MAVEN、make-distribution.sh。SBT、MAVEN两种方式打出来的包比较大,不适合部署使用。因此我们通常使用第三种方式打包。
./make-distribution.sh --tgz --skip-java-test --with-tachyon -Dyarn.version=2.2.0 -Dhadoop.version=2.2.0 -Djava.version=1.7 -Dprotobuf.version=2.5.0 -Pyarn -Phive -Phive-thriftserver
这条命令可以简化为:
./make-distribution.sh --tgz --skip-java-test --with-tachyon -Dhadoop.version=2.2.0 -Djava.version=1.7 -Dprotobuf.version=2.5.0 -Pyarn -Phive -Phive-thriftserver
因为yarn的版本用的是hadoop版本变量,即hadoop是什么版本,yarn就是什么版本。
1.使用这种方式不用单独修改maven配置,因为脚本里面会在编译之前执行这条命令
2.--tgz 生成部署包;
3.--skip-java-test 滤过测试阶段;
4.--with-tachyon 感觉tachyon是趋势,所以加上tachyon的支持;
5.-Dhadoop.version 指定hadoop的版本,默认为1.0.4;
6.-Djava.version 指定java版本,默认是1.6;
7.-Dprotobuf.version 指定protobuf的版本,默认是2.4.1;这里指定是因为hadoop使用的2.5.0,不修改的话搭配的时候会出问题;
8.-Pyarn -Phive -Pthriftserver 分别加入yarn、hive的支持。
在根目录下面生成了一个binary包
解压部署包后或者直接在编译过的目录,通过配置conf下的文件,就可以使用spark了
关于编译的时候scala版本问题,我遇到过,它默认的是2.10.4,现在最新的2.11.x,如果不指定直接编译,外部编写scala程序的时候需要引用编译好的jar包,会产生scala版本冲突
但是如果编译的时候指定,就需要注意,如果指定过新的版本,比如
./make-distribution.sh --tgz --skip-java-test -Dyarn.version=2.2.0 -Dhadoop.version=2.2.0 -Pyarn -Phive -Phive-thriftserver -Dscala-2.11
编译的时候就会出现类似
我也去网上找了,assembly包最新更新到了scala2.10的版本,所以不会编译成功,除非自己再去编译assembly的jar包,比较麻烦
我采取的是降低自己的使用的scala版本,和spark保持一致,反正没什么区别
如果编译的时候指定了--with-tachyon,那么会在出现编译成功后任务不停止,继续下载tachyon的binary包,然后拆解加入即将生成的spark部署包中