Spark集群有时需要使用到一些第三方包,比如 graphframes,kafka 等等(以下均以 graphframes 为例)。按照官方文档,通常一个 packages 的命令行选项即可解决问题:
$SPARK_HOME/bin/spark-shell --packages graphframes:graphframes:0.6.0-spark2.2-s_2.11
这个命令会从网络上下载 graphframes 及其依赖的 jar 包,保存到 $HOME/.ivy2/jars
中。但是当 Spark 集群是离线或者处于网络情况不佳时如何处理呢?
找一台可以上网的主机下载相关包。
利用 packages 命令行选项,将下载的 jar 包从$HOME/.ivy2/jars
中提取出来。如果使用 pyspark,还需要提取相关的 python 包。
对于 graphframes 来说,就是将 graphframes_graphframes-0.6.0-spark2.2-s_2.11.jar 包解压,打包其中的 graphframes 文件夹,并将该 zip 包加入环境变量 PYTHONPATH。
unzip graphframes_graphframes-0.6.0-spark2.2-s_2.11.jar
zip -r graphframes.zip graphframes
- 将 packages 选项换成 jars 选项,把刚才下载的 jar 包都加入到选项中。
命令行就变成:
export PYTHONPATH=$PYTHONPATH:/path/to/graphframes.zip
$SPARK_HOME/bin/spark-shell --jars /path/to/graphframes:graphframes:0.6.0-spark2.2-s_2.11.jar,/path/to/xxx.jar