在Spark集群(Dataproc)上执行代码时,我遇到了OOM问题。
环境: 2节点群集,每个节点具有6G内存。 测试文件大小为20Gb。
这是我的代码:
from __future__ import absolute_import
import pyspark
sc = pyspark.SparkContext()
sc._jsc.hadoopConfiguration().set('fs.sftp.impl', 'org.apache.hadoop.fs.sftp.SFTPFileSystem')
data = sc.textFile("sftp://user:pass@54.23.12.100/data/tmp/test_tile.csv.gz")
data.saveAsTextFile("gs://data/tmp")
是否可以使用Spark集群将数据流式传输到GCS并为工作程序节点设置节流(缓冲区)以避免OOM错误?或者,如果还有其他解决方案可以从外部源(sftp)读取数据并将其持久保存到GCS中?
答案 0 :(得分:4)
使用Hadoop DistCp代替Spark将文件从SFTP服务器复制到GCS更合适。
此处是有关如何在Hadoop中配置SFTP支持的说明: https://stackoverflow.com/a/33878054/3227693。
答案 1 :(得分:3)
对于外部解决方案,您可以尝试使用rclone,它可以将数据从sftp同步到GCS。或者只是从sftp下载,然后使用gstuil复制到GCS。
最好是直接从gcs读取spark数据。
您仍然想从Spark中的sftp读取文件,您可能需要尝试使用它 Spark SFTP Connector Library