2017-01-18 7 views
3

파티션이있는 테이블에서 하이브 쿼리를 실행 중입니다.하이브 IllegalStateException 모호한 입력 경로

활동에서

선택 수 (*) 여기서 날짜 스탬프 = 2016년 8월 16일 쿼리

java.lang.IllegalStateException: Ambiguous input path hdfs://ip-172-29-1-53.us-west-2.compute.internal:8020/hive/dcm/activity/datestamp=2016-10-01/part-r-00000-41b9fc2f-101c-423a-901e-0f617c8fbd62.gz.parquet 
at org.apache.hadoop.hive.ql.exec.MapOperator.getNominalPath(MapOperator.java:454) 
at org.apache.hadoop.hive.ql.exec.MapOperator.cleanUpInputFileChangedOp(MapOperator.java:501) 
at org.apache.hadoop.hive.ql.exec.Operator.cleanUpInputFileChanged(Operator.java:1072) 
at org.apache.hadoop.hive.ql.exec.MapOperator.process(MapOperator.java:545) 
at org.apache.hadoop.hive.ql.exec.tez.MapRecordSource.processRow(MapRecordSource.java:83) 

Failure while running task:java.lang.RuntimeException: java.lang.RuntimeException: java.lang.IllegalStateException: Ambiguous input path hdfs://ip-172-29-1-53.us-west-2.compute.internal:8020/hive/dcm/activity/datestamp=2016-08-16/part-r-00000-1fd9aa5b-6e66-4bf9-b015-a940cbd6cc5a.gz.parquet 
at org.apache.hadoop.hive.ql.exec.tez.TezProcessor.initializeAndRunProcessor(TezProcessor.java:173) 
at org.apache.hadoop.hive.ql.exec.tez.TezProcessor.run(TezProcessor.java:139) 
at org.apache.tez.runtime.LogicalIOProcessorRuntimeTask.run(LogicalIOProcessorRuntimeTask.java:344) 
at org.apache.tez.runtime.task.TezTaskRunner$TaskRunnerCallable$1.run(TezTaskRunner.java:181) 
at org.apache.tez.runtime.task.TezTaskRunner$TaskRunnerCallable$1.run(TezTaskRunner.java:172) 
at java.security.AccessController.doPrivileged(Native Method) 
at javax.security.auth.Subject.doAs(Subject.java:422) 
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1709) 
at org.apache.tez.runtime.task.TezTaskRunner$TaskRunnerCallable.callInternal(TezTaskRunner.java:172) 
at org.apache.tez.runtime.task.TezTaskRunner$TaskRunnerCallable.callInternal(TezTaskRunner.java:168) 
at org.apache.tez.common.CallableWithNdc.call(CallableWithNdc.java:36) 
at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at java.lang.Thread.run(Thread.java:745) 

가 I 경로 실제로 partitions.I도 사용될 것으로 체크 한 다음과 같은 예외가 발생하지만

쪽모이 세공 도구 항아리가 파일을 열어 파일에 올바른 형식의 데이터가있는 것처럼 보입니다.

답변

0

이전에 실행 된 동적 파티션이있는 삽입 문이 기존 파티션에 삽입되었을 때와 같은 문제가 발생했습니다.

우리는 수동으로 파티션 메타 데이터를 정화 : 가능성이있는 손상된 메타 데이터 (파티션 정보)가 발생할 수 있다는 더 심각한 문제를 서비스를 복구하고 방지하기 위해

은 빠른 수정은 그 적용되었다. 즉, alter table xxxx drop partition (tag >= 'yyyyyyyy'); DDL을 실행하여 모든 파티션을 삭제합니다. (외부 테이블의 경우,이 어떤 HDFS 조작을 호출하지 않을 데이터는 손상 될 것이다..) 다음

과 :

msck 수리 테이블 명령을 실행 됨.

이 수정 프로그램을 적용한 후에도 해당 테이블에 대한 쿼리가 다시 정상적으로 처리되었습니다.

제 생각에 파티션 메타 데이터가 두 개 이상의 파티션이 동일한 경로를 가리키고 있습니다 (경로가 모호하다는 것을 나타 내기 위해).

하이브 쿼리를 실행하기 위해 실행 엔진은 먼저 기본 파일 시스템에 들어가기 전에 메타 데이터를 가져옵니다.