Hive: получая ошибку при выполнении, выбирайте и отбрасывайте запросы Hive Partiton одновременно - PullRequest
0 голосов
/ 07 декабря 2018

Я получаю сообщение об ошибке при выполнении двух запросов одновременно.

Вот сценарии.

Я использую AWS EMR, и ниже приведена моя схема таблицы улья.

CREATE TABLE India (OFFICE_NAME STRING,
OFFICE_STATUS     STRING,
PINCODE           INT,
TELEPHONE   BIGINT,
TALUK       STRING,
DISTRICT    STRING,
POSTAL_DIVISION   STRING,
POSTAL_REGION     STRING,
POSTAL_CIRCLE     STRING
)
PARTITIONED BY (STATE   STRING)
ROW FORMAT SERDE       'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
STORED AS INPUTFORMAT  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
OUTPUTFORMAT   'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION  's3a://mybucket/'
TBLPROPERTIES (  'parquet.compression'='SNAPPY',   'transient_lastDdlTime'='1537781726');

Сначала запустите запрос,

SELECT count( distinct STATE ) FROM India;

Во время выполнения запроса запустите второй запрос

ALTER TABLE India DROP PARTITION (STATE='Delhi');

и получите эту ошибку в первом запросе

Error: java.io.IOException: java.lang.reflect.InvocationTargetException
at org.apache.hadoop.hive.io.HiveIOExceptionHandlerChain.handleRecordReaderCreationException(HiveIOExceptionHandlerChain.java:97)
  at org.apache.hadoop.hive.io.HiveIOExceptionHandlerUtil.handleRecordReaderCreationException(HiveIOExceptionHandlerUtil.java:57)
  at org.apache.hadoop.hive.shims.HadoopShimsSecure$CombineFileRecordReader.initNextRecordReader(HadoopShimsSecure.java:271)
  at org.apache.hadoop.hive.shims.HadoopShimsSecure$CombineFileRecordReader.next(HadoopShimsSecure.java:144)
  at org.apache.hadoop.mapred.MapTask$TrackedRecordReader.moveToNext(MapTask.java:200)
  at org.apache.hadoop.mapred.MapTask$TrackedRecordReader.next(MapTask.java:186)
  at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:52)
  at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:455)
  at org.apache.hadoop.mapred.MapTask.run(MapTask.java:344)
  at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)
  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:1698)
  at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Caused by: java.lang.reflect.InvocationTargetException
  at sun.reflect.GeneratedConstructorAccessor42.newInstance(Unknown Source)
  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
  at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
  at org.apache.hadoop.hive.shims.HadoopShimsSecure$CombineFileRecordReader.initNextRecordReader(HadoopShimsSecure.java:257)
  ... 11 more
Caused by: com.amazon.ws.emr.hadoop.fs.consistency.exception.FileDeletedInMetadataNotFoundException: File 'mybucket/India/state=Delhi/000000_0' is marked as deleted in the metadata
  at com.amazon.ws.emr.hadoop.fs.consistency.ConsistencyCheckerS3FileSystem.getFileStatus(ConsistencyCheckerS3FileSystem.java:440)
  at com.amazon.ws.emr.hadoop.fs.consistency.ConsistencyCheckerS3FileSystem.getFileStatus(ConsistencyCheckerS3FileSystem.java:416)
  at sun.reflect.GeneratedMethodAccessor17.invoke(Unknown Source)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:498)
  at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:191)
  at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:102)
  at com.sun.proxy.$Proxy34.getFileStatus(Unknown Source)
  at com.amazon.ws.emr.hadoop.fs.s3n2.S3NativeFileSystem2.getFileStatus(S3NativeFileSystem2.java:227)
  at com.amazon.ws.emr.hadoop.fs.EmrFileSystem.getFileStatus(EmrFileSystem.java:509)
  at org.apache.parquet.hadoop.ParquetFileReader.readFooter(ParquetFileReader.java:386)
  at org.apache.parquet.hadoop.ParquetFileReader.readFooter(ParquetFileReader.java:372)
  at org.apache.hadoop.hive.ql.io.parquet.ParquetRecordReaderBase.getSplit(ParquetRecordReaderBase.java:79)
  at org.apache.hadoop.hive.ql.io.parquet.read.ParquetRecordReaderWrapper.<init>(ParquetRecordReaderWrapper.java:75)
  at org.apache.hadoop.hive.ql.io.parquet.read.ParquetRecordReaderWrapper.<init>(ParquetRecordReaderWrapper.java:60)
  at org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat.getRecordReader(MapredParquetInputFormat.java:75)
  at org.apache.hadoop.hive.ql.io.CombineHiveRecordReader.<init>(CombineHiveRecordReader.java:99)
  ... 15 more

после того, как гуглил, я нашел эту ссылку

https://docs.aws.amazon.com/emr/latest/ManagementGuide/emrfs-files-tracked.html

Так есть ли возможность синхронизировать метаданные во время выполнения, или второй запрос не будет выполнен, пока не будет завершен первый статус.

Пожалуйста, помогите мне исправить эту проблему или любое предложение, установите любой параметр, который решит проблему.

1 Ответ

0 голосов
/ 07 декабря 2018

Путь разбиения и разбиения рассчитываются в самом начале.Ваши средства отображения начали читать файлы в расположении раздела, и в то же время вы удалили раздел, это вызвало удаление файлов, потому что ваша таблица управляется.Это вызывает время выполнения FileDeletedInMetadataNotFoundException Исключение.

Если вы все еще хотите удалить раздел во время чтения, попробуйте следующее:

Если вы сделаете свою таблицу ВНЕШНЕЙ, то DROP PARTITION не должны удалять файлы, они останутся, и это не должно вызвать исключение., и вы можете удалить расположение раздела из файловой системы позже.Или используйте политику жизненного цикла S3 для удаления старых файлов, как описано здесь .

К сожалению, уже запущенное задание не может обнаружить, что раздел Hive с файлами был удален, и изящно пропустить их чтение, поскольку метаданные Hive ужебыл прочитан, план запроса построен и сплиты могут быть уже рассчитаны.

Итак, решение состоит в том, чтобы удалить разделы Hive и отложить удаление файлов.

Кстати, когда вы добавляете разделы при запросе таблицы, все работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...