У меня есть некоторые данные EVENTLOG в HDFS, что в сыром виде, выглядит следующим образом:Временные метки Impala не совпадают с Hive - проблема с часовым поясом?
2015-11-05 19:36:25.764 INFO [...etc...]
An внешних точек таблицы в этом HDFS месте:
CREATE EXTERNAL TABLE `log_stage`(
`event_time` timestamp,
[...])
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
производительности, мы хотели бы запросить это в Импале. Данные log_stage
вставляются в таблицу с табличкой с табличкой «Улей/Импала», выполняя запрос «Куст»: INSERT INTO TABLE log SELECT * FROM log_stage
. Вот DDL для таблицы паркета:
CREATE TABLE `log`(
`event_time` timestamp,
[...])
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'
Проблема: при запросе в Impala, метки времени, 7 часов вперед:
Hive time: 2015-11-05 19:36:25.764
Impala time: 2015-11-06 02:36:25.764
> as.POSIXct("2015-11-06 02:36:25") - as.POSIXct("2015-11-05 19:36:25")
Time difference of 7 hours
Примечание: часовой пояс серверов (от /etc/sysconfig/clock
) все установлен в «Америка/Денвер», в настоящее время на 7 часов меньше UTC.
Похоже, что Impala принимает события, уже находящиеся в UTC, ошибочно полагая, что они находятся в Америке/Денвере, и добавляет еще 7 часов.
Вы знаете, как синхронизировать время, чтобы таблица Impala соответствовала таблице Hive?
Это фантастический ответ. Спасибо Мэтту! –