Spark提交的本地或远程jar

时间:2018-04-10 10:57:45

标签: java apache-spark hadoop apache-kafka

我有一个在yarn-client(客户端驱动程序)中运行的spark-submit作业,除了其他函数之外,还通过Kafka读取和发送消息。

在我的群集上,只有Kafka代理节点有Kafka jar,我不想让我的所有节点都成为Kafka客户端。这意味着我的Spark作业必须加载(--jars)并将Kafka jar从客户端服务器复制到集群上的所有执行程序。

我的问题是:一般的最佳做法是什么?将这些jar(~20MB)复制到每个执行程序是否会对性能/延迟产生影响?或者这是一种经典的工作方式?

Environment
RHEL7
Spark 1.6
Kafka 0.10.1
Network 10GB

1 个答案:

答案 0 :(得分:0)

一般来说,最好的选择是将您的代码变成胖罐,并将所有必需的依赖项捆绑在一起。

如果您发现提交过程太慢,请随意将必要的Kafka Streaming JAR(包括其依赖项)复制到每个YARN NodeManager的SPARK_HOME中。我相信您也可以将HDFS路径引用到JAR文件,如果您增加该文件的复制因子,它将分摊网络流量

无论如何,您的所有节点都需要成为Kafka客户端。您无法控制Spark启动执行程序的位置。注意:“安装Kafka”与在服务器上提供Java客户端不同。