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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

使用split_size优化的ODPS SQL的场景

發布時間:2024/8/23 数据库 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用split_size优化的ODPS SQL的场景 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用split_size優化的ODPS SQL的場景

首先有兩個大背景需要說明如下:
說明1:split_size,設定一個map的最大數據輸入量,單位M,默認256M。用戶可以通過控制這個變量,從而達到對map端輸入的控制。設置語句:set odps.sql.mapper.split.size=256。一般在調整這個設置時,往往是發現一個map instance處理的數據行數太多。

說明2:小文件越多,需要instance資源也越多,MaxCompute對單個Instance可以處理的小文件數限制為120個,如此造成浪費資源,影響整體的執行性能(文件的大小小于塊Block 64M的文件)。

場景一:單記錄數據存儲太少

原始Logview Detail:

可以發現Job只調起一個Map Instance,供處理了156M的數據,但這些數據共有5千多萬的記錄(單記錄平均3個byte),花費了25分鐘。
此外,從TimeLine看可以發現,整個Job耗費43分鐘,map占用了超過60%的時間。故可對map進行優化。

優化手段:調小split_size為16M

優化之后的logview:

優化后,可以發現,Job調起了7個Map Instance,耗時4分鐘;某一個Map處理了27M的數據,6百萬記錄。(這里可以看出set split_size只是向Job提出申請,單不會嚴格生效,Job還是會根據現有的資源情況等來調度Instance)因為Map的變多,Join和Reduce的instance也有增加。整個Job的執行時間也下降到7分鐘。

場景二:用MapJoin實現笛卡爾積

原始logview:

可以發現,Job調起了4個Map,花費了3個小時沒有跑完;查看詳細Log,某一個Map因為笛卡爾的緣故,生成的數據量暴漲。
綜合考慮,因為該語句使用Mapjoin生成笛卡爾積,再篩選符合條件的記錄,兩件事情都由map一次性完成,故對map進行優化。

策略調低split_size
優化后的logview:
![]

優化后,可以看到,Job調度了38個map,單一map的生成數據量下降了,整體map階段耗時也下降到37分鐘。
回頭追朔這個問題的根源,主要是因為使用mapjoin笛卡爾積的方式來實現udf條件關聯的join,導致數據量暴漲。故使用這種方式來優化,看起來并不能從根本解決問題,故我們需要考慮更好的方式來實現類似邏輯。

?

一站式開發者服務,海量學習資源0元起!
阿里熱門開源項目、機器學習干貨、開發者課程/工具、小微項目、移動研發等海量資源;更有開發者福利Kindle、技術圖書幸運抽獎,100%中--》https://www.aliyun.com/acts/product-section-2019/developer?utm_content=g_1000047140

原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。

總結

以上是生活随笔為你收集整理的使用split_size优化的ODPS SQL的场景的全部內容,希望文章能夠幫你解決所遇到的問題。

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