如何从驱动程序将不适合驱动程序内存的数据加载到 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 中并执行它?