溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

SparkStreaming如何寫入Hive延遲

發(fā)布時間:2021-12-10 11:25:10 來源:億速云 閱讀:366 作者:小新 欄目:大數(shù)據(jù)

小編給大家分享一下SparkStreaming如何寫入Hive延遲,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!


背景:

Hive版本:1.2.1,Spark 版本:2.3.0, 實時程序邏輯比較簡單,從 Kafka 消費數(shù)據(jù),寫到 Hive 表。

數(shù)據(jù)量級上億,SparkStreaming 的 bath time 為 1 min, 在某一個時刻開始出現(xiàn)任務(wù)堆積,即大量任務(wù)處于 Queued 狀態(tài),卡在了某個 job,最長延遲時間為 1.7 h。

查看 job 狀態(tài)一直處于 processing, 但是發(fā)現(xiàn)該 job 寫 hive 的時間也就花費了 30 秒左右,但是該 job 最終執(zhí)行完的時間遠遠大于這個時間。

慢慢的,每一批次都要慢幾分鐘,出現(xiàn)堆積,最終造成數(shù)據(jù)大面積延遲。

分析:

寫入 Hive 的部分邏輯代碼,很簡單,如下:

// 上面 RDD 的轉(zhuǎn)換過程略...
.toDF
.write
.mode(SaveMode.Append)
.insertInto("ods.user_events")

通過查看 Hive 的源碼發(fā)現(xiàn):

SparkStreaming如何寫入Hive延遲閱讀上面的源碼,可以發(fā)現(xiàn)往 Hive 中寫數(shù)據(jù)的時候會在目標(biāo)表中(1.1 版本之后是默認(rèn)位置目標(biāo)表的文件夾)生成一個以.hive-staging 開頭的lin時文件夾,結(jié)果會在臨時文件夾存放。執(zhí)行完成后會,將臨時文件夾 rename,放到對應(yīng)的目標(biāo)表文件下。

這里的 rename 并不是直接修改 hive 元數(shù)據(jù)那么簡單。是在特定條件下才會執(zhí)行 mv file 的,否則還是會 copy file 的形式。

如果源目錄和目標(biāo)目錄是同一個根目錄,則會源目錄下的每個文件執(zhí)行復(fù)制操作。反之,執(zhí)行 remane 操作(只涉及 namenode 元數(shù)據(jù),不會有額外數(shù)據(jù)操作)。

源碼參考:https://github.com/apache/hive/blob/23db35e092ce1d09c5993b45c8b0f790505fc1a5/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java

hive 1.1 之后臨時文件就直接放在目標(biāo)表對應(yīng)的目錄下面了,所以最后執(zhí)行的 copy 操作,如果文件多或者數(shù)據(jù)量大的情況下,會很慢。

解決:

方案一:修改臨時目錄

<property>
  <name>hive.exec.stagingdir</name>  
  <value>/tmp/hive/.hive-staging</value>
  <description>hive任務(wù)生成臨時文件夾地址</description>
</property>
<property>        
  <name>hive.insert.into.multilevel.dirs</name>
  <value>true</value>
  <description>hive.insert.into.mulltilevel.dirs設(shè)置成false的時候,insert 目標(biāo)目錄的上級目錄必須存在;trued的時候允許不存在</description>
</property>

方案二:spark 直接落文件到 HDFS的對應(yīng)分區(qū)中 ,hive 表見外部表與數(shù)據(jù)進行關(guān)聯(lián)。這種就不依賴與 hive 了,減少中間環(huán)節(jié)。這是,盡可能的規(guī)避小文件,需要盡可能減少文件個數(shù)。

以上是“SparkStreaming如何寫入Hive延遲”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI