我正在尝试在Azure上的HDInsight Spark群集中安装Azure CosmosDB Spark连接器。 (Github)

我是Spark环境的新手,我无法实现将连接器jar添加到spark配置的正确方法。

我使用的方法:

方法1
我将 jar 上传到与HDInsight群集关联的Azure Blob存储容器上。 (到示例/ jar /)
我与spark集群头节点建立了ssh连接,并运行以下命令:

spark-shell --master yarn --conf "spark.executor.extraClassPath="wasb:///example/jars/azure-cosmosdb-spark_2.0.2_2.11-0.0.3.jar" --conf "spar.driver.extraClassPath= "wasb:///example/jar/azure-cosmosdb-spark_2.0.2_2.11-0.0.3.jar"

spark-shell返回以下内容:
SPARK_MAJOR_VERSION is set to 2, using Spark2
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel).
17/10/19 15:10:48 WARN SparkContext: Use an existing SparkContext, some configuration may not take effect.
Spark context Web UI available at http://10.0.0.20:4040
Spark context available as 'sc' (master = yarn, app id = application_1508418631913_0014).
Spark session available as 'spark'.

我认为这里的问题是
SparkContext: Use an existing SparkContext, some configuration may not take effect.

方法2

上传到/examples/jars后,与第一种方法相同。
我打开了Ambari UI,并向spark-Custom-Defaults添加了spark.executor.extraClassPath和spark.driver.extraClassPath,它们具有方法1中提到的相同值。

方法1 方法2 都对我的开发环境没有影响。我尝试导入com.microsoft.azure.cosmosdb,但解释器找不到它。

方法3
我创建了一个HDInsight 3.6 Spark群集(由于连接器已在HDInsight 3.5上进行了测试,因此不建议在本案例中使用该群集),并使用Zeppelin将配置添加到Livy Interpreter。
我尝试找到Here的示例代码,却弹出了此错误:
java.lang.NoSuchMethodError: org.apache.spark.sql.catalyst.analysis.TypeCoercion$.findTightestCommonType()Lscala/Function2;

经过一番谷歌搜索后,我认为这是一个类版本问题,因此我回到了HDInsight 3.5,但仍然没有结果。

我的问题是:

Spark-Shell --conf是否应用持久配置或仅适用于Shell session ?

我知道将来如何使用Livy REST API来执行可能包含此程序包的远程PySpark作业,并且不想在每次提交远程作业时都在配置上运行,我如何才能实现适当的配置?

最佳答案

您可以添加额外的依赖关系,从以下几步开始:

spark-shell --packages maven-coordinates of the package

在您的情况下:
    spark-shell --packages com.microsoft.azure:azure-cosmosdb-spark_2.1.0_2.11:jar:1.1.2

一个好的做法是将您的应用及其所有依赖项打包在一起:

https://spark.apache.org/docs/latest/submitting-applications.html#bundling-your-applications-dependencies

这也应该适用于livy。

09-04 23:08
查看更多