栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java 将jars添加到Spark作业

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 将jars添加到Spark作业

类路径:
ClassPath的影响取决于你提供的内容。有两种方法可以在类路径上进行设置:

  • spark.driver.extraClassPath
    --driver-class-path
    在运行驱动程序的节点上设置额外的类路径的别名。
  • spark.executor.extraClassPath
    在Worker节点上设置额外的类路径。
    如果希望在主服务器和工作服务器上都执行某个JAR,则必须在两个标志中分别指定它们。

分隔符:
遵循与JVM相同的规则:

  • Linux:冒号 :
  • 例如:
    --conf "spark.driver.extraClassPath=/opt/prog/hadoop-aws-2.7.1.jar:/opt/prog/aws-java-sdk-1.10.50.jar"
  • Windows:分号 ;
  • 例如:
    --conf "spark.driver.extraClassPath=/opt/prog/hadoop-aws-2.7.1.jar;/opt/prog/aws-java-sdk-1.10.50.jar"

文件分发:
这取决于你在以下模式下运行工作的方式:

客户端模式-Spark启动Netty HTTP服务器,该服务器在启动时为每个辅助节点分发文件。你可以在开始执行Spark作业时看到:

16/05/08 17:29:12 INFO HttpFileServer: HTTP File server directory is /tmp/spark-48911afa-db63-4ffc-a298-015e8b96bc55/httpd-84ae312b-5863-4f4c-a1ea-537bfca2bc2b16/05/08 17:29:12 INFO HttpServer: Starting HTTP Server16/05/08 17:29:12 INFO Utils: Successfully started service 'HTTP file server' on port 58922.16/05/08 17:29:12 INFO SparkContext: Added JAR /opt/foo.jar at http://***:58922/jars/com.mypre.jar with timestamp 146272855273216/05/08 17:29:12 INFO SparkContext: Added JAR /opt/aws-java-sdk-1.10.50.jar at http://***:58922/jars/aws-java-sdk-1.10.50.jar with timestamp 1462728552767

集群模式-在集群模式下,spark选择了一个Leader Worker节点以执行Driver进程。这意味着作业不是直接从“主”节点运行。在这里,Spark 不会设置HTTP服务器。你必须通过可用于所有节点的HDFS / S3 / Other来源手动将JARS提供给所有工作节点。

文件接受的URI
在“提交应用程序”中,Spark文档很好地解释了文件的可接受前缀:

使用spark-submit时,应用程序jar以及–jars选项随附的所有jar都会自动传输到集群。Spark使用以下URL方案来允许不同的策略来传播jar:

  • 文件:-绝对路径和文件:/ URI由驱动程序的HTTP文件服务器提供,并且每个执行程序都从驱动程序HTTP服务器提取文件。
  • hdfs:,http:,https:,ftp:-如预期的那样,这些从URI下拉文件和JAR
  • 本地:-以local:/开头的URI应该作为每个工作节点上的本地文件存在。这意味着将不会产生网络IO,并且对于推送到每个工作程序或通过NFS,GlusterFS等共享的大文件/ JAR来说效果很好。
    请注意,JAR和文件已复制到执行程序节点上每个SparkContext的工作目录中。

如前所述,将JAR复制到每个Worker节点的工作目录中。那到底在哪里?它通常下/var/run/spark/work,你会看到他们是这样的:

drwxr-xr-x    3 spark spark   4096 May 15 06:16 app-20160515061614-0027drwxr-xr-x    3 spark spark   4096 May 15 07:04 app-20160515070442-0028drwxr-xr-x    3 spark spark   4096 May 15 07:18 app-20160515071819-0029drwxr-xr-x    3 spark spark   4096 May 15 07:38 app-20160515073852-0030drwxr-xr-x    3 spark spark   4096 May 15 08:13 app-20160515081350-0031drwxr-xr-x    3 spark spark   4096 May 18 17:20 app-20160518172020-0032drwxr-xr-x    3 spark spark   4096 May 18 17:20 app-20160518172045-0033

当你查看内部时,将看到部署的所有JAR:

[*@*]$ cd /var/run/spark/work/app-20160508173423-0014/1/[*@*]$ lltotal 89988-rwxr-xr-x 1 spark spark   801117 May  8 17:34 awscala_2.10-0.5.5.jar-rwxr-xr-x 1 spark spark 29558264 May  8 17:34 aws-java-sdk-1.10.50.jar-rwxr-xr-x 1 spark spark 59466931 May  8 17:34 com.mypre.pre.jar-rwxr-xr-x 1 spark spark  2308517 May  8 17:34 guava-19.0.jar-rw-r--r-- 1 spark spark      457 May  8 17:34 stderr-rw-r--r-- 1 spark spark        0 May  8 17:34 stdout

受影响的选项:
要理解的最重要的事情是优先级。如果你通过代码传递任何属性,它将优先于你通过指定的任何选项spark-submit。Spark文档中提到了这一点:

指定为标志或属性文件中的任何值都将传递到应用程序,并与通过SparkConf指定的那些值合并。直接在SparkConf上设置的属性具有最高优先级,然后将标志传递到spark-submit或spark-shell,然后是spark-defaults.conf文件中的选项

因此,请确保将这些值设置在适当的位置,以便当一个优先级高于另一个时,你不会感到惊讶。

让我们分析每个有问题的选项:

  • --jarsvs SparkContext.addJar
    :这些是相同的,只有一个是通过spark提交设置的,一个是通过代码设置的。选择一个更适合你的套件。需要注意的重要一点是,使用这两个选项中的任何一个都不会将JAR添加到驱动程序/执行器类路径中,你需要使用这两个选项上的
    extraClassPathconfig
    显式添加它们。
  • SparkContext.addJarvs SparkContext.addFile
    :当你的代码需要使用依赖项时,请使用前者。仅在要将任意文件传递到工作程序节点时使用后者,这不是代码中的运行时依赖项。
  • --conf spark.driver.extraClassPath=...
    --driver-class-path
    :这些是别名,与选择哪一个无关紧要
  • --conf spark.driver.extraLibraryPath=...
    ,
    or --driver-library-path ...
    与上面相同,别名。
  • --conf spark.executor.extraClassPath=...
    :当你具有无法包含在超级JAR中的依赖项时(例如,由于库版本之间存在编译时冲突)并且需要在运行时加载时,请使用此函数。
  • --conf spark.executor.extraLibraryPath=...
    这作为
    java.library.pathJVM
    的选项传递。需要JVM可见的库路径时,请使用此选项。
    为简单起见,可以安全地假设我可以同时使用3个主要选项添加其他应用程序jar文件:

你可以放心地假设仅针对客户端模式,而不适用于集群模式。正如我之前所说。另外,你给出的示例还有一些多余的参数。例如,将JAR传递给

--driver-library-path
是没有用的,
extraClassPath
如果希望它们位于类路径中,则需要将其传递给。最终,在驱动程序和工作程序上都部署外部JAR时,你要做的是:

spark-submit --jars additional1.jar,additional2.jar   --driver-class-path additional1.jar:additional2.jar   --conf spark.executor.extraClassPath=additional1.jar:additional2.jar   --class MyClass main-application.jar


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/376586.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号