我正在使用Apache Hive。我在Hive中创建了一个表(类似于外部表),并使用LOAD DATA LOCAL INPATH './Desktop/loc1/kv1.csv' OVERWRITE INTO TABLE adih;
命令将数据加载到同一个表中。
虽然我能够从hive表adih(例如select * from adih
, select c_code from adih limit 1000
等)中检索简单的数据,但当我要求涉及轻微计算的数据(例如select count(*) from adih
, select distinct(c_code) from adih
)时,hive会给我错误。
Hive cli输出如下链接-
hive> select distinct add_user from adih;
查询ID = latize_20161031155801_8922630f-0455-426b-aa3a-6507aa0014c6
总作业数= 1
启动Job 1 out of 1
未指定的reduce任务数。从输入数据大小估计:1
为了改变一个reducer的平均负载(以字节为单位):
设置hive.exec.reducers.bytes.per.reducer =
为了限制reducer的最大数目:
设置hive.exec.reducers.max =
为了设置一个固定数量的减速机:
设置mapreduce.job.reduces =
起始任务= job_1477889812097_0006,跟踪URL = http://latize-data1:20005/proxy/application_1477889812097_0006/
Kill命令=/opt/hadoop-2.7.1/bin/hadoop job -kill job_1477889812097_0006
[6]+ Stopped $HIVE_HOME/bin/hive
Hive停止显示任何超出"Kill Command"最后一行的日志/操作
不确定我在哪里出了问题(StackOverflow上的许多答案往往指向YARN配置(下面详细介绍环境配置)。我也有日志,但它包含超过30000个字符(堆栈溢出限制)
我的hadoop环境配置如下-1名称节点&1数据节点。每个都有20 GB的RAM和足够的ROM。为yarn.scheduler分配了13 GB的RAM。maximum-allocation-mb和yarn.nodemanager.resource。内存-mb每个与mapreduce.map.memory。mb设置为4gb, mapreduce.reduce.memory。mb设置为12gb。reducer的数量目前设置为默认值(-1)。此外,Hive被配置为使用MySQL数据库运行(而不是Derby)。
您应该为您的跟踪中显示的属性设置适当的值,
编辑hive-site.xml中的属性
<property>
<name>hive.exec.reducers.bytes.per.reducer</name>
<value>67108864</value></property>
看起来您已经设置了mapred.reduce.tasks = -1,这使得Hive参考其配置来决定reduce任务的数量。你得到一个错误,因为在Hive配置中缺少减少器的数量。尝试使用下面的命令设置它:
Hive> SET mapreduce.job.reduce =XX
根据官方文档:正确的减少数似乎是0.95或1.75乘以(<不。节点> * <不。>
我设法让Hive和MR工作-为所有涉及的进程增加内存配置:增加分配给YARN Scheduler的RAM和分配给YARN Nodemanager的最大RAM(在YARN -site.xml中),同时增加分配给Mapper和Reducer的RAM(在mapred-site.xml中)。还合并了@Sathiyan S和@vmorusu的部分答案-将Hive . exers .reducers.bytes.per.reducer属性设置为1gb的数据,这直接影响Hive使用的reducer的数量(通过应用其启发式技术)