美文网首页docker容器DataX
DataX date类型数据异常(docker环境时区问题导致)

DataX date类型数据异常(docker环境时区问题导致)

作者: Victor_bigdata | 来源:发表于2019-11-25 20:26 被阅读0次

    背景

    • Windows本地和阿里云服务器中使用datax同步txtfile文件到mysql时,date类型数据无差异
    • Docker容器中使用会出现同步完数据时间戳类型数据相差8小时的问题(docker容器时区已通过cp 文件夹的方式解决,容器内执行date命令可正常获取到时间)

    容器时区不对

    root@119bbbba68e4:/# date
    Mon Nov 25 12:01:06 UTC 2019
    root@119bbbba68e4:/# date -R
    Mon, 25 Nov 2019 12:01:42 +0000
    root@119bbbba68e4:/# date +"%Z %z"
    UTC +0000
    

    docker容器设置时区

    # 打镜像时cp相应文件,或
    RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
    # 直接挂载相应文件夹(注意系统类型)
    docker run  追加-v /etc/localtime:/etc/localtime:ro 
    

    再通过java去获取时区

    # 通过java打印输出
    System.out.println(TimeZone.getDefault()); //输出当前默认时区
    

    datax在linux上获取时区步骤:其实底层还是通过jvm去获取的

    1. 如有环境变量 TZ设置,则用TZ中设置的时区
    2. 如1没有,则在 /etc/sysconfig/clock文件中找 "ZONE"的值
    3. 如2都没有,就用/etc/localtime 和 /usr/share/zoneinfo 下的时区文件进行匹配,如找到匹配的,就返回对应的路径和文件名。

    解决办法

    彻底解决容器时区问题

    那就彻底解决容器时区问题,复制宿主机或挂载出时区相关文件

    仅解决datax的时区问题

    运行datax时指定时区(最省事)或获取参照 datax/conf/core.json里面的时区配置和服务器不同导致的数据异常去修改时区(笔者这边是一致的,还是有date类型数据异常的问题)

    python2 ${datax_path}/bin/datax.py -p "-Duser.timezone-GMT+8"
    

    参考

    相关文章

      网友评论

        本文标题:DataX date类型数据异常(docker环境时区问题导致)

        本文链接:https://www.haomeiwen.com/subject/vdnqwctx.html