ORC файлы с Hive: java.io.IOException: два читателя - PullRequest
0 голосов
/ 03 июня 2019

У меня есть таблица кустов ACID с файлами в формате ORC.При попытке сжатия я получаю следующую ошибку: Task: ... exited : java.io.IOException: Two readers for ... Полная ошибка выглядит следующим образом:

2019-06-03 07:01:05,357 ERROR [IPC Server handler 2 on 41085] org.apache.hadoop.mapred.TaskAttemptListenerImpl: Task: attempt_1558939181485_29861_m_000001_0 - exited : java.io.IOException: Two readers for {originalWriteId: 143, bucket: 536870912(1.0.0), row: 3386, currentWriteId 210}: new [key={originalWriteId: 143, bucket: 536870912(1.0.0), row: 3386, currentWriteId 210}, nextRecord={2, 143, 536870912, 3386, 210, null}, reader=Hive ORC Reader(hdfs://HdfsNameService/tbl/delete_delta_0000209_0000214/bucket_00001, 9223372036854775807)], old [key={originalWriteId: 143, bucket: 536870912(1.0.0), row: 3386, currentWriteId 210}, nextRecord={2, 143, 536870912, 3386, 210, null}, reader=Hive ORC Reader(hdfs://HdfsNameService/tbl/delete_delta_0000209_0000214/bucket_00000, 9223372036854775807)]
    at org.apache.hadoop.hive.ql.io.orc.OrcRawRecordMerger.ensurePutReader(OrcRawRecordMerger.java:1171)
    at org.apache.hadoop.hive.ql.io.orc.OrcRawRecordMerger.<init>(OrcRawRecordMerger.java:1126)
    at org.apache.hadoop.hive.ql.io.orc.OrcInputFormat.getRawReader(OrcInputFormat.java:2402)
    at org.apache.hadoop.hive.ql.txn.compactor.CompactorMR$CompactorMap.map(CompactorMR.java:964)
    at org.apache.hadoop.hive.ql.txn.compactor.CompactorMR$CompactorMap.map(CompactorMR.java:941)
    at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54)
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:465)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:349)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:174)
    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:1730)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:168)

Эта таблица создается и обновляется с помощью merge, с помощью которой avro-файлы превращаются в таблицу orc.отсюда куча дельт, и delete_delta, и delta.

У меня есть много других таких таблиц, у которых нет этой проблемы.Эта таблица не имеет ничего необычного и на самом деле довольно мала (<100 тыс. Строк, 2,5 МБ на диске) и была обновлена ​​100 раз в прошлом месяце (20 тыс. Обновлено строк, 5 млн. Обновлено данных).DDL: </p>

CREATE TABLE `contact_group`(
  `id` bigint,
  `license_name` string,
  `campaign_id` bigint,
  `name` string,
  `is_system` boolean,
  `is_test` boolean,
  `is_active` boolean,
  `remarks` string,
  `updated_on_utc` timestamp,
  `created_on_utc` timestamp,
  `deleted_on_utc` timestamp,
  `sys_schema_version` int,
  `sys_server_ipv4` bigint,
  `sys_server_name` string,
  `load_ts` timestamp)
ROW FORMAT SERDE
  'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS INPUTFORMAT
  'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
LOCATION
  'hdfs://HdfsNameService/dwh/vault/contact_group'
TBLPROPERTIES (
  'bucketing_version'='2',
  'last_modified_by'='hive',
  'last_modified_time'='1553512639',
  'transactional'='true',
  'transactional_properties'='default',
  'transient_lastDdlTime'='1559522011')

Это происходит каждые несколько месяцев.Поскольку все остальное (select, merge) работает, исправление обычно заключается в создании второй таблицы (create table t as select * from contact_group) и переключении таблиц, но я хотел бы найти реальную основную причину.

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

Это на hdp3.1, с Hive 3.

...