使用spark-submit

时间:2017-11-21 07:16:48

标签: scala maven apache-spark

我在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存储库和其他网址下载,然后存在Connection timed out错误。

如何通过代理提交spark-submit下载依赖项?

感谢。

1 个答案:

答案 0 :(得分:0)

对我有用的是:

我将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文件中。)

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

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