如何从驱动程序将不适合驱动程序内存的数据加载到 Spark 独立集群中?

Posted

技术标签:

【中文标题】如何从驱动程序将不适合驱动程序内存的数据加载到 Spark 独立集群中?【英文标题】:How do I load data into Spark standalone cluster from the driver program, that does not fit in the driver memory? 【发布时间】:2016-07-01 17:50:35 【问题描述】:

在我的场景中,我有一个 Spark 以独立模式运行,其中许多工作节点具有几乎无限的 RAM。

在我的场景中,我将数据加载到驱动程序 (Apache Zeppelin) 中,然后从中创建 RDD 和 DataFrame。数据大小超过驱动程序的RAM。

如何加载该数据(从驱动程序进程)并从中创建 DataFrame?

举个例子会很有帮助!

【问题讨论】:

很抱歉,我并没有真正明白你的问题。 “无限 RAM”和“数据超出 RAM”对我来说是相互矛盾的概念。请阅读如何在 SO 上提出问题并查看您的问题!由于不清楚,我现在投票关闭它。 “无限”内存在worker上,有限内存在驱动程序上。 【参考方案1】:

驱动的正常用法是

告诉执行者该做什么 收集/分享结果

将数据加载到驱动程序并创建 RDD/DataFrame/Dataset 应仅在实验用例中使用。

【讨论】:

【参考方案2】:

在这种情况下,唯一的选择是告诉工作人员自己加载数据。如果 Spark 不支持您的 Input 格式,您必须扩展 RDD 类并实现计算功能。

【讨论】:

【参考方案3】:

我不确定为什么必须将数据加载到驱动程序中。这在分布式世界中没有任何意义。我建议您以分布式(hdfs)模式将数据保存/移动到集群中并从那里加载。如果您的数据不存在,有许多开源解决方案可以传输它。此外,您可以将其保存到任何其他受支持的文件系统,例如 s3。

【讨论】:

以上是关于如何从驱动程序将不适合驱动程序内存的数据加载到 Spark 独立集群中?的主要内容,如果未能解决你的问题,请参考以下文章

如何将带有 dll 的应用程序从内存加载到 AppDomain 中并执行它?

将 s-s-rS 子报表嵌入主报表

memcached学习笔记

用于有状态应用程序的 ORM。 EF适合吗?或者任何?

如何从其他(Postgres)数据库加载内存数据库中的数据?

jvm