日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

flink写入hive的时区问题

發(fā)布時間:2023/12/31 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 flink写入hive的时区问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

概述

本文主要對[3]進行復現(xiàn)和闡述

環(huán)境版本

組件版本
Hadoop3.1.2
Hive2.3.6
Flink1.12.0
Zookeeper3.6.0

#####################################################################################################################

本文流水線觸發(fā)條件

我們目前接觸到的有下面兩種:

環(huán)境觸發(fā)計算條件(為了方便論述,這里忽略遲到數(shù)據(jù)等)

watermark寫入hive分區(qū)

watermark?>?toMills(partTime)?+?commitDelay
watermark與window計算[4]watermark >= window_end_time?

本文論述的是第一種

百度上常見的是表格中第二種

#####################################################################################################################

時區(qū)機制

Flink源碼中的toMills并不是jdk中的

java.time.Duration.toMillis()

兩者不是一個東西,不要搞混.

?

上述表格中的toMills會把傳入的創(chuàng)建hive分區(qū)的時間戳partTime誤當做UTC時間(作為輸入),

然后+8小時轉化為東八區(qū)的時間toMills(partTime).

整理如下:

?使用的數(shù)據(jù)來自被Flink誤當做進一步轉化為
watermark東八區(qū)UTC時區(qū)
partTime(創(chuàng)建hive分區(qū)的時間)東八區(qū)UTC時區(qū)

toMills(partTime)=partTime+8:00

所以這就尷尬了,時區(qū)失配,導致無案發(fā)觸發(fā)Partition Commit(講人話就是Flink已經寫入Sink的數(shù)據(jù)在Hive中看不到).
場景舉例:

16:23:48我新建了一個hive表(當然也就等于是新建了hive分區(qū))

16:26:25時我去hive表格中查看數(shù)據(jù),結果一條都沒有.

為啥呢?

根據(jù)上述表格,我建立hive中表格fs_table的時間,被flink加了8小時,需要當前寫入的數(shù)據(jù)的時間戳生成的watermark

大于0:23:48(16:23:48+8:00)以后才能看到

因為沒有滿足表格中的水位線觸發(fā)條件,所以無法觸發(fā)Hive的Partition Commit,

最終導致一個奇怪的現(xiàn)象:

Flink明明已經寫入Sink的數(shù)據(jù),在Hive的fs_table中看不到

#####################################################################################################################

實驗驗證

口說無憑,我們來做一個對照實驗

步驟實驗組對照組備注

創(chuàng)建Hive表格fs_table

創(chuàng)建Hive表格fs_table?
運行StreamingWriteHive_bug.java運行StreamingWriteHive.java對照組的水印加了8小時

select * from fs_table;

select * from fs_table;?
Hive的fs_table中無結果Hive的fs_table中一大堆結果?

?

#####################################################################################################################

?

Reference:

[1]Hive分區(qū)和分桶區(qū)別

[2]重要|flink的時間及時區(qū)問題解決

[3]flink教程-flink 1.11 使用sql將流式數(shù)據(jù)寫入hive

[4]Flink EventTime和Watermarks原理結合代碼分析(轉載+解決+精簡記錄)

[5]踩坑記 | Flink 天級別窗口中存在的時區(qū)問題

[6]Hive創(chuàng)建二級分區(qū)表

總結

以上是生活随笔為你收集整理的flink写入hive的时区问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。