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