我正在HDFS上的Hive中尝试一些简单的东西。问题是,当我运行"where子句"时,查询没有运行map reduce。但是,它运行map reduce for count(*),甚至group by子句。
以下是数据和查询结果:
创建外部表:Create External Table testtab1(id字符串,组织字符串)行格式分隔字段以","结尾存储为文本文件位置"/usr/ankuchak/testtable1";
简单选择*查询:
0:jdbc:hive2://>从testtab1中选择*;
15/07/01 07:32:46[min]:错误hdfs。KeyProviderCache:找不到密钥为[dfs.encryption.key.provider.uri]的uri来创建keyProvider!!好啊+---------------+---------------+--+
|testtab1.id|testtab1.org|
+---------------+---------------+--+
|ankur|idc|
|user|idc|
|其他人|ssi|
+---------------+---------------+--+
选择3行(2.169秒)
计数(*)查询
0:jdbc:hive2://>从testtab1中选择count(*);
查询ID=ankuchak_20150701073407_e7fd66ae-8812-4e02-87d7-492f81781d15作业总数=1正在启动作业1(共1个)编译时确定的reduce任务数:1要更改减速器的平均负载(以字节为单位):设置hive.exec.reducers.bytes.per.reducer=为了限制减速器的最大数量:设置hive.exec.reducers.max=为了设置恒定数量的减速器:设置mapreduce.job.reduces=01年7月15日07:34:08[HiveServer2后台池:线程-40]:错误mr.ExecDriver:纱线01年7月15日07:34:08[HiveServer2后台池:Thread-40]:WARN mapreduce。JobResourceUploader:未执行Hadoop命令行选项解析。实现Tool接口并使用ToolRunner执行应用程序以解决此问题。正在启动作业=Job_1435425589664_0005,跟踪URL=http://slc02khv:8088/proxy/application_1435425589664_0005/Kill命令=/scratch/hadop/hadoop/bin/hadoop作业-Kill作业_1435425589664_0005第1阶段的Hadoop作业信息:映射器数量:1;减速器数量:101年7月15日07:34:16[HiveServer2后台池:Thread-40]:WARN mapreduce。计数器:不赞成使用Grouporg.apache.hadop.mapred.Task$Counter。请改用org.apache.hadoop.mapreduce.TaskCounter2015-07-01 07:34:16291阶段1映射=0%,减少=0%2015-07-01 07:34:3831阶段1映射=100%,减少=0%,累计CPU 1.04秒2015-07-01 07:34:30102阶段1映射=100%,减少=100%,累计CPU 2.41秒MapReduce累计CPU总时间:2秒410毫秒已结束作业=Job_1435425589664_0005MapReduce作业发布:阶段-1:映射:1减少:1累计CPU:2.41秒HDFS读取:6607 HDFS写入:2成功MapReduce CPU总花费时间:2秒410毫秒OK
+------+--+
|_c0|
+------+--+
|3|
+------+--+
选择1行(23.527秒)
按查询分组:
0:jdbc:hive2://>按组织从testtab1组中选择组织、计数(id);
查询ID=ankuchak_20150701073540_5f20df4e-0bd4-4e18-b065-44c2688ce21f作业总数=1正在启动作业1(共1个)未指定减少任务的数量。根据输入数据大小估计:1要更改减速器的平均负载(以字节为单位):设置hive.exec.reducers.bytes.per.reducer=为了限制减速器的最大数量:设置hive.exec.reducers.max=为了设置恒定数量的减速器:设置mapreduce.job.reduces=01年7月15日07:35:40[HiveServer2后台池:线程63]:错误mr.ExecDriver:纱线01年7月15日07:35:41[HiveServer2后台池:Thread-63]:WARN mapreduce。JobResourceUploader:未执行Hadoop命令行选项解析。实现Tool接口并使用ToolRunner执行应用程序以解决此问题。正在启动作业=Job_1435425589664_0006,跟踪URL=http://slc02khv:8088/proxy/application_1435425589664_0006/Kill命令=/scratch/hadop/hadoop/bin/hadoop作业-Kill作业_1435425589664_0006第1阶段的Hadoop作业信息:映射器数量:1;减速器数量:101年7月15日07:35:47[HiveServer2后台池:Thread-63]:WARN mapreduce。计数器:不赞成使用Grouporg.apache.hadop.mapred.Task$Counter。请改用org.apache.hadoop.mapreduce.TaskCounter2015-07-01 07:35:47200第1阶段映射=0%,减少=0%2015-07-01 07:35:53494阶段1映射=100%,减少=0%,累计CPU 1.05秒2015-07-01 07:36:00799阶段1映射=100%,减少=100%,累计CPU 2.53秒MapReduce累计CPU总时间:2秒530毫秒已结束作业=Job_1435425589664_0006MapReduce作业发布:阶段-1:映射:1减少:1累计CPU:2.53秒HDFS读取:7278 HDFS写入:14成功MapReduce CPU总花费时间:2秒530毫秒OK
+-------+------+--+
|org|_c1|
+-------+------+--+
|idc|2|
|ssi|1|
+-------+------+--+
选择2行(21.187秒)
现在简单的where子句:
0:jdbc:hive2://>从testtab1中选择*,其中org='idc';
OK
+--------------+---------------+--+
|testtab1.id|testtab1.org|
+--------------+---------------+--+
+--------------+---------------+--+
未选择行(0.11秒)
如果你能给我一些建议就太好了。如果你需要这方面的进一步信息,请告诉我。
谨致问候,Ankur
Map作业正在您的上一个查询中发生。所以地图缩减并不是没有发生。但是,应该在上次查询中返回一些行。这里可能的罪魁祸首是,由于某种原因,它没有找到值"idc"的匹配项。检查您的表,并确保Ankur和user的组包含字符串idc。
试试这个,看看你是否得到任何结果:
Select * from testtab1 where org rlike '.*(idc).*';
或
Select * from testtab1 where org like '%idc%';
它们将抓取任何具有包含字符串"idc"的值的行。祝你好运
这里是最近修复的相同错误的详细信息。尝试验证您正在使用的版本