【问题标题】:Issue with joining tables in hadoop , where driver table has 10M records and child tables are left joined having 1M recordshadoop 中连接表的问题,其中驱动程序表有 10M 条记录,而子表保持连接有 1M 条记录
【发布时间】:2017-11-27 07:57:59
【问题描述】:

在 hadoop 中加入 3 个表时遇到问题,其中最左边的表有 10M 条记录,每个右边的表有 1M 条记录。最右边的表与父表左连接。

SELECT distinct Table1.cid,Table2.gdtyp,Table3.ager,Table3.edcd FROM (SELECT 
distinct(cid) FROM Table1  WHERE Table1.orgcd='T002' AND 
(Table1.cacttrdt>=19980101 AND Table1.cacttrdt<=20171120) limit 2) Table1 
LEFT JOIN Table2 Table2 ON (Table2.cid=Table1.cid)  LEFT JOIN Table3 Table3 
ON (Table3.cid=Table1.cid)

上述查询在 mapreduce 期间卡住了。 已将自动转换连接设置为 false。

【问题讨论】:

  • 它是否给出任何错误或异常??
  • 不,它没有给出任何错误,查询卡在一个阶段。有4个阶段,它总是卡在第三阶段
  • 您是否在作业运行时检查过作业状态?等待它返回任何错误。否则应用压缩技术、矢量化、mapjoin(如果可以使用)然后运行查询。
  • 是的,检查日志中没有错误,奇怪的是,从 hive CLI 执行相同的查询,但从直线或外部应用程序执行时卡住
  • 从记录有限的主表创建阶段表并在阶段表上运行相同的查询。如果查询成功运行,那么至少我们可以断定存在内存问题并使用其他一些方法。 . 如果查询不会被执行,那么肯定有其他问题。

标签: hadoop join hive


【解决方案1】:

矢量化查询执行提高了连接、扫描、聚合和过滤器等操作的性能,它一次以 1024 行的批次执行而不是每次单行执行。

在 Hive 0.13 中引入,此功能显着提高了查询执行时间,并且可以通过两个参数设置轻松启用:

设置 hive.vectorized.execution.enabled = true; 设置 hive.vectorized.execution.reduce.enabled = true;

与 Mapreduce 相比,还使用 ​​TEZ 作为执行引擎。

【讨论】:

  • 我们目前的要求是使用mapreduce引擎,尝试了上述属性,但查询仍然停留在之前的位置
  • 只是补充一下,相同的查询正在完成,而不会从 Hive CLI 卡住。
猜你喜欢
  • 1970-01-01
  • 2015-11-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-11
  • 1970-01-01
  • 2017-09-17
  • 2010-10-11
  • 1970-01-01
相关资源
最近更新 更多