背景
由于 CDH6.3.2 以上,已不开源。常用组件只能自编译升级,比如 Spark 。看网上的资料,有人说 Spark3 的 SQL 运行性能比 Spark2 可提升 20%,本人未验证,但是 Spark3 的 AE 功能的确很香,能自适应解决 Spark SQL 的数据倾斜。
下载软件
软件版本:jdk-1.8、maven-3.8.4、scala-2.12.15 、spark-3.3.0
说明:maven 和 scala 请不要改变小版本,如果要改变,请改动 pom 中相应的版本号,否则编译时会有版本错误
把压缩包放在 /opt 目录,全部解压,设置 jdk、scala、maven 的环境变量
编译 Spark3
修改 spark3 的 pom 配置 /opt/spark-3.3.0/pom.xml,增加 cloudera maven 仓库。
在 repositories 标签下,新增
修改 pom 文件中的 Hadoop 版本
重置 scala 版本
开始编译
用的是 spark 的 make-distribution.sh 脚本进行编译,这个脚本其实也是用 maven 编译的,
- –tgz 指定以 tgz 结尾
- –name 后面跟的是 Hadoop 的版本,在后面生成的 tar 包带的版本号
- -Pyarn 是基于 yarn
- -Dhadoop.version=3.0.0-cdh6.3.2 指定 Hadoop 的版本。
经过漫长的编译:
编译成功后的目录:
部署 Spark3 客户端
上传到要部署 spark3 的客户端机器
将 CDH 集群的 spark-env.sh 复制到 /opt/cloudera/parcels/CDH/lib/spark3/conf 下:
将 gateway 节点的 hive-site.xml 复制到 spark3/conf 目录下,不需要做变动:
创建 spark-sql
配置 spark-sql 快捷方式
配置 conf
创建 spark3-submit
配置 spark3-submit 快捷方式
测试 spark3-submit
注意事项
如果有启用动态资源分配(Spark Dynamic Allocation),此时会有下列报错
需要在 spark-defaults.conf 中添加 useOldFetchProtocol 配置
这样 Hadoop 集群即有了 CDH 版本的 Spark-2.4.0 又有了 apache 版本的 Spark-3.3.0