【问题标题】:does EMR cluster size matters to read data from S3 using sparkEMR 集群大小对于使用 spark 从 S3 读取数据是否重要
【发布时间】:2020-05-19 20:03:12
【问题描述】:

设置:最新 (5.29) AWS EMR、spark、1 个主节点 1 个节点。

第 1 步。我使用 S3Select 解析文件并收集所有文件密钥以从 S3 中提取。 步骤 2. 使用 pyspark 在循环中迭代键并执行以下操作

火花 。读 .format("s3selectCSV") .load(键) .limit(超高值) .show(超高值)

花费了 x 分钟。

当我将集群增加到 1 个主节点和 6 个节点时,我没有看到时间差异。在我看来,我没有使用增加的核心节点。
其他一切,明智的配置都是开箱即用的默认设置,我没有设置任何东西。

那么,我的问题是集群大小对于使用 EMR、Spark 从 S3 读取和检查(比如记录或打印)数据是否重要?

【问题讨论】:

    标签: pyspark amazon-emr amazon-s3-select


    【解决方案1】:

    有几件事要记住。

    1. 你确定执行者确实增加了,因为 增加节点?或者您可以在 spark 提交期间指定它们 --num-executors 6。更多节点并不意味着没有执行器被旋转。
    2. 接下来,csv 文件的大小是多少?一些1MB?那么你不会看到太大的不同。确保至少有 3-4 GB

    【讨论】:

    • 是的,我确实在 spark-submit 命令中使用了 --num-executors 选项。它是 1(当核心为 1 时),当我创建一个核心数 >1 的新集群时,它确实更新为 4。
      csv 文件范围从 2MB 到 100MB。
    • 我尝试了以下方法,但我认为我的代码没有利用火花并行化。我们可以这样做吗?我厌倦了它,它完成得很快,但是,当我尝试加载并显示它没有显示任何东西来触发日志时。
      //s3fileKeysList lets say a list of s3 file keys are in this variable sc=sparkSession.SparkContext fileKeyListParallelized=sc.parallelize(s3fileKeysList) allData=fileKeyListParallelized.map (lambda file: spark .read .format("s3selectCSV") .load("s3://path/to/my/"+file) )
    • 你可以试试这个:val sqlContext = new SQLContext(sc) val df = sqlContext.read .format("com.databricks.spark.csv") .option("inferSchema", "true") .load("s3a://bucket/prefix/foldername/")github.com/databricks/spark-csv
    • 我没有使用数据块。无论如何,我可以得出结论,一般来说集群大小对于从 S3 读取确实很重要。在进一步调试时,对我来说关键是 parallelize。我可以看到时间减少了。
    【解决方案2】:

    是的,大小确实很重要。对于我的用例,sc.parallelize(s3fileKeysList)parallelize 原来是关键。

    【讨论】:

      猜你喜欢
      • 2020-03-25
      • 2019-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多