- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在遍历 3 个大文件并执行大量统计计算。
除了 1 个 CORE 节点和 1 个 MASTER 节点外,我有每个执行器 55GB 的可用内存、8V 内核和最多 10 个可用的 TASK 节点。
以下是我实际代码的伪代码:
#Load MyConfigMeta file- this is a small file and will be a couple of times in the code
MyConfigMeta=spark.read.parquet("s3://path/MyConfigMeta.parquet")
MyConfigMeta=MyConfigMeta.persist(StorageLevel.MEMORY_AND_DISK)
#Very Large timeseries files
modules=["s3://path/file1.parquet",
"s3://path/file2.parquet",
"s3://path/file3.parquet"]
for file in modules:
out_filename=1
df1=spark.read.parquet(file)
df1=df1.join(MyConfigMeta, on=["key"], how="inner")
#Find out latest column values based on Timestamp
lim_max=df1.groupBy('key')\
.agg(f.max('TIME_STAMP').alias('TIME_STAMP'))
temp=df1.select('TIME_STAMP','key',''UL','LL')
lim_max=lim_max.join(temp, on=['TIME_STAMP','key'], how="left")\
.drop('TIME_STAMP')\
.distinct()
lim_max=lim_max.persist(StorageLevel.MEMORY_AND_DISK)
df1=df1.drop('UL,'LL')\
.join(lim_max, on=['key'], how="left")\
withColumn('out_clip', when(col('RESULT').between(col('LL'),col('UL')), 0).otherwise(1))\
df1=df1.persist(StorageLevel.MEMORY_AND_DISK) # This is a very large dataframe and will later be used for simulation
df2=df1.filter(col('out_clip')==0)\
.groupBy('key')\
.agg(f.round(expr('percentile(RESULT, 0.9999)'),4).alias('UPPER_PERCENTILE'),
f.round(expr('percentile(RESULT, 0.0001)'),4).alias('LOWER_PERCENTILE'))\
.withColumn('pcnt_clip', when(col('RESULT').between(col('LOWER_PERCENTILE'),col('UPPER_PERCENTILE')), 0).otherwise(1))\
.filter(col('pcnt_clip')==0)
stats=df2.groupBy('key')\
.agg(#Perform a bunch of statistical calculations (mean, avg, kurtosis, skew))
stats=stats.join(lim_max, on=['key'], how="left") #get back the columns from lim_max
lim_max=lim_max.unpersist()
stats=stats.withColumn('New_UL', #formula to calculate new limits)\
.withColumn('New_LL', #formula to calculate new limits)\
.join(MyConfigMeta, on=['key'], how="left")
#Simulate data
df_sim=df1.join(stats, on=['key'], how="inner")\
.withColumn('newOOC', when ((col('RESULT')<col('New_LL')) | (col('RESULT')>col('New_UL')), 1).otherwise(0))
df3=df_sim.groupBy('key')\
.agg(f.sum('newOOC').alias('simulated result'))
#Join back with stats to get statistcal data, context data along with simulated data
df4=df3.join(stats, on=['key'], how="inner")
#Write output file
df4.write.mode('overwrite').parquet("s3://path/sim_" +out_filename+ ".parquet")
df1=df1.unpersist()
spark.catalog.clearCache()
我的 spark-submit 配置是 6 个 executor-cores
和 driver-cores
,41GB executor-memory
,41GB driver-内存
,14GB spark.executor.memoryOverhead
和9
num-executors`。
当我查看 Ganglia 中的内存图表时,我注意到第一个文件完成得很好,但是后续文件的计算失败,因为它一直遇到丢失节点的问题
ExecutorLostFailure (executor 5 exited unrelated to the running tasks) Reason: Container marked as failed. Diagnostics: Container released on a lost node.
自从我取消持久化 df1
数据帧并使用 spark.catalog.clearCache()
以来,我预计缓存内存会显着清除。但是内存似乎在不断增加而没有被清除。但是,如果我单独运行文件,它似乎工作正常。
在这里,大量内存被清除只是因为 10 个执行者死亡并被列入黑名单。
有没有办法在 spark 中强制刷新内存?或者还有其他原因导致我不断丢失节点?
最佳答案
您可以使用以下函数刷新 SparkContext 中的所有持久化数据集。它列出 RDD 并调用 unpersist 方法。当在函数内部创建 DF 时,它特别有用。
def unpersist_dataframes() -> None:
for (id, rdd) in sc._jsc.getPersistentRDDs().items():
rdd.unpersist()
print("Unpersisted {} rdd".format(id))
为了监控持久化的数据帧,检查 Storage tab from the SparkUI反而。不要担心 Ganglia 统计中的空闲内存,实际上这可能是您的资源没有得到充分利用的迹象。 Spark 明智地管理内存。
关于丢失的节点,如果您使用像 Databricks 这样的托管服务,它会在集群的事件日志中显示节点终止的原因。
关于apache-spark - 即使不坚持,Spark 内存缓存也会不断增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67066191/
在我的 POJO 中,我有这个: @Transient private int qtyMentee; 在我的 DAO 中我有这个查询: public List findQtyMentee(){
如果我正在编写的应用程序终止,我需要将当前位置存储到 iphone 的“磁盘”中。然后,当应用程序再次启动时,我想恢复这些信息。但是,CLLocation 坐标属性是只读的。 如何在程序调用之间保存此
这个问题有点来回,因为我已经了解了一些关于 unix 系统的 g++ 知识(抱歉,如果我把任何人搞砸了)。 对于我目前正在尝试完成的项目,我想获得 twitcurl使用 Xcode 和 OpenFra
我想在表格中显示用户的姓名以及本周发布的照片数量。 示例:用户 1 发布了 10 张照片,用户 2 发布了 20 张照片...... 所以我需要一个计数,但我不知道如何。 图片型号: public
我正在尝试保留具有@OneToMany 和@ManyToOne 关系的实体。 @OneToMany(mappedBy="customer", cascade=CascadeType.ALL, fetc
我有一个表单,我从另一个表中获取字段,例如,第一个字段是硬编码的,第二个字段是从另一个表中获取的,如果其他表有 10 条记录,则向用户显示 10 个新字段。我的问题是如何将这种数据插入表中。 我得到这
我一直在努力控制导入和导出,这样我就可以精简我的 JS 应用程序。我试过合并这些 Mozilla和 this Stack Overflow examples没有任何运气。 It looks like
我的数据库中的一个字段中包含以下文本: [quote:5a7b87febe="mr smith"]This is some text. This is more text on another lin
我正在使用 cling UPnP android 中的框架连接到支持 UPnP 的设备。我成功地创建了一个设备并浏览了网络中的可用设备。但对于三星电视在网络框架内没有任何反应。在这里我添加了 Rend
我正在制作一个问答网站,类似于此网站和 Yahoo answers。我有 3 个表 - smf_members、qa_questions 和 qa_answers。 在此查询中,我想从 qa_ques
阅读后this question - 它还提供了文档链接,我仍然对文档有疑问。 MDN:Date.parse A string representing an RFC2822 or ISO 8601
我有一个父实体客户端。该客户可以访问该网站并创建约会。这意味着约会是在客户反对的其他时间创建的。 我的问题是:如何将子对象添加到已持久化的父对象中?如果调用下面示例中的函数 addData1(),则会
我正在尝试创建气泡,重复几次后我的浏览器卡住了。这是我的代码。有人请帮助....我如何在不提出许多请求的情况下完成它。 看起来我的帖子主要是代码,但我为这个 Stackoverflow 添加了足够的细
我被这个 linq 查询困住了,我需要做的就是优化最后的价格计算,因为我得到了大约 1000 篇文章,而且销量很大,所以它变得很慢...... var result = from article in
我有一列用于对象创建 的时间,一列用于对象更新 的时间。当我创建并保留新对象时,我从 MySQL 收到错误: updated cannot be null. 我没有为它设置任何值,因为我希望 upda
我以前使用 git 没有任何问题,但突然间我无法推送 或克隆 任何东西。当我使用这个命令时,没有任何反应,甚至没有错误,所以我必须按 ctrl + c 或关闭 git 窗口。 我使用这个简单的命令来推
我似乎不知道下一步该做什么。我的目标是使用图像包中的 SubImage 函数从原始图像创建一个包含所有子图像的数组。我能够在 imageSplit() 函数中分割图像并通过 channel 传递给 i
我有一个 STM32L-Discovery 板,它有一个 STM32L152R8 微处理器。我很难让基本的事情发挥作用。 我看过ST给出的例子(电流消耗触摸传感器和温度传感器),我认为它们不太用户友好
这是一个散列,其中mysql列与散列的键相关,值与散列的值相关 {:jobID=>"1", :checkoutArtificateFolder=>"/cmf/new/build/Artifacts/
我有两个实体 @Entity @Table(name="parent") public class Parent { @Id String uuid; @ElementCollection
我是一名优秀的程序员,十分优秀!