在hive0.9中创建索引

w7t8yxp5  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(429)

我正在尝试在配置单元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;

为了三千万。行表,重建过程看起来很正常(mapper和reducer都完成了),直到最后打印出来

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下创建的索引表。
对于10亿行表来说,这是另一回事。Map绘制者只是停留在2%左右。显示错误

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

我试图强制执行最大堆大小和最大mapr内存(请参阅某些地方提到的设置,但不在配置单元的配置设置中):

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

然而,这是没有帮助的。同样的错误,Map器仍然会停留在2%。

lx0bsm1f

lx0bsm1f1#

我在创建索引和在配置单元/仓库中遇到了类似的问题,但整个过程都失败了。我的索引名是typetarget(你的是deal\uidx\u1),在尝试了很多天的不同方法后,将索引名改成小写(typetarget)解决了这个问题。我的问题出在Hive0.10.0里。
另外,未找到类和statspublishing问题是因为默认情况下,hive.stats.autogather处于启用状态。在hive-site.xml中关闭(false)应该可以解决这些问题。
希望这有助于任何人寻找快速修复。

相关问题