记一个信创ARM环境上的Hive时区问题

举报
Lettle whale 发表于 2024/04/25 20:30:58 2024/04/25
【摘要】 记录一个hive时区问题,夏令时,CST时区

问题现象  

  今天,运维同事发现最近一段时间Hive查询出来的结果,跟时间相关的字段值,时间都相差1个小时,似乎是用到了夏令时区,因为时间在3月10之前的显示都正常,3月10日之后,时间都不正确;

问题分析

  1、检查Hive在HDFS上的原始数据,使用“hive --orcfiledump -d”命令,文件中的时间戳是正确的;现场松了一口气,因为数据是正确的,只是查询显示不正确;

  2、在开发测试环境上运行的结果都是正确的,HDP内核代码应该没有问题,把焦点放在了时区上;

  3、Hive默认用的引擎是tez,在环境上把引擎修改为spark后,执行结果也是正确的;

  4、问题应该是在tez上,比对了一下生产环境和测试环境的参数,发现hive.tez.java.opts参数中,生产环境设置了 -Duser.timezone=CST,而测试环境没有设置

网上查了一下CST时区,发现它是个大坑,代表了4个时区。将这个参数去掉或者设置为Asia/Shanghai后,Hive的查询结果都正确。

CST可视为美国、澳大利亚、古巴或中国的标准时间。

CST可以为如下4个不同的时区的缩写:

美国中部时间:Central Standard Time (USA) UT-6:00

澳大利亚中部时间:Central Standard Time (Australia) UT+9:30

中国标准时间:China Standard Time UT+8:00

古巴标准时间:Cuba Standard Time UT-4:00

问题结论

  hive.tez.java.opts中不应该设置 -Duser.timezone=CST,不设置的话就使用的服务器时区

  当初信创环境设置了CST时区是因为从X86切换过来时,Hive参数都保留了原样,而切换到信创时是在3月10日之前,还没进入夏令时,所以当时没有出现这个问题。

  X86环境也没有这个问题,应该是X86环境将CST识别是中国标准时区;而在华为信创环境CST被识别成了其他的时区。

  以后千万不能再使用CST时区

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。