hadoop - Hive 索引无法重建 - DAG 由于顶点故障而失败

标签 hadoop indexing hive hiveql hortonworks-data-platform

我在 HDP2.2 上使用 Hive14,在 Hive 上建立索引时遇到问题。我可以创建一个索引。

create INDEX ix_key ON TABLE DbTest.Tbl_test(TEST_KEY)
as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' WITH DEFERRED REBUILD;

之后我将数据加载到表中并建立索引。

ALTER INDEX ix_key ON DbTest.Tbl_test REBUILD;

Hive 构建了索引,它运行良好,性能得到提升。现在想重建索引,总是报错:

INFO  : Session is already open
INFO  : Tez session was closed. Reopening...
INFO  : Session re-established.
INFO  : 

ERROR : Status: Failed
ERROR : Vertex failed, vertexName=Map 1, vertexId=vertex_1426585957958_2810_1_00, diagnostics=[Vertex vertex_1426585957958_2810_1_00 [Map 1] killed/failed due to:ROOT_INPUT_INIT_FAILURE, Vertex Input: Tbl_test initializer failed, vertex=vertex_1426585957958_2810_1_00 [Map 1], java.lang.NullPointerException
at org.apache.hadoop.hive.ql.exec.tez.DynamicPartitionPruner.initialize(DynamicPartitionPruner.java:135)
at org.apache.hadoop.hive.ql.exec.tez.DynamicPartitionPruner.prune(DynamicPartitionPruner.java:100)
at org.apache.hadoop.hive.ql.exec.tez.HiveSplitGenerator.initialize(HiveSplitGenerator.java:109)
at org.apache.tez.dag.app.dag.RootInputInitializerManager$InputInitializerCallable$1.run(RootInputInitializerManager.java:245)
at org.apache.tez.dag.app.dag.RootInputInitializerManager$InputInitializerCallable$1.run(RootInputInitializerManager.java:239)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1628)
at org.apache.tez.dag.app.dag.RootInputInitializerManager$InputInitializerCallable.call(RootInputInitializerManager.java:239)
at org.apache.tez.dag.app.dag.RootInputInitializerManager$InputInitializerCallable.call(RootInputInitializerManager.java:226)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
]
ERROR : Vertex killed, vertexName=Reducer 2, vertexId=vertex_1426585957958_2810_1_01, diagnostics=[Vertex received Kill in INITED state., Vertex vertex_1426585957958_2810_1_01 [Reducer 2] killed/failed due to:null]
ERROR : DAG failed due to vertex failure. failedVertices:1 killedVertices:1
Error: Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.tez.TezTask (state=08S01,code=2)

基表存在,我可以对其运行查询。索引表也存在。如果我在另一个表上创建一个新索引并运行重建命令,我会得到同样的错误。 我用直线和 CLI 试过了 - 错误总是一样的。

希望任何人都知道如何解决这个问题。

最佳答案

这似乎在动态分区修剪器中失败,您可以使用“hive.tez.dynamic.partition.pruning=false”将其关闭。您可能还想考虑在此处提交错误:https://issues.apache.org

关于hadoop - Hive 索引无法重建 - DAG 由于顶点故障而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30207217/

相关文章:

hadoop - 在 Hadoop 中读取 BZip2 文件

hadoop - Apache PIG入门,需要有关脚本的帮助

MySQL 唯一索引、索引和全文索引。全部一起还是一个就够了?

sql - 如何处理多个重叠的数据集?

java - 使用Eclipse调试多个hadoop jvm

hadoop - Hadoop与集群版本不同

hadoop - 执行错误,从org.apache.hadoop.hive.ql.exec.mr.MapRedTask返回代码2

hadoop - Airflow 失败 : ParseException line 2:0 cannot recognize input near

sql - 为什么列上的函数会阻止使用索引?

sql-server - SQL Server 自动索引调整功能是否会删除唯一索引?