ssl—在所有spark执行器和驱动程序上执行脚本或小函数,而不使用Dataframe或rdd

ecfsfe2w  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(430)

我正在尝试使用spark结构化流媒体读取Kafka主题中的数据。kafka代理支持ssl。因此,我需要安装/导入私人ca证书到spark驱动程序和执行器上的信任库文件中。
我不能在主spark submit命令之前使用单独的步骤导入证书,因为spark脚本是动态提交的(从s3下载)。来自s3的spark脚本包含有关私有ca证书文件(.pem)的位置的信息(在单独的s3位置)。
我找到了做那件事的方法。大多数解决方案都需要创建rdd或dataframe,并对其调用map或mappartition函数(本质上定义分区)。但对我来说,这就像一个循环依赖。我既不能在不首先导入私有ca证书的情况下创建dataframe或rdd,也不能在不创建dataframe或rdd的情况下导入ca证书。
我可以创建一个虚拟Dataframe,并尝试将它们分布在所有执行器上,但此解决方案并不总是有效(例如,如果执行器节点崩溃,然后恢复,或者如果由于分区算法的限制,Dataframe没有正确分布在所有执行器节点上,该怎么办)。
有没有人能提出一个更好的方法,在驱动程序和所有执行程序上执行一个小函数,而不创建Dataframe或rdd?

cwxwcias

cwxwcias1#

如果您在aws emr上运行spark应用程序,那么问题的解决方案可以通过emr中的引导操作来处理。
从bootstrap操作的官方文档bootstrap action中,您会发现
您可以使用引导操作来安装其他软件或自定义群集示例的配置。引导操作是在amazonemr使用amazonlinuxamazon机器映像(ami)启动示例之后在集群上运行的脚本。在amazonemr安装您在创建集群时指定的应用程序之前以及在集群节点开始处理数据之前运行引导操作。如果将节点添加到正在运行的集群中,引导操作也会以相同的方式在这些节点上运行。您可以创建自定义引导操作,并在创建集群时指定它们。
您可以使这些脚本在驱动程序或执行程序节点上运行,也可以同时在这两个节点上运行,具体取决于用例。默认情况下,它将在emr中的所有示例上运行。
您可以将引导脚本放在s3上,也可以在从aws控制台创建集群时粘贴整个脚本。我个人更喜欢将脚本放在s3中,并在启动emr时在bootstrap操作中指定此文件路径。
现在,为了实现您的用例,您可以将下载ca证书的逻辑放在脚本中,以及您希望在集群中的所有节点上执行的任何其他自定义逻辑。

相关问题