Hive 不是 运行 Map Reduce with "where" 子句

Hive not running Map Reduce with "where" clause

我正在 HDFS 上的 Hive 中尝试一些简单的事情。 问题是当我 运行 a "where clause" 时,查询不是 运行 map reduce。然而,它运行 map reduce for count(*),甚至 group by 子句。

这是数据和查询结果:

创建外部 Table: 创建外部 TABLE testtab1 ( 编号字符串,组织字符串) 行格式分隔 以 ',' 结尾的字段 存储为文本文件 位置“/usr/ankuchak/testtable1”;

简单select * 查询:

0: jdbc:hive2://> select * 来自 testtab1;

15/07/01 07:32:46 [main]:错误 hdfs.KeyProviderCache:找不到带有密钥 [dfs.encryption.key.provider.uri] 的 uri 来创建密钥提供程序! 好的 +----------------+----------------+--+

| testtab1.id | testtab1.org |

+----------------+--------------+--+

|安库尔 | IDC |

|用户 | IDC |

|别人 | ssi |

+----------------+--------------+--+

3 行 selected(2.169 秒)

计数(*)查询

0: jdbc:hive2://> select 来自 testtab1 的计数 (*);

查询 ID = ankuchak_20150701073407_e7fd66ae-8812-4e02-87d7-492f81781d15 工作总数 = 1 启动 Job 1 out of 1 编译时确定的reduce任务数:1 为了改变减速器的平均负载(以字节为单位): 设置 hive.exec.reducers.bytes.per.reducer= 为了限制reducer的最大数量: 设置 hive.exec.reducers.max= 为了设置固定数量的减速器: 设置 mapreduce.job.reduces= 15/07/01 07:34:08 [HiveServer2-Background-Pool: Thread-40]: 错误 mr.ExecDriver: 纱线 15/07/01 07:34:08 [HiveServer2-Background-Pool: Thread-40]: WARN mapreduce.JobResourceUploader: 未执行 Hadoop 命令行选项解析。实现 Tool 接口并使用 ToolRunner 执行您的应用程序以解决此问题。 开始工作 = job_1435425589664_0005,跟踪 URL = http://slc02khv:8088/proxy/application_1435425589664_0005/ 杀戮命令= /scratch/hadoop/hadoop/bin/hadoop job -kill job_1435425589664_0005 Stage-1 的 Hadoop 作业信息:映射器数量:1;减速机数量:1 15/07/01 07:34:16 [HiveServer2-Background-Pool: Thread-40]: WARN mapreduce.Counters: Group org.apache.hadoop.mapred.Task$Counter 已弃用。使用 org.apache.hadoop.mapreduce.TaskCounter 代替 2015-07-01 07:34:16,291 Stage-1 map = 0%, reduce = 0% 2015-07-01 07:34:23,831 Stage-1 地图 = 100%,减少 = 0%,累计 CPU 1.04 秒 2015-07-01 07:34:30,102 Stage-1 地图 = 100%,减少 = 100%,累计 CPU 2.41 秒 MapReduce 总累计 CPU 时间:2 秒 410 毫秒 结束作业 = job_1435425589664_0005 启动的 MapReduce 作业: Stage-Stage-1:映射:1 减少:1 累积 CPU:2.41 秒 HDFS 读取:6607 HDFS 写入:2 成功 总 MapReduce CPU 花费的时间:2 秒 410 毫秒 好的

+------+--+

| _c0 |

+------+--+

| 3 |

+------+--+

1 行 selected(23.527 秒)

按查询分组:

0: jdbc:hive2://> select org, count(id) 来自 testtab1 group by org;

查询 ID = ankuchak_20150701073540_5f20df4e-0bd4-4e18-b065-44c2688ce21f 工作总数 = 1 启动 Job 1 out of 1 未指定减少任务的数量。根据输入数据大小估计:1 为了改变减速器的平均负载(以字节为单位): 设置 hive.exec.reducers.bytes.per.reducer= 为了限制reducer的最大数量: 设置 hive.exec.reducers.max= 为了设置固定数量的减速器: 设置 mapreduce.job.reduces= 15/07/01 07:35:40 [HiveServer2-Background-Pool: Thread-63]: 错误 mr.ExecDriver: 纱线 15/07/01 07:35:41 [HiveServer2-Background-Pool: Thread-63]: WARN mapreduce.JobResourceUploader: Hadoop 命令行选项解析未执行。实现 Tool 接口并使用 ToolRunner 执行您的应用程序以解决此问题。 开始工作 = job_1435425589664_0006,跟踪 URL = http://slc02khv:8088/proxy/application_1435425589664_0006/ 杀戮命令= /scratch/hadoop/hadoop/bin/hadoop job -kill job_1435425589664_0006 Stage-1 的 Hadoop 作业信息:映射器数量:1;减速器数量:1 15/07/01 07:35:47 [HiveServer2-Background-Pool: Thread-63]: WARN mapreduce.Counters: Group org.apache.hadoop.mapred.Task$Counter 已弃用。使用 org.apache.hadoop.mapreduce.TaskCounter 代替 2015-07-01 07:35:47,200 Stage-1 map = 0%, reduce = 0% 2015-07-01 07:35:53,494 Stage-1 地图 = 100%,减少 = 0%,累计 CPU 1.05 秒 2015-07-01 07:36:00,799 Stage-1 地图 = 100%,减少 = 100%,累计 CPU 2.53 秒 MapReduce 总累计 CPU 时间:2 秒 530 毫秒 结束作业 = job_1435425589664_0006 启动的 MapReduce 作业: Stage-Stage-1:映射:1 减少:1 累积 CPU:2.53 秒 HDFS 读取:7278 HDFS 写入:14 成功 总 MapReduce CPU 花费的时间:2 秒 530 毫秒 好的

+--------+------+--+

|组织 | _c1 |

+--------+------+--+

|数据中心 | 2 |

| ssi | 1 |

+--------+------+--+

2 行 selected(21.187 秒)

现在是简单的 where 子句:

0: jdbc:hive2://> select * 来自 testtab1 where org='idc';

好的

+------------+------------+--+

| testtab1.id | testtab1.org |

+------------+------------+--+

+------------+------------+--+

没有行 selected(0.11 秒)

如果你能给我一些指导就太好了。 如果您需要这方面的更多信息,请告诉我。

此致, 安库尔

Here,同一错误的详细信息,最近已修复。尝试验证您使用的版本

您上次查询中正在进行地图作业。所以这并不是说 map reduce 没有发生。但是,在您的最后一个查询中应该会返回一些行。这里可能的罪魁祸首是由于某种原因它没有找到值 "idc" 的匹配项。检查您的 table 并确保 Ankur 和用户的组包含字符串 idc.

试试看是否有结果:

Select * from testtab1 where org rlike '.*(idc).*';

Select * from testtab1 where org like '%idc%';

这些将抓取值包含字符串 'idc' 的任何行。祝你好运!