在 YARN 下,您可以使用任何版本的 Spark 运行任何应用程序。毕竟,Spark 是一堆库,所以你可以用你的依赖项打包你的 jar 并将它发送到 YARN。但是,还有一些额外的小任务需要完成。
在下面的link 中,dlb8 提供了在使用先前版本的安装中运行 Spark 2.0 需要完成的任务列表。只需相应地更改版本/路径即可。
使用
查找在您的集群上运行的 CDH 和 Hadoop 版本
$ hadoop version
Hadoop 2.6.0-cdh5.4.8
下载 Spark 并提取源代码。预构建的 Spark 二进制文件应该在大多数 CDH 版本中开箱即用,除非您的 CDH 构建中有自定义修复,在这种情况下,您可以使用 spark-2.0.0-bin-without-hadoop.tgz。
(可选)您还可以通过在 shell 中打开分发目录并使用步骤 1 中的 CDH 和 Hadoop 版本运行以下命令来构建 Spark
$ ./dev/make-distribution.sh --name custom-spark --tgz -Psparkr -Phadoop-2.6 -Phive -Phive-thriftserver -Pyarn
注意:对于 Spark 2.0,默认构建使用 Scala 版本 2.11。如果您需要坚持使用 Scala 2.10,请使用 -Dscala-2.10 属性或
$ ./dev/change-scala-version.sh 2.10
请注意,-Phadoop-provided 使配置文件能够在不包含 Cloudera 提供的 Hadoop 生态系统依赖项的情况下构建程序集。
解压 tgz 文件。
$tar -xvzf /path/to/spark-2.0.0-bin-hadoop2.6.tgz
cd 到自定义 Spark 发行版并通过从当前 Spark 版本复制配置来配置自定义 Spark 发行版
$ cp -R /etc/spark/conf/* conf/
$ cp /etc/hive/conf/hive-site.xml conf/
将 SPARK_HOME 更改为指向 Spark 2.0 发行版的文件夹
$ sed -i "s#\(.*SPARK_HOME\)=.*#\1=$(pwd)#" conf/spark-env.sh
在 spark-defaults.conf 中将 spark.master 从 yarn-client 更改为 yarn
$ sed -i 's/spark.master=yarn-client/spark.master=yarn/' conf/spark-
defaults.conf
从 spark-defaults.conf 中删除 spark.yarn.jar
$ sed '-i /spark.yarn.jar/d' conf/spark-defaults.conf
最后测试您的新 Spark 安装:
$ ./bin/run-example SparkPi 10 --master yarn
$ ./bin/spark-shell --master yarn
$ ./bin/pyspark
更新 log4j.properties 以抑制烦人的警告。将以下内容添加到 conf/log4j.properties
echo "log4j.logger.org.spark_project.jetty=ERROR" >> conf/log4j.properties
但是,它可以适应相反的情况,因为底线是“在具有不同版本的安装上使用 Spark 版本”。
如果不用处理 1.x - 2.x 的版本变化就更简单了,因为不需要关注 scala 版本和assembly approach 的变化。
我在 CDH5.4 安装中对其进行了测试,设置为 1.6.3,它运行良好。我用“spark.yarn.jars”选项做到了:
#### set "spark.yarn.jars"
$ cd $SPARK_HOME
$ hadoop fs mkdir spark-2.0.0-bin-hadoop
$ hadoop fs -copyFromLocal jars/* spark-2.0.0-bin-hadoop
$ echo "spark.yarn.jars=hdfs:///nameservice1/user/<yourusername>/spark-2.0.0-bin-hadoop/*" >> conf/spark-defaults.conf