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' 的任何行。祝你好运!
我正在 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' 的任何行。祝你好运!