2014-09-24 46 views

回答

0

只要你运行一个普通的'select *',就会创建一个fetch任务,而不是一个mapreduce任务,它只是转储数据,因为它不需要做任何事情。然而,无论何时执行“选择列”,地图作业都会内部挑选该特定列并提供输出。

还有一个提交这个错误,使'选择列'查询运行没有mapreduce。查看这里的详细信息:https://issues.apache.org/jira/browse/HIVE-887

3

当这样一个简单的语句执行select * from tablename时,hive所做的仅仅是从存储在hdfs中的文件中获取数据,并将其以列状输出格式输出。基本上它产生一个像

hadoop fs -cat hdfs://schemaname/tablename.txt 
hadoop fs -cat hdfs://schemaname/tablename.rc 
hadoop fs -cat hdfs://schemaname/tablename.orc 

或无论您的表格的文件存储在任何格式。

如果您尝试选择列或向查询中添加where子句或在表上使用任何聚合,MR会出现明显原因。

+0

如果您有多个节点会怎么样?选择*然后运行MR? – eych 2016-10-21 18:52:56

+0

这就是HDFS的美丽。无论节点数量多少,它都会执行映射缩减作业。逻辑系统与物理系统分离。 – Neels 2016-10-25 18:23:12

+0

好吧,所以如果你的数据在节点间传播,但你仍然只做'SELECT *',那么它不会做一个减少地图工作,对吧? – eych 2016-10-25 20:08:32

相关问题