在Cloudera Hadoop 发行版 (CDH) 中使用 Spark 2.x.x[译]

做为一名技术宅,折腾是永无止境的,需要走在技术的最前沿。本文翻译自Running Spark 2.x.x on Cloudera Hadoop Distro (CDH) 并对文中一些错误进行了修正。

刚刚发布的Spark 2.0带来了许多新特性,使我们的Spark更易使用,速度更快,更灵活。最新的CDH发布版为5.8.0,自带Spark 1.6 。你可能运行着更早版本的CDH。本文将为您展示在群集中使用Spark 2.0。

自从Spark可以把任务提交到YARN中以后,我们就可以在Cloudera发行版里面使用不同的Spark版本了。除了用户需要具有运行YARN job的权限外,我们无需修改任何管理策略以及群集配置。你可以在YARN群集中同时运行多个Spark版本。每个Spark版本都会把任务限制在自己一亩三分地。因此新的Spark版本不会影响你群集中的其他Job。

1.确认你现在使用的CDH的版本

$ hadoop version
Hadoop 2.6.0-cdh5.8.0

2.下载并解压Spark,预编译的二进制版本Spark就能很好的工作在大多数CDH版本中,当然你若对CDH做过一些修正,可以使用spark-2.0.0-bin-without-hadoop.tgz

3.(可选)你也可以编译Spark源码,使用下面代码即可,注意替换掉你的CDH版本

$ ./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 ,编译assembly文件不会包含Cloudera依赖项。

4.解压tgz文件

$tar -xvzf spark-2.0.0-bin-hadoop2.6.tgz

5.切到解压了的Spark目录,然后拷贝你群集中当前Spark版本的配置文件

$ cp -R /etc/spark/conf/* conf/
$ cp /etc/hive/conf/hive-site.xml conf/

6.修改SPARK_HOME指向Spark2.0的目录

$ sed -i "s#\(.*SPARK_HOME\)=.*#\1=$(pwd)#" conf/spark-env.sh

7.将spark-defaults.conf里面spark.master从yarn-client改为yarn

$ sed -i 's/spark.master=yarn-client/spark.master=yarn/' conf/spark-defaults.conf

8.从spark-defaults.conf中删除spark.yarn.jar

$ sed -i '/spark.yarn.jar/d' conf/spark-defaults.conf

9.最后测试一下你的新Spark环境

$ ./bin/run-example SparkPi 10 --master yarn
$ ./bin/spark-shell --master yarn
$ ./bin/pyspark

10.更新log4j.properties配置,忽略waring信息。

echo "log4j.logger.org.spark_project.jetty=ERROR" >> conf/log4j.properties

高度推荐的可选操作
设置spark.yarn.archivespark.yarn.jars.自2.0开始Spark已经抛弃了巨大的assembly文件。可以参看Spark-11157以及https://issues.apache.org/jira/secure/attachment/12767129/no-assemblies.pdf活的更多信息。取而代之的是spark.yarn.jars或者park.yarn.archive

为了让YARN知道使用哪个Spark JAR,需要做个Spark Yarn归档或者把Spark jar包拷贝到HDFS

$ Cd  $SPARK_HOME
$ zip spark-archive.zip jars/*
$ hadoop fs -copyFromLocal spark-archive.zip
$ echo "spark.yarn.archive=hdfs://nameservice1/user/<yourusername>/spark-archive.zip" >> conf/spark-defaults.conf

或者设置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

如果你想在群集中访问本地目录,那么拷贝archive或者spark jar包到本地路径,然后通过rsync或者scp同步到所有数据节点,并把URLs中的hdfs:改成local:即可。

参考

Spark 2.0 in Yarn on a CDH with Kerberos
Installing a Custom Spark Version on CDH

打赏支持:如果你觉得我的文章对你有所帮助,可以打赏我哟。