【问题标题】:Why is reading from Redshift into Spark so slow?为什么从 Redshift 读取到 Spark 如此缓慢?
【发布时间】:2018-09-05 22:43:23
【问题描述】:

我在将数据从 AWS Redshift 读取到我的 Spark 集群时遇到问题。读取超时并导致火花作业失败。我正在使用以下内容将数据检索到数据框中:

def retrieveFromDate(date: String): org.apache.spark.sql.DataFrame = {
    val query = "tstamp >= '2018-01-01' and tstamp < '2018-01-02'"
    val predicates = Array[String](query)

    val props = new Properties()
    props.put("user", "username")
    props.put("password", "password")

    spark.read
        .jdbc(url=jdbcURL, 
              table="myschema.mytable", 
              predicates=predicates,
              connectionProperties=props)
}

以下查询直接在 SQL 中快速返回 2400 万行:

select * from myschema.mytable
WHERE tstamp >= '2018-08-01'
  AND tstamp < '2018-08-02';

在 Spark 中,当我对数据帧执行任何操作(包括 count)时,作业就会失败。

如果我提供额外的谓词,例如指定另一个 WHERE 子句,以便结果集非常小,一切正常。 当它直接在 SQL 中正常工作时,为什么这个查询在 spark 中这么慢?有什么办法可以将这么大的结果表从 redshift 加载到 spark 中吗?

我的开发 AWS EMR 集群包含一个 M4.xlarge 主节点和 2 个 M3.xlarge 工作节点。每个工作人员大约需要 15GB 内存和 8 个 cpu 内核。

【问题讨论】:

    标签: apache-spark


    【解决方案1】:
    >> The read is timing out and causing the spark job to fail
    

    谓词参数只有

    val query = "tstamp &gt;= '2018-01-01' and tstamp &lt; '2018-01-02'"

    因此,作为单个任务的结果,结果数据帧是“1”的分区,它拥有 2400 万个。它没有并行性。

    您能否更改并提供将 24M 数据分成多个块的谓词。那么,读取可以并行化吗?

    类似的,

    val query = Arry[String]("column >= value1 and column = value2 and column = value3 and column

    如果您不想提供所有谓词,请将 jdbc 方法更改为以下类型并提供 lowerBound、upperBound 和 numPartitions,它再次受制于该分区列中的值是否均匀分布在其范围内。

    public Dataset<Row> jdbc(String url,
                    String table,
                    String columnName,
                    long lowerBound,
                    long upperBound,
                    int numPartitions,
                    java.util.Properties connectionProperties)
    

    更多详情here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-19
      • 2011-05-03
      • 2017-09-01
      • 2015-05-04
      相关资源
      最近更新 更多