1

我在集群模式下在 emr 上运行带有 databricks spark-redshift 2.0.1 的 spark 2.0.0,我的工作可以很好地处理一些简单的红移查询,例如

val easyQueryWorks =
  s"""
     |select
     |s.session_id, s.user_id,
     |e.ex_id, e.pre_id
     |from schem1.sessions s
     |join schem2.entries e
     |on s.session_id = e.session_id
     |where e.entry_id = 200
     """.stripMargin

这个结果集有大约 100,000 行。

当我尝试使用如下所示的查询运行它时:

val loadQuery =
  s"""
     |select
     |          e.created_at, e.session_id, e.entry_id,
     |          t1.user_id,
     |          t1.dim1, t1.dim2, t1.dim3,
     |          c.p_id, c.name,
     |          s.dim0,
     |          s.dim1, s.dim2, s.dim3, s.dim4,
     |          s.dim5, s.dim6, s.dim7,
     |          s.dim8, s.dim9, s.dim10
     |        from
     |          schem1.entries e
     |        left join
     |        (
     |         select
     |            session_id, MAX(id) as id
     |         from
     |           schem1.tool_events
     |         where
     |           value in (1,2,3,4)
     |         group by
     |           session_id
     |         ) t2
     |         on
     |           t2.session_id = e.session_id
     |        left join
     |          schem1.tool_events t1
     |        on
     |         t1.id = t2.id
     |        join
     |          schem2.cooks c
     |        on
     |          c.id = e.entry_id
     |        join
     |          schem1.sessions s
     |        on
     |         s.session_id = e.session_id
     |        where
     |          e.entry_id = 200
    """.stripMargin

(如果查询稍有错误请忽略。我只是替换了表和字段的名称)

大约 2 小时后(我们看到在 s3 中创建了一个临时目录,其中有一些文件),我们得到了这个异常:

FATAL CampaignJob:[Job Name -> MyJob] java.sql.SQLException:Amazon 错误设置/关闭连接:连接被对等方重置。java.sql.SQLException:Amazon 错误设置/关闭连接:连接由对等方重置。在 com.amazon.jdbc.communications.channels.MessagesSocketChannel.readMessages(Unknown Source) at com.amazon.jdbc.communications.channels.AbstractMessagesSocketChannel.read(Unknown Source) 原因:com.amazon.support.exceptions.GeneralException:亚马逊错误设置/关闭连接:对等方重置连接。... 2 更多

工作失败了。

它与简单查询的行数大致相同,我们知道在简单查询的情况下,红移访问很好。原始查询本身直接在 Redshift 本身上运行,运行大约需要 7-8 分钟。只是当它使用 databricks-redshift 工具通过 spark 运行时,它会失败。

让我知道我是否可以提供更多信息。

4

0 回答 0