- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在构建一个 Spark 应用程序,我必须在其中缓存大约 15 GB 的 CSV 文件。我读到了新的 UnifiedMemoryManager
Spark 1.6 在这里介绍:
https://0x0fff.com/spark-memory-management/
作者不同User Memory
和 Spark Memory
(再次拆分为 Storage and Execution Memory
)。据我了解,Spark Memory 可以灵活地执行(随机播放、排序等)和存储(缓存)内容 - 如果需要更多内存,它可以从另一部分使用它(如果尚未完全使用)。这个假设正确吗?
用户内存是这样描述的:
User Memory. This is the memory pool that remains after the allocation of Spark Memory, and it is completely up to you to use it in a way you like. You can store your own data structures there that would be used in RDD transformations. For example, you can rewrite Spark aggregation by using mapPartitions transformation maintaining hash table for this aggregation to run, which would consume so called User Memory. [...] And again, this is the User Memory and its completely up to you what would be stored in this RAM and how, Spark makes completely no accounting on what you do there and whether you respect this boundary or not. Not respecting this boundary in your code might cause OOM error.
我如何访问这部分内存或者 Spark 如何管理这部分内存?
为了我的目的,我只需要有足够的存储内存(因为我不做随机播放、加入等操作)?那么,我可以设置 spark.memory.storageFraction
属性到 1.0?
对我来说最重要的问题是,用户内存呢?为什么呢,尤其是为了我上面描述的目的?
当我将程序更改为使用一些自己的类时,使用内存是否有区别,例如RDD<MyOwnRepresentationClass>
而不是 RDD<String>
?
这是我的代码片段(在基准应用程序中从 Livy Client
多次调用它。我正在使用带有 Kryo 序列化的 Spark 1.6.2。
JavaRDD<String> inputRDD = sc.textFile(inputFile);
// Filter out invalid values
JavaRDD<String> cachedRDD = inputRDD.filter(new Function<String, Boolean>() {
@Override
public Boolean call(String row) throws Exception {
String[] parts = row.split(";");
// Some filtering stuff
return hasFailure;
}
}).persist(StorageLevel.MEMORY_ONLY_SER());
最佳答案
统一内存管理器
1) 在 HEAP 上:对象在 JVM 堆上分配并由 GC 绑定(bind)。
2)OFF HEAP:对象通过序列化分配在JVM之外的内存中,由应用程序管理,不受GC约束。这种内存管理方式可以避免频繁的GC,但缺点是需要自己编写内存分配和内存释放的逻辑。
在堆上:
Storage Memory:主要用于存储Spark缓存数据,如RDD缓存、Broadcast变量、Unroll数据等。
Execution Memory/shuffle memory:主要用于存储Shuffle、Join、Sort、Aggregation等计算过程中的临时数据。
用户内存:主要用于存储RDD转换操作所需的数据,例如RDD依赖的信息。
Reserved Memory:为系统保留的内存,用于存储Spark的内部对象。
堆外内存:- 1)存储内存(洗牌内存) 2) 执行内存
关于caching - Apache 星火 : User Memory vs Spark Memory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43756576/
目前正在学习 Spark 的类(class)并了解到执行者的定义: Each executor will hold a chunk of the data to be processed. Thisc
阅读了有关 http://spark.apache.org/docs/0.8.0/cluster-overview.html 的一些文档后,我有一些问题想要澄清。 以 Spark 为例: JavaSp
Spark核心中的调度器与以下Spark Stack(来自Learning Spark:Lightning-Fast Big Data Analysis一书)中的Standalone Schedule
我想在 spark-submit 或 start 处设置 spark.eventLog.enabled 和 spark.eventLog.dir -all level -- 不要求在 scala/ja
我有来自 SQL Server 的数据,需要在 Apache Spark (Databricks) 中进行操作。 在 SQL Server 中,此表的三个键列使用区分大小写的 COLLATION 选项
所有这些有什么区别和用途? spark.local.ip spark.driver.host spark.driver.bind地址 spark.driver.hostname 如何将机器修复为 Sp
我有大约 10 个 Spark 作业,每个作业都会进行一些转换并将数据加载到数据库中。必须为每个作业单独打开和关闭 Spark session ,每次初始化都会耗费时间。 是否可以只创建一次 Spar
/Downloads/spark-3.0.1-bin-hadoop2.7/bin$ ./spark-shell 20/09/23 10:58:45 WARN Utils: Your hostname,
我是 Spark 的完全新手,并且刚刚开始对此进行更多探索。我选择了更长的路径,不使用任何 CDH 发行版安装 hadoop,并且我从 Apache 网站安装了 Hadoop 并自己设置配置文件以了解
TL; 博士 Spark UI 显示的内核和内存数量与我在使用 spark-submit 时要求的数量不同 更多细节: 我在独立模式下运行 Spark 1.6。 当我运行 spark-submit 时
spark-submit 上的文档说明如下: The spark-submit script in Spark’s bin directory is used to launch applicatio
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 6 个月前关闭。 Improve
我想了解接收器如何在 Spark Streaming 中工作。根据我的理解,将有一个接收器任务在执行器中运行,用于收集数据并保存为 RDD。当调用 start() 时,接收器开始读取。需要澄清以下内容
有没有办法在不同线程中使用相同的 spark 上下文并行运行多个 spark 作业? 我尝试使用 Vertx 3,但看起来每个作业都在排队并按顺序启动。 如何让它在相同的 spark 上下文中同时运行
我们有一个 Spark 流应用程序,这是一项长期运行的任务。事件日志指向 hdfs 位置 hdfs://spark-history,当我们开始流式传输应用程序时正在其中创建 application_X
我们正在尝试找到一种加载 Spark (2.x) ML 训练模型的方法,以便根据请求(通过 REST 接口(interface))我们可以查询它并获得预测,例如http://predictor.com
Spark newb 问题:我在 spark-sql 中进行完全相同的 Spark SQL 查询并在 spark-shell . spark-shell版本大约需要 10 秒,而 spark-sql版
我正在使用 Spark 流。根据 Spark 编程指南(参见 http://spark.apache.org/docs/latest/programming-guide.html#accumulato
我正在使用 CDH 5.2。我可以使用 spark-shell 运行命令。 如何运行包含spark命令的文件(file.spark)。 有没有办法在不使用 sbt 的情况下在 CDH 5.2 中运行/
我使用 Elasticsearch 已经有一段时间了,但使用 Cassandra 的经验很少。 现在,我有一个项目想要使用 Spark 来处理数据,但我需要决定是否应该使用 Cassandra 还是
我是一名优秀的程序员,十分优秀!