【问题标题】:Reading data from, and writing data to S3 in apache spark在 apache spark 中从 S3 读取数据并将数据写入 S3
【发布时间】:2016-11-23 09:24:39
【问题描述】:

我已经运行了两次相同的应用程序,一次是社区版(美国西部只有 6GB 内存),一次是一名司机和一名工人(60 GB 内存,eu-central),令人惊讶的是,社区版的应用程序在以下方面运行得更快将数据读写到 S3 中。

我没有找到任何解释这个糟糕的结果,因为我们的集群比社区版强大得多,我什至再次尝试了一个司机,一个工人(最多 60 名),这将比社区版花费更多。我们使用 S3 作为应用程序中的数据源,我们读取了一个 900 万行的 .csv 文件,对其进行一些分析,然后再次将结果写入 S3,因为我们已将存储桶安装到 bdfs。

 df=sqlContext.read.format('com.databricks.spark.csv').options(delimiter=',',header='true',inferschema='true').load("dbfs:/mnt/mount1/2016/rrdb_succesful_sales/*")

我用来写入 s3 的代码:

top_profit_product.coalesce(1).write.csv("dbfs:/mnt/mount2/tappalytics/profitability_report/weekly/top_profit_product",mode='overwrite',header=True)

我认为我的代码不会有任何问题,是吗?有什么建议吗?

【问题讨论】:

  • 结果文件的大小是多少?两种选择都需要多少时间? S3 文件在哪里?美国还是欧盟?
  • 我读的@Yaron S3位于新加坡,我写的S3位于法兰克福,社区版在美国西部,我的司机,工人在法兰克福。我要读取的 cvs 文件大约有 900 万行,使用我的真实集群可能需要 15 到 20 分钟才能读取,而社区版大约需要 6 到 8 分钟
  • 如果您在不同位置处理数据,那么您将承担长途链路的带宽开销、设置 HTTPS 连接的延迟并支付读取费用。避免。

标签: apache-spark amazon-s3 pyspark apache-spark-sql spark-dataframe


【解决方案1】:

这里是 databricks 文件系统,而不是 OSS Apache S3 客户端或 Amazon EMR 驱动程序,因此您必须接受它们。

对于 ASF 代码,s3a 客户端延迟来自:HTTP 请求数;带宽到 s3,在 HDD 上查找时间。 HTTPS 请求设置/拆卸非常昂贵;尽管您必须为您的数据源选择正确的选项,但最新的 s3a 客户端的搜索量要少得多。

如果您在与虚拟机所在位置不同的站点上使用 s3 存储桶,那将是您的瓶颈。您将受到带宽限制,按 MB 计费,最好跳过 500K 的数据,而不是通过中止活动的 HTTP GET 并设置新的 TCP 流来寻找新位置。

提示:s3a://landsat-pds/scene_list.gz 是一个很好的 20MB 测试源;托管在美国东部,AWS 为您的下载付费。 Spark 2 还添加了自己的 CSV 阅读器。

【讨论】:

  • 是的,你是对的,因为我使用的是入门包支持服务受限于数据砖
  • 如果去掉'inferschema=true' in read and coalesce(1) in write,你认为它会加速吗?
  • inferschema 触发对数据的全面扫描以获取架构。立即摆脱它。
猜你喜欢
  • 2017-08-07
  • 2018-05-13
  • 2018-11-09
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
  • 2018-09-04
  • 1970-01-01
  • 2020-04-13
相关资源
最近更新 更多