- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 pyspark 在 Spark 中编写批处理程序。以下是输入文件及其大小
base-track.dat (3.9g)
base-attribute-link.dat (18g)
base-release.dat (543m)
这些是每行一条记录的文本文件,每个字段由一个特殊字符分隔(引用代码)
我正在对属性链接执行一些过滤操作并将它们分组并与其他表连接。
我正在通过 spark-submit 将此程序提交到一个由 Ambari 管理的具有 9 个数据节点的 Hadoop 集群。每个数据节点包含 140 GB 的 RAM 和 3.5 TB 的磁盘空间。
以下是我的pyspark代码
import sys
from pyspark import SparkContext
from pyspark.sql import SQLContext, Row
if __name__ == "__main__":
sc = SparkContext(appName = "Tracks")
sqlContext = SQLContext(sc)
#Load base-track
track = sc.textFile("base-track/input").map(lambda row: row.split(u'\u0001'))
#Load base-attribute-link
attlnk = sc.textFile("base-attribute-link/input").map(lambda row: row.split(u'\u0001'))
#Load base-release
release = sc.textFile("base-release/input").map(lambda row: row.split(u'\u0001'))
attlnk = attlnk.filter(lambda row: row[2] == 'MA0000000162')
attlnkg = attlnk.groupBy(lambda row: row[1])
attlnkmax = attlnkg.map( lambda t: (t[0],max([v[4] for v in t[1]])) )
alg = attlnkmax.map(lambda r: Row(al_objectid=r[0],al_value=r[1]))
aldf = alg.toDF()
track = track.map(lambda r:Row(t_tag = r[0], t_trackid= r[1], t_releaseid= r[2], t_songid = r[3], t_med= r[4], t_ph = r[5], t_tn = r[5], t_title= r[5], t_part= r[6], t_dur = r[7], t_pick = r[8], t_amgclid = r[9], t_amgpopid = r[10], t_compid = r[11], t_muzid = r[12], t_perfid= r[13], t_albumid = r[14]))
trackdf = track.toDF()
release = release.map(lambda r:Row(r_tag = r[0], r_relid = r[1], r_albumid = r[2], r_mediafmtid = r[3], r_prodfmtid = r[4], r_reldate = r[5], r_prodcode = r[6], r_prodtypeid = r[7], r_label = r[8], r_relyear = r[9], r_ispurch = r[10], r_amgclassid = r[11], r_amgpopid = r[12], r_eanid = r[13], r_upcid = r[14]))
releasedf = release.toDF()
trackaldf = trackdf.join(aldf, trackdf['t_trackid'] == aldf['al_objectid'], 'left_outer')
tracksdf = trackaldf.join(releasedf, trackaldf['t_releaseid'] == releasedf['r_relid'])
tracksdf = tracksdf.select('t_trackid', 't_releaseid', 't_songid', 't_med', 't_ph', 't_tn', 't_title', 't_part', 't_dur', 't_pick', 't_amgclid', 't_amgpopid', 't_compid', 't_muzid', 'al_objectid', 't_perfid', 't_albumid', 'r_label')
tracksdf.rdd.map(lambda x: u"\u0001".join(map(str, x))).coalesce(100).saveAsTextFile("tracks-out")
尝试执行此操作时出现以下错误。
ERROR DiskBlockObjectWriter: Uncaught exception while reverting partial writes to file /tmp/blockmgr-d88c631e-cec3-4b83-8af6-a38b109b5e3b/0e/temp_shuffle_7dbda3ac-48b1-4c4a-89c7-64eb5d858d90
java.io.IOException: No space left on device
at java.io.FileOutputStream.writeBytes(Native Method)
at java.io.FileOutputStream.write(FileOutputStream.java:326)
at org.apache.spark.storage.TimeTrackingOutputStream.write(TimeTrackingOutputStream.java:58)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
at org.xerial.snappy.SnappyOutputStream.flush(SnappyOutputStream.java:336)
at org.apache.spark.io.SnappyOutputStreamWrapper.flush(CompressionCodec.scala:209)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:141)
at java.io.DataOutputStream.flush(DataOutputStream.java:123)
at org.apache.spark.sql.execution.UnsafeRowSerializerInstance$$anon$2.flush(UnsafeRowSerializer.scala:83)
at org.apache.spark.storage.DiskBlockObjectWriter$$anonfun$revertPartialWritesAndClose$1.apply$mcV$sp(DiskBlockObjectWriter.scala:157)
at org.apache.spark.storage.DiskBlockObjectWriter$$anonfun$revertPartialWritesAndClose$1.apply(DiskBlockObjectWriter.scala:154)
at org.apache.spark.storage.DiskBlockObjectWriter$$anonfun$revertPartialWritesAndClose$1.apply(DiskBlockObjectWriter.scala:154)
at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1239)
at org.apache.spark.storage.DiskBlockObjectWriter.revertPartialWritesAndClose(DiskBlockObjectWriter.scala:161)
at org.apache.spark.shuffle.sort.BypassMergeSortShuffleWriter.stop(BypassMergeSortShuffleWriter.java:232)
at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:79)
at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:41)
at org.apache.spark.scheduler.Task.run(Task.scala:89)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:227)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
有几个关于 SO 的问题,here和 here与同一问题有关。
这是我从上面两个问题中尝试过的。我试图将 spark.yarn.executor.memoryOverhead 从 384 MB 增加到 4GB。
SPARK_JAVA_OPTS+=" -Dspark.local.dir=/mnt/spark,/mnt2/spark -Dhadoop.tmp.dir=/mnt/ephemeral-hdfs"
export SPARK_JAVA_OPTS
第一个没有任何效果。如果我添加 java opts,我会收到/mnt 目录不存在的错误。
在多个论坛(包括 databricks)上阅读了有关此问题的信息后,我有一些模糊的想法,认为此作业正在尝试创建临时文件,作为每个集群节点/tmp 上随机播放的一部分并耗尽空间。在每个集群节点上,我们为 tmp 目录所在的根 (/) 分区分配了 100 GB。
我已经努力了一个多月,通过使用各种 spark 配置参数来执行此操作。作为调整的一部分,我将 spark.driver 和 spark.executor 内存增加到 16g,后来又增加到 64g。还将 spark yarn 执行器内存增加到 4GB。不幸的是,这些都不能解决空间问题。
任何关于如何进一步进行的指导都会有很大帮助。
[Edit-1] 我只是检查所有机器上根目录的磁盘空间,我们集群中的 9 个节点中有 7 个为根目录分配了 100+GB,但在 2 个节点上只分配了 10 GB,他们只剩下 6+GB。这可能是导致磁盘空间问题的原因,如果可以扩展根目录的大小,我将不得不与我们的 IT 团队核实。
[Edit-2] 我与 IT 团队合作将所有机器上的根分区大小扩展到 100+GB,但问题仍然存在,可能是 100GB 的/tmp 空间也不足以胜任这份工作。我估计这项工作的输出大约为 4.6GB。
最佳答案
鉴于您的错误的性质以及您正在对数十 GB 的数据执行大型连接这一事实,其中 spark worker 将在洗牌时将中间数据写入磁盘,100GB 的磁盘似乎不够。我建议为默认的 worker_dir 和 local_dirs 分配更多的磁盘,方法是将它们安装到更大的磁盘或配置更大的根磁盘。另请注意,如果 spark 未正确关闭,则此中间数据可能会持续存在并占用工作节点上的大量空间。因此,您可能必须检查这些目录并删除所有陈旧文件。如果您在 AWS r3、c3 或具有大型临时 SSD 磁盘的类似实例类型上运行 spark-standalone,我建议 mounting那些磁盘说“mnt”和“mnt2”和configuring spark scratch space 指向那些挂载,而不是(通常)较小的根卷。例如:
SPARK_LOCAL_DIRS=/mnt
SPARK_WORKER_DIR=/mnt2
关于hadoop - 由于空间问题导致 Spark 作业失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44679244/
我在使用以下代码时遇到问题: function http_file_exists($url){ $f=fopen($url,"r"); if($f){ fclose($f); retu
我已经通过 Git 部署到 Azure 几个月了,没有出现重大问题,但现在我似乎遇到了一个无法克服的错误。 我创建了一个新的 Azure 网站,为正在开发的项目创建单独的预览链接。我在新站点上设置了
我已经通过flutter创建了一个App并完成了它,我想在flutter文档中阅读时进行部署。 我收到此错误: FAILURE: Build failed with an exception. * W
我在Windows 10中使用一些简单的Powershell代码遇到了这个奇怪的问题,我认为这可能是我做错了,但我不是Powershell的天才。 我有这个: $ix = [System.Net.Dn
我正在尝试使用 RapidJSON 解析从服务器接收到的数据。以下是收到的确切字符串: [ { "Node": "9478149a08f9", "Address": "172.17
我尝试为 ios 编译 OpenCV。我总是收到这些错误。我用不同版本的opencv试了一下,结果都是一样的。 我运行这个:python 平台/ios/build_framework.py ios_o
我在一台机器上做基本的发布/订阅,我的客户端是 StackExchange-Redis 的 C# 客户端,我在同一台机器上运行基于 Windows 的 Redis 服务器(服务器版本 2.8.4) 当
我有这段代码,但无法执行,请帮我解决这个问题 连接 connect_error) { die ("connection failed: " . $terhubung->connect_erro
我在 tomcat 上运行并由 maven 编译的 Web 应用程序给出了以下警告和错误。我可以在本地存储库中看到所有 JAR,但有人可以帮忙吗。 WARNING: Failed to scan JA
我正在 Windows 8 上使用 Android Studio 开发一个 android 应用程序,我正在使用一些 native 代码。突然间我无法编译我的 C 文件。当我运行 ndk-build
下面的代码对类和结构的成员进行序列化和反序列化。序列化工作正常,但我在尝试使用 oarch >> BOOST_SERIALIZATION_NVP(outObj); 反序列化时遇到了以下错误; 代码中是
如果我运行此命令“rspec ./spec/requests/api/v1/password_reset_request_spec.rb”,此文件中的所有测试都会通过。 但是,当我运行“rspec”时
我在尝试执行测试以使用 Protractor 上传文件时出错,我的代码是这个 it('it should be possible to upload a file', function() {
System.loadLibrary("nativefaceswap"); 当我运行我的应用程序时,我在 Android Studio 中发现了此类错误。在logcat中显示: java.lang.U
我希望有人能帮助我!使用任何方法或命令行的任何 SSL/HTTPS 调用均无效。 我在 Windows 10 中使用 Ubuntu Server 18.04 作为子系统。我的问题是昨天才开始出现的,因
通过删除这两个值将日期字段从 null=True 和 Blank=True 更改为 required 时,使用 db.alter 命令时遇到问题。 当以下行被注释掉时,迁移运行不会出现问题。
我第一次使用 Heroku 尝试创建应用程序(使用 SendGrid 的 Inbound Parse Webhook"和 Twilio SMS 通过电子邮件发送和接收 SMS 消息)。通过 Virtu
我正在将我的 swift 项目更新到 Xcode 7 上的 Swift 2.0。xcode 在构建项目时报告了以下错误: 命令/Applications/Xcode.app/Contents/Deve
在我的代码中,SSL 库函数 SSL_library_init() 没有按预期返回 1。我如何才能看到它返回了什么错误? 我在 SSL_library_init() 之后调用了 SSL_load_er
我正在尝试运行在以下链接中找到的答案: Asynchronously Load the Contents of a Div 但是当我这样做时,我会遇到我不太理解的错误。 我的代码: $(documen
我是一名优秀的程序员,十分优秀!