在hive 0.9中创建索引

时间:2013-01-29 20:59:16

标签: hadoop indexing hive

我正在尝试在Hive 0.9中创建表的索引。一个表有10亿行,另一个表有3000万行。我使用的命令是(除了创建表等)

  CREATE INDEX DEAL_IDX_1 ON TABLE DEAL (ID) AS 
  'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler'
  WITH DEFERRED REBUILD;

  alter index DEAL_IDX_1 ON DEAL rebuild;

  set hive.optimize.autoindex=true;
  set hive.optimize.index.filter=true;

对于30 Mill。行表,重建过程看起来没问题(映射器和减速器都完成),直到最后它打印

  Invalid alter operation: Unable to alter index.
  FAILED: Execution Error, return code 1 
  from org.apache.hadoop.hive.ql.exec.DDLTask

检查日志,并且出现错误

java.lang.ClassNotFoundException: org.apache.derby.jdbc.EmbeddedDriver"

不确定为什么遇到这个错误,但无论如何,我添加了derby-version.jar:

add jar /path/derby-version.jar

报告的错误已解决,但仍有另一个错误:

org.apache.hadoop.hive.ql.exec.FileSinkOperator: 
StatsPublishing error: cannot connect to database

不确定如何解决问题。我确实看到了hive / warehouse下创建的索引表。

对于十亿行表,这是另一个故事。映射器刚刚停留在2%左右。错误显示

FATAL org.apache.hadoop.mapred.Child: Error running child : 
java.lang.OutOfMemoryError: Java heap space 

我尝试强制执行最大堆大小以及max mapr内存(请参阅hive配置设置中某处提到的设置):

set mapred.child.java.opts =  -Xmx6024m
set mapred.job.map.memory.mb=6000;
set mapred.job.reduce.memory.mb=4000;

然而,这没有帮助。映射器仍会因为相同的错误而停留在2%。

1 个答案:

答案 0 :(得分:2)

我有一个类似的索引创建问题,并且在hive / warehouse中,但整个过程失败了。我的index_name是TypeTarget(你的是DEAL_IDX_1),经过多天尝试不同的方法,使index_name全部小写(typetarget)修复了这个问题。我的问题出在Hive 0.10.0上。

此外,找不到类和StatsPublishing问题是因为默认情况下,hive.stats.autogather已打开。在hive-site.xml中将其关闭(false)应该可以解决这些问题。

希望这有助于任何寻求快速修复的人。