当前位置: 首页 > 知识库问答 >
问题:

在所有spark执行器和驱动程序上执行脚本或小函数,而不使用数据帧或RDD

邵华皓
2023-03-14

我正在尝试使用Spark结构化流从Kafka主题读取数据。Kafka Brokers启用了SSL。所以我需要将私有CA证书安装/导入火花驱动程序和执行程序上的TrustStore文件。

我不能在主火花提交命令之前使用单独的步骤导入证书,因为火花脚本是动态提交的(从s3下载)。来自s3的此火花脚本包含有关私有CA证书文件(. pem)所在位置的信息(在单独的s3位置)。

我查找了做到这一点的方法。大多数解决方案都需要创建RDD或DataFrame并在其上调用Map或Map分区函数(本质上定义分区)。但对我来说,它就像一个循环依赖项。我既不能在不首先导入私有ca证书的情况下创建Dataframe或RDD,也不能在不创建DataFrame或RDD的情况下导入ca证书。

我可以创建一个虚拟的DataFrame并尝试将它们分布在所有执行器上,但这种解决方案并不总是有效(例如,如果执行器节点崩溃然后恢复,或者如果由于划分html" target="_blank">算法限制,DataFrame没有正确分布在所有执行器节点上)。

有谁能提出一种更好的方法来在驱动程序和所有执行器上执行一个小函数,而不创建数据帧或RDD?

共有1个答案

易祖鹤
2023-03-14

如果您正在AWS EMR上运行Spark应用程序,那么问题的解决方案可以通过EMR中的引导操作来处理。

从bootstrap action的官方文档bootstrap action中,您会发现

您可以使用引导操作安装其他软件或自定义群集实例的配置。引导操作是在Amazon EMR使用Amazon Linux Amazon机器映像(AMI)启动实例后在集群上运行的脚本。在Amazon EMR安装您在创建集群时指定的应用程序之前以及在集群节点开始处理数据之前运行引导操作。如果将节点添加到正在运行的集群,引导操作也会以相同的方式在这些节点上运行。您可以创建自定义引导操作,并在创建集群时指定它们。

根据用例,您可以让这些脚本在驱动程序或执行程序节点中的任何一个或两者上运行。默认情况下,它将在EMR中的所有实例上运行。

您可以将引导脚本放在S3上,也可以在从AWS控制台创建集群时粘贴整个脚本。我个人更喜欢将脚本放在S3中,并在启动EMR时在引导操作中指定此文件路径。

现在,为了实现您的用例,您可以将下载CA证书的逻辑放在脚本中,以及您想要在集群中的所有节点上执行的任何其他自定义逻辑。

 类似资料:
  • 我需要在我的服务器上运行函数 但是由于安全原因被禁用,但是PHP执行函数正在运行和。 是否可以使用php函数执行相同的操作? 禁用功能 链接,符号链接,执行,通过,proc_close,proc_get_status,proc_open,shell_exec,系统,流行,关闭

  • 我有我的chromedriver和chromedriver。项目文件夹中的exe权限。我正在用这段代码创建驱动程序的实例。 在本地windows上也可以(如果我们将“chromedriver”更改为“chromedriver.exe”),但当我在CentOS上运行它时,会收到错误消息:“驱动程序不可执行”。

  • 我正在尝试从java执行应用程序。当我在集成了eclipse的tomcat上运行它时,它工作得很好。当我试图在集成了操作系统的tomcat服务器上通过将.war文件部署到webapps中来做同样的事情时,它不起作用。它也没有遇到任何错误。即使我检查了日志,也没有任何错误,只有常见的tomcat访问日志。是否有其他方法可以执行firefox、chrome、gedit等应用程序。 注意:等基本bash

  • 我想在TestNg中并行运行硒测试,使用“数据提供者”。理想情况下,测试是按方法并行的(一个测试=一个方法),而不是简单的浏览器套件并行。我在某个地方读到过,一次可以控制大约5个ChromeDriver实例,所以我认为这应该是可能的。稍后,我计划转移到grid2。对于开发,我将通过右键单击XML配置文件上的运行来运行IntelliJ idea测试运行程序。 我在并行运行测试时遇到了问题(在grid

  • 如果我理解正确的话,在静态分配中,当Spark上下文在集群中的所有节点上创建时(在集群模式下),Spark应用程序将获取执行器。我有几个问题 > 如果在所有节点上都获得了执行器,并且在整个应用程序的持续时间内一直分配给这个应用程序,那么是否有很多节点都处于空闲状态? 在创建Spark上下文而不是在DagScheduler中时获取资源的优势是什么?我的意思是应用程序可以任意长,它只是保存资源。 我检

  • 事件函数执行顺序 在 Unity 脚本中,有大量的事件函数以特定的顺序被执行。执行顺序描述如下: 编辑器 Reset 当第一次把脚本绑定到对象上,或者使用了 Reset 命令时,该事件被触发,用以初始化脚本的属性。 加载第一个场景 当某个场景开始时,下面的事件被触发(场景中的每个对象都会执行一次): Awake 该函数总是在所有 Start 函数之前被调用,并且只会在某个 prefab 被实例化之