离线Spark集群使用第三方包

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 集群是离线或者处于网络情况不佳时如何处理呢?

  1. 找一台可以上网的主机下载相关包。
    利用 packages 命令行选项,将下载的 jar 包从 $HOME/.ivy2/jars 中提取出来。

  2. 如果使用 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
  1. 将 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

你可能感兴趣的:(离线Spark集群使用第三方包)