【发布时间】:2017-10-04 05:48:13
【问题描述】:
所以我有一个 scala 程序,它遍历图形并将数据逐行写入文本文件。它本质上是一个与 graphx 一起使用的边缘列表文件。
最大的减速实际上是创建这个文本文件,可能是它写入这个文本文件的数百万条记录。有没有一种方法可以让我以某种方式并行这个任务,或者通过某种方式将它存储在内存中或任何东西中以任何方式加快速度?
更多信息: 我正在使用一个 hadoop 集群来遍历一个图形,这是我的代码 sn-p 用于我的文本文件创建,我现在正在执行写入 HDFS:
val fileName = dbPropertiesFile + "-edgelist-" + System.currentTimeMillis()
val path = new Path("/home/user/graph/" + fileName + ".txt")
val conf = new Configuration()
conf.set("fs.defaultFS", "hdfs://host001:8020")
val fs = FileSystem.newInstance(conf)
val os = fs.create(path)
while (edges.hasNext) {
val current = edges.next()
os.write(current.inVertex().id().toString.getBytes())
os.write(" ".getBytes())
os.write(current.outVertex().id().toString.getBytes())
os.write("\n".toString.getBytes())
}
fs.close()
【问题讨论】:
-
看看这些在Scala中使用Akka的并行文件处理stackoverflow.com/questions/11576439/…
-
您想将其写入本地文件系统吗?还是您在使用 HDFS 等的集群上?
-
我投票结束这个问题,因为它太宽泛,无法回答!
-
我正在使用 hadoop 集群,但如果证明更快,我愿意将文件写入本地文件系统
-
您可能可以缩小您的问题范围。你能测量出什么是慢的吗?您是否写入压缩格式(例如 GZIP?切换到 Snappy 怎么样?)您是否将带宽饱和到 hadoop(如果您切换到 BufferedOutputStream 到本地文本文件怎么办?如果您即时压缩怎么办)?如果您手动尝试写入多个 hadoop 文件怎么办? ... 没有更多细节,我们有点不知所措。
标签: scala apache-spark file-writing spark-graphx