hadoop - hive 查询速度慢,为什么(左半连接)?

标签 hadoop hive hiveql

我的 hive 查询挂起,我不知道为什么(使用 hadoop 0.20.1、hive 0.9)。

查询:

SELECT 
   a.field1 FROM table_1 a 
LEFT SEMI JOIN 
   (SELECT DISTINCT(usrId) FROM table_2 b 
       WHERE soemthing=true ORDER BY rand() limit 1000) random_user_ids 
WHERE a.usrId=random_user_ids.usrId

解释给我回复:

STAGE DEPENDENCIES:
  Stage-1 is a root stage
  Stage-2 depends on stages: Stage-1
  Stage-3 depends on stages: Stage-2
  Stage-0 is a root stage

数据集

  • 表内~200M 条目
  • table_1.usrId 与 table_1 的关系应约为 1:40,即上述查询应返回 1000*40=40000

观察结果:

  • 作业在最后第 3 阶段挂起,进度为 33%(reduce > sort),此时正在进行连接(连接结果约为 40000)
  • 除了速度慢之外,为什么reduce > sort是Stage-3的一部分?它应该只加入东西而不是订购任何东西
  • reducer 大小仅为 1(因为排序?),这几乎总是不好,因为它无法扩展。

如果您需要更多输入(例如更详细的 EXPLAIN 信息、更多集群信息),请告诉。

谢谢!

最佳答案

JOIN 条件应包含在 ON 子句中,而不是包含在 WHERE 子句中。

语法示例:

SELECT a.key, a.val
FROM a LEFT SEMI JOIN b ON (a.key = b.key)

关于hadoop - hive 查询速度慢,为什么(左半连接)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17596050/

相关文章:

hadoop - Sqoop 导入已成功完成。如何在 Hive 中查看这些表

hadoop - 将文本文件放入配置单元数据库

sql - Hive JOIN 中遇到的左右别名;没有任何不平等条款

hadoop - 配置单元错误 : compiling statement: FAILED: ParseException line 15:0 missing EOF at 'collection' near ''\n''

java - 处理自定义文件格式时,InputFormat 应该如何编码?

hadoop - 在hadoop上运行mahout的fpg算法作为集群模式

hadoop - 用Unicode表示法解析Hive DDL

hadoop - 是否可以创建具有文本输出格式的配置单元表?

hadoop - yarn [hadoop 2.2] location mapper or reducer log输出到哪里?

java - Hadoop 框架中使用的属性的完整列表