【问题标题】:Dependency issue with spark-sql-kafka with spark-submitspark-sql-kafka 与 spark-submit 的依赖关系问题
【发布时间】:2017-11-22 16:18:44
【问题描述】:

我在 scala 中编写了一个简单的驱动程序类,它使用 spark-sql-kafka 进行结构化流。我已经使用 eclipse+maven 将它打包到一个 jar 中。 pom.xml文件的相关部分如下:

<dependencies>
    <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>2.11.8</version>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.11</artifactId>
        <version>2.1.1</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-hive_2.11</artifactId>
        <version>2.1.1</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.databricks</groupId>
        <artifactId>spark-csv_2.11</artifactId>
        <version>1.5.0</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql-kafka-0-10_2.11</artifactId>
        <version>2.0.2</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

我使用以下命令将生成的 jar 文件提交给spark-submit

spark-submit --properties-file {path}/kafka-streaming-conf --packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.0.2 --class TestStreamDriver --master yarn {path}/StructuredStreaming-1.0-SNAPSHOT.jar

kafka-streaming-conf如下:

spark.executor.extraJavaOptions    -Dhttp.proxyHost=proxyName -Dhttp.proxyPort=8080 -Dhttps.proxyHost=proxyName -Dhttps.proxyPort=8080

spark.jars.ivySettings {path}/ivysettings_proxy.xml

ivysettings_proxy.xml文件如下:

<ivysettings>
   <settings defaultResolver="default" /> 
   <credentials host = "proxyName:8080" username = "" passwd = ""/>
   <include url="${ivy.default.settings.dir}/ivysettings-public.xml" /> 
    <include url="${ivy.default.settings.dir}/ivysettings-shared.xml" /> 
   <include url="${ivy.default.settings.dir}/ivysettings-local.xml" /> 
   <include url="${ivy.default.settings.dir}/ivysettings-main-chain.xml" /> 
   <include url="${ivy.default.settings.dir}/ivysettings-default-chain.xml"/> 
  </ivysettings>

我还将JAVA_OPTS 变量更改为:

export JAVA_OPTS="$JAVA_OPTS -Dhttp.proxyHost=proxyName -Dhttp.proxyPort=8080 -Dhttps.proxyHost=proxyName -Dhttps.proxyPort=8080"

当我使用上述命令运行 spark-submit 时,它会尝试从 maven 存储库和其他 url 下载,然后存在 Connection timed out 错误。

如何通过代理制作 spark-submit 下载依赖项?

谢谢。

【问题讨论】:

  • 检查代理连接和配置的存储库,但暂时您可以手动下载该 jar 并提供带有 --jar 选项的 spark-submit。
  • 感谢您的回答。添加罐子或制作肥罐对我不起作用。我能够找到一个解决方案,我总结如下。
  • 您提到的解决方案与我怀疑并要求检查的回购连接配置相关。除非您指定 --packages 选项和 --jar 选项,否则添加 jars 选项肯定会起作用。

标签: scala maven apache-spark


【解决方案1】:

对我有用的是:

我将 spark-submit 属性文件更改为:

spark.driver.extraJavaOptions  -Dhttp.proxyHost=proxyName -Dhttp.proxyPort=8080 -Dhttps.proxyHost=proxyName -Dhttps.proxyPort=8080
spark.executor.extraJavaOptions    -Dhttp.proxyHost=proxyName -Dhttp.proxyPort=8080 -Dhttps.proxyHost=proxyName -Dhttps.proxyPort=8080

导致证书错误。

然后我为https://repo.maven.apache.org/maven2/添加了证书

{path}/jdk1.8.0_144\jre\lib\security\cacerts 文件。 (我使用了一个名为 portecle 的免费程序将证书添加到 cacerts 文件中。)

由于我在 yarn 模式下运行 spark-submit,我不得不将新的 cacerts 文件复制到所有节点:

pscp.pssh -h cluster-hosts ./cacerts  {path}/jdk1.8.0_40/jre/lib/security/ 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    • 2021-10-24
    • 2016-06-25
    相关资源
    最近更新 更多