【发布时间】:2016-07-10 18:30:36
【问题描述】:
我在一个 hadoop 集群上工作,hortonworks 2.4 发行版。 我想在 Hive 表上进行 ACID 操作。这是我的声明:
CREATE TABLE myAcidTable (..)
CLUSTERED BY(myKey) INTO 1 BUCKETS
STORED AS ORC TBLPROPERTIES ('transactional'='true','orc.compress'='SNAPPY');
我根据具有相同结构的外部 Hive 表填充此表。
INSERT INTO myAcidTable
SELECT * FROM MyTmpTable;
这个操作效果很好:
将数据加载到表 MyAcidTable
表 myAcidTable 统计信息: [numFiles=1, numRows=4450, totalSize=42001, rawDataSize=0]
好的
我尝试通过 hive shell 查询这个表:
set hive.support.concurrency=true;
set hive.enforce.bucketing=true;
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
set hive.compactor.initiator.on=true;
set hive.compactor.worker.threads=3;
SELECT * FROM myAcidTable
WHERE myKey = 12;
但我有这个错误(即使状态似乎还可以):
好的
异常失败 java.io.IOException:java.lang.RuntimeException: 严重问题
当我查看日志时,我发现:
org.apache.ambari.view.hive.client.HiveErrorStatusException: H170 无法获取结果。 java.io.IOException: java.lang.RuntimeException: 严重问题
...
引起:java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException:delta_0000000_0000000 没有 从base_开始
这很奇怪,因为当我声明没有事务属性的表时,select 语句运行良好
CREATE TABLE myAcidTable (..)
CLUSTERED BY(myKey) INTO 1 BUCKETS
STORED AS ORC TBLPROPERTIES ('orc.compress'='SNAPPY');
SELECT * FROM myAcidTable
WHERE myKey = 12;
结果:
好的
12 ...
你知道去哪里看吗?感谢您的帮助。
完整的错误:
org.apache.hive.service.cli.HiveSQLException: java.io.IOException: java.lang.RuntimeExce
选项:严重的问题在 org.apache.hive.service.cli.operation.SQLOperation.getNextRowSet(SQLOperation.java:352) 在 org.apache.hive.service.cli.operation.OperationManager.getOperationNextRowSet(OperationManager.java:223) 在 org.apache.hive.service.cli.session.HiveSessionImpl.fetchResults(HiveSessionImpl.java:716) 在 sun.reflect.GeneratedMethodAccessor24.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:497) 在 org.apache.hive.service.cli.session.HiveSessionProxy.invoke(HiveSessionProxy.java:78) 在 org.apache.hive.service.cli.session.HiveSessionProxy.access$000(HiveSessionProxy.java:36) 在 org.apache.hive.service.cli.session.HiveSessionProxy$1.run(HiveSessionProxy.java:63) 在 java.security.AccessController.doPrivileged(Native Method) 在 javax.security.auth.Subject.doAs(Subject.java:422) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657) 在 org.apache.hive.service.cli.session.HiveSessionProxy.invoke(HiveSessionProxy.java:59) 在 com.sun.proxy.$Proxy22.fetchResults(Unknown Source) 在 org.apache.hive.service.cli.CLIService.fetchResults(CLIService.java:454) 在 org.apache.hive.service.cli.thrift.ThriftCLIService.FetchResults(ThriftCLIService.java:672) 在 org.apache.hive.service.cli.thrift.TCLIService$Processor$FetchResults.getResult(TCLIService.java:1557) 在 org.apache.hive.service.cli.thrift.TCLIService$Processor$FetchResults.getResult(TCLIService.java:1542) 在 org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39) 在 org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39) 在 org.apache.hive.service.auth.TSetIpAddressProcessor.process(TSetIpAddressProcessor.java:56) 在 org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:285) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745) 引起: java.io.IOException: java.lang.RuntimeException: 严重问题 org.apache.hadoop.hive.ql.exec.FetchOperator.getNextRow(FetchOperator.java:512) 在 org.apache.hadoop.hive.ql.exec.FetchOperator.pushRow(FetchOperator.java:419) 在 org.apache.hadoop.hive.ql.exec.FetchTask.fetch(FetchTask.java:143) 在 org.apache.hadoop.hive.ql.Driver.getResults(Driver.java:1737) 在 org.apache.hive.service.cli.operation.SQLOperation.getNextRowSet(SQLOperation.java:347) ... 24 更多原因:java.lang.RuntimeException:严重问题 在 org.apache.hadoop.hive.ql.io.orc.OrcInputFormat.generateSplitsInfo(OrcInputFormat.java:1115) 在 org.apache.hadoop.hive.ql.io.orc.OrcInputFormat.getSplits(OrcInputFormat.java:1142) 在 org.apache.hadoop.hive.ql.exec.FetchOperator.getNextSplits(FetchOperator.java:367) 在 org.apache.hadoop.hive.ql.exec.FetchOperator.getRecordReader(FetchOperator.java:299) 在 org.apache.hadoop.hive.ql.exec.FetchOperator.getNextRow(FetchOperator.java:450) ... 28 更多原因:java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException:delta_0000000_0000000 没有 以 base_ 开头 java.util.concurrent.FutureTask.report(FutureTask.java:122) 在 java.util.concurrent.FutureTask.get(FutureTask.java:192) 在 org.apache.hadoop.hive.ql.io.orc.OrcInputFormat.generateSplitsInfo(OrcInputFormat.java:1092) ... 32 更多原因:java.lang.IllegalArgumentException: delta_0000000_0000000 不以 base_ 开头 org.apache.hadoop.hive.ql.io.AcidUtils.parseBase(AcidUtils.java:154) 在 org.apache.hadoop.hive.ql.io.AcidUtils.parseBaseBucketFilename(AcidUtils.java:182) 在 org.apache.hadoop.hive.ql.io.orc.OrcInputFormat$FileGenerator.call(OrcInputFormat.java:725) 在 org.apache.hadoop.hive.ql.io.orc.OrcInputFormat$FileGenerator.call(OrcInputFormat.java:690) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) ... 3 更多
【问题讨论】:
-
您是否尝试在创建表之前而不是在查询之前设置这些值?
-
是的,我也将这些值更改到配置文件中,没有更改..