我在集群模式下在 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 运行时,它会失败。
让我知道我是否可以提供更多信息。