我有一些事件日志数据在HDFS,在其原始格式,看起来是这样的:Impala时间戳与Hive不匹配 - 时区问题?
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中查询。通过执行Hive查询:INSERT INTO TABLE log SELECT * FROM log_stage
将log_stage
数据插入Hive/Impala 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'
的问题:在因帕拉查询时,时间戳是领先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小时。
似乎Impala正在采取已经在UTC的事件,错误地假设他们在美国/丹佛时间,并增加了7个小时。
您是否知道如何同步时间以便Impala表匹配Hive表?
这是一个梦幻般的答案。谢谢马特! –