【发布时间】:2016-02-06 23:26:00
【问题描述】:
我在 HDFS 中有一些事件日志数据,其原始格式如下所示:
2015-11-05 19:36:25.764 INFO [...etc...]
一个外部表指向这个 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'
为了性能,我们想在 Impala 中查询这个。 log_stage 数据通过执行 Hive 查询插入到 Hive/Impala Parquet 支持的表中:INSERT INTO TABLE log SELECT * FROM log_stage。这是 Parquet 表的 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)都设置为“美国/丹佛”,目前比 UTC 晚 7 小时。
Impala 似乎正在处理已经在 UTC 中的事件,错误地假设它们是在美国/丹佛时间,并增加了另外 7 个小时。
您知道如何同步时间以使 Impala 表与 Hive 表匹配吗?
【问题讨论】: