淺談管理數據平臺的一些想法

前言:

對于任何使用大數據技術的公司來說,大數據平臺特別是Hive來說,維護其高效快速的運行,對整個公司的運作來說至關重要。比如說:某個調度任務失敗了造成業務部門的某些報表無法正常產出;hive平臺最近速度下降了,造成業務跑sql,跑半天不出結果,進而發起投訴等等。對于數據平臺來說任何一個小的事故輕則造成公司的運行效率降低,重則使整個公司的業務運行異常(異常可能不會被立刻發現)等等,可以夸張點的說,數據將像電力資源一樣對整個公司至關重要,而數據平臺自然也是其中的“主角”。那我們要如何確保這個“主角”可以一直穩定的運行呢?廢話少說,下面就結合博主的一些經歷,簡單聊下數據平臺維穩的一些想法。特此聲明,本人菜鳥一枚,以下想法純屬胡扯,如有說的不對的地方,望各位大佬多多指教,也歡迎各位評論交流。

如何維穩?

針對如何維護數據平臺穩定的問題,我想拿一些問題從以下幾個層面說下自己的一些想法:底層表,SQL,調度任務。
問題場景一:業務頻繁反饋Hive平臺運行查詢慢。
針對以上問題,可能是由多方面的原因引起的,也可以有多種解決辦法。但是首先我想拋出的一個問題是:“如何證實業務所說的話?”凡事講究證據,特別是在這個DT的時代。所以首先我覺得應該有一些指標來量化Hive平臺運行的快慢,比如我們可以統計下每天Hive平臺執行SQL的平均時間。根據這些指標,我們知道Hive平臺的確變慢了,那如何去優化呢?業務我們可以加資源(加機器,加內存,換硬件設備如固態硬盤,調整集群參數等等)。但是我想說的還是我們要做的任何的優化的操作的依據是什么?或者說如果我們不知道要進行那種優化的操作,那我們能不能用一些方法排除掉我們不需要進行哪些方法去優化?用一些什么樣的方法呢?還是指標量化的方法,拿出有效的指標去論證你的觀點,而不是通過拍腦門來決定,特別是針對已有大量數據積累的場景下。

我們經常為業務做各種報表來輔助決策,那為什么我們不能為包含各類數據的數據平臺的來做一版“體檢表”來定位各種問題,進而為解決各種問題做決策呢?所以這篇文章我想傳達的一點是通過指標化,報表化的方法來幫助你做決策或者說定位問題,解決問題,也就是用數據分析的方法來維護數據平臺。

針對上面拋出的怎么優化的問題,說實話,我也沒有一套很好的策略說要怎么做怎么做。但是我結合下自己的工作經歷說下其中的一些想法吧。

底層表的優化

問題場景:數據倉庫長時間未進行過底層數據的整理,如果說在近期業務量未大幅增加的情況下,Hive平臺慢會不會是由于底層數據的“異常”造成的?
為了印證想法,開始著手先對數倉的底層表進行統計分析,主要從以下幾個維度去初步生成一份報表:“表名,表大小,小文件數,更新時間,分區數,近段時間表的查詢次數”。有了這張表我就對數倉底層的表數據一目了然,這里針對上面的問題,我們可以從“表的查詢次數”和“小文件數量”兩個維度進行分析,通過觀察最常用的一些表的小文件數的情況來判定是否是底層表小文件的原因造成Hive平臺慢的問題。當然有了這張報表,后續我們可以高效的完成各種需求:比如要節省硬盤空間,可以通過“表大小”,“表更新時間”字段進行高效的操作,以最低的成本(處理少量的表,節省大量的空間)獲取不錯的成果。當然后續該報表可以衍生出其他的字段如“是否包含V表”,“是否是分區表”等等,也可以和其他的數據關聯衍生出更多的新的字段,如根據表名是否可以和業務的sql_log表進行關聯,這樣你可以從公司,部門,個人三個層面得到對不同表的查詢次數,知道這些會不會對我們數倉的搭建有幫助?再放開腦洞一點,如果知道sql中每條sql對應的引用的表和查詢的用戶,可否利用算法建模來做一個推薦系統,比如用戶輸入sql的過程中可以自動推薦出接下來需要關聯的表;更甚者是否能從中提取出表和表之間的類似相關系數的指標去衡量各個表之間的關聯?最終如果說能再細分到字段和字段之間的聯系(比如我知道對于某個部門來說哪幾個字段一起出現的概率很大),那么我們就真的達到了利用數據挖掘技術來倒推出業務知識(業務知識體現在某組一起出現字段,但是為什么這組字段會一起出現,背后的業務含義我們并不知道,但是這又有什么關系,至少有了這些信息對我們搭建數倉來說已經足夠了。畢竟比如你讓搞數倉的去熟知業務和搞業務的去熟知數倉表是同等難度(這也是技術和業務之間的代溝),如果有了上面的一些信息,那就相當于搞數倉的搞懂了業務,這不正是技術人員所需要的)。

SQL優化

針對SQL的優化,我們可否利用報表去定位問題?
比如有時候,對于已經上線的調度任務,由于各種原因會去優化相關的sql。但是如何篩選這些sql以及如何快速的優化這些sql呢?自己的一個想法:以sql_log為基礎數據,首先篩選出目標類別的sql數據(調度任務的sql),之后可以以sql耗時為度量篩選簇耗時較多的sql進行優化,一條sql耗時慢可能和許多因素有關:如表相關的因素小文件數量、表大小等,sql語法的因素等。那么如何才能快速的確定到底是那些因素呢?正常的操作,也許我們需要將這條sql拿出來,然后一點點執行,一步步的分析問題原因。但是針對一些經驗化,固定化的操作可否轉化為相應的指標?比如針對優化調度任務sql的問題,如果我有一張報表里面包含以下字段“sql語句,sql耗時,sql中各表的大小,sql中各表的小文件數”等,那么我們是不是就可以直接排除小文件數量的問題,進而去驗證其他的原因。當然這張報表絕不可能停留在這個階段,后續根據排查問題的需要,你可以添加任何的指標字段(如針對Spark的任務能否將sql執行時你在SparkUI中看到的信息加進來等),來幫助排查問題,這樣的話,你甚至不需要執行一條sql就能定位到問題!

調度任務的優化

調度任務如何才能科學合理的規劃?也是一直再思考的問題。雖然市面上有各種調度任務框架如Azkaban等,他們有很好的功能來滿足調度的需求,但是這對于整個調度任務更高效的運行來說好像還有點差距。比如最近要上個新的調度任務,我要把它放到那個時間段去執行?某些調度任務經常性失敗的原因是什么?
嗯~~,我想表達的是無論是Azkaban也好還是其他的調度任務框架,我們能看到的只是單個的調度任務本身,并沒有一個更高的維度來描述一群調度任務運行的情況。針對上面的問題同樣可能的原因有很多中,那我們能否通過一些圖表來排除一些原因呢?如果我們有一張描述調度任務的圖表,橫軸代表的時間,縱軸代表的是平臺總的資源使用情況,如內存(如果能顯示并行的任務名稱更好)。那么我們就能知道任何的時間點,我們平臺的任務并行度以及對應的資源使用情況,這樣對我們新增的調度任務的添加或者說整個調度任務更科學的規劃會不會有更好的幫助?如果能在圖中的時間軸標注下每次發生的事故事件,那對我們分析事故會不會有一個更高層面的認識?有了更高維度的認識,也就會少犯很多錯誤,產生更少的事故。

總結:

以上只是自己腦洞大開的一些想法,比較亂,也是想到哪寫到哪,如果能對各位有幫助更好。但是只想傳遞一點:就是如何將工作中一些經驗性、重復性的工作給指標化,利用數據分析的思路來“高效”的工作,更好的去定位問題,解決問題,甚至預防問題的發生等。總之,在這個DT的時代,我們要利用好深表的數據,凡事盡可能的拿數據說話,而不是拍腦門做決定。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456296.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456296.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456296.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MongoDB誤刪表恢復

一、場景描述公司某工程師執行db.giveget_card.drop(),誤將線上表刪除。幸好每天都有做備份,這個時候就體現了備份的重要性了,哈哈哈。。。二、模擬故障過程備份數據大小:rs_test01:PRIMARY> use ycsb switched to db ycsb rs_…

linux下kill某個應用

linux命令行與桌面切換快捷鍵CtrAltF1,CtrAltF7 ps -e | grep abc sudo kill xyz 轉載于:https://www.cnblogs.com/cj2014/p/6512354.html

flask中數據庫的基本操作-增刪改查【備忘】

1.增加數據(就相當于增加一個實例對象) user1 User(namelong,email1006550026qq.com,password123456,role_id1) db.session.add(user1) db.session.commit() 2.修改數據 修改用戶表里面的name為long的姓名為:fang 首先查詢到名為…

兩個文件比較之comm命令

comm命令可用于兩個文件之間的比較。它有很多不錯的選項可用來調整輸出,以便我們執行交集、求差(difference)以及差集操作。? 交集:打印出兩個文件所共有的行。? 求差:打印出指定文件所包含的且互不相同的那些行。?…

【轉】error while loading shared libraries: xxx.so.x 錯誤的原因和解決辦法

原博客地址:http://www.cnblogs.com/Anker/p/3209876.html#undefined error while loading shared libraries: xxx.so.x" 錯誤的原因和解決辦法 今天在執行一個protobuf程序時,提示error while loading shared libraries: libprotobuf.so.8: cannot…

Flask學習記錄之Flask-SQLAlchemy

Flask-SQLAlchemy庫讓flask更方便的使用SQLALchemy,是一個強大的關系形數據庫框架,既可以使用orm方式操作數據庫,也可以使用原始的SQL命令. Flask-Migrate 是一個數據遷移框架,需要通過Flask-script庫來操作. 一.配置Flask-SQLAlchemy 程序使用的數據庫地址需要配置在SQLALCH…

Postico —— OS X 上的免費 PostgreSQL 客戶端

Postico 是 OS X 下的一個 PostgreSQL 客戶端管理工具。要求 OS X 10.8 或者更新版本。 文章轉載自 開源中國社區 [http://www.oschina.net]

hdu 1760 A New Tetris Game(搜索博弈)

題目鏈接&#xff1a;hdu 1760 A New Tetris Game 題意&#xff1a; 給你一個矩陣&#xff0c;0表示可以放格子&#xff0c;現在給你2*2的格子&#xff0c;lele先放&#xff0c;問是否能贏。 題解&#xff1a; 爆搜。具體看代碼 1 #include<bits/stdc.h>2 #define F(i,a,…

flask-restful接口

同flask一樣&#xff0c;flask-restful同樣支持返回任一迭代器&#xff0c;它將會被轉換成一個包含原始 Flask 響應對象的響應&#xff1a; class ArticleApi(Resource):def get(self):return {"hello":"world"},201&#xff0c;{"course":&quo…

如約而至 Nexus 6 的 Android 7.1.1 已經上線

經過近一個月的等待&#xff0c;Google 已正式為 Nexus 6 推送 Android 7.1.1 更新&#xff0c;本次更新版本號為 N6F26Q&#xff0c;可以點擊這里下載完整系統鏡像或者下載 OTA 升級包。 相比其他 Nexus 和 Pixel 設備&#xff0c;Nexus 6 已經發布了超過兩年之久&#xff0c;…

關于jedis2.4以上版本的連接池配置,及工具類

jedis.propertise 注意以前版本的maxAcitve和maxWait有所改變&#xff0c;JVM根據系統環境變量ServerType中的值 取不同的配置&#xff0c;實現多環境&#xff08;測試環境、生產環境&#xff09;集成。 redis.pool.maxTotalredis.pool.maxActive.${ServerType} redis.pool.max…

關于response格式轉換

調用圖靈機器人api實例&#xff1a; class RobotHandler(WebSocketHandler):def open(self):# print("WebSocket opened",self.request.remote_ip)robot_set.add(self)# 獲取websocket的發過來的信息def on_message(self, message):urlhttp://openapi.tuling123.com/…

微軟老兵 Antoine LeBlond 將正式離職

Antoine LeBlond (安東勒布朗)是微軟眾高管之一,他在微軟工作將近25年之久,然而他將在下周一,也就是他在微軟的第9000天正式離職. 在發給微軟眾同事的郵件中,勒布朗表示他希望"探索微軟之外的世界". 勒布朗在微軟Office部門度過了他在微軟的前20年時光,并與前微軟高管…

轉載——java synchronized詳解

文章來源&#xff1a;http://www.cnblogs.com/GnagWang/archive/2011/02/27/1966606.html轉載于:https://www.cnblogs.com/insist8089/p/6515885.html

Django中的F對象和Q對象

F對象 可以獲取到自己的屬性值實現自己的屬性自己的屬性關聯的復雜條件支持運算 Q對象 Q對象實際上是對條件的一個封裝封裝后支持邏輯運算與或非 &|~ 支持嵌套 例子 from django.db.models import Max, Avg, F, Q from django.http import HttpResponse from django.s…

總鏈接

字符集修改、Linux時間同步、調整文件描述符http://11815879.blog.51cto.com/11805879/1915276正則表達式&#xff1a;http://11815879.blog.51cto.com/11805879/1919777 文件系統inode與blockhttp://11815879.blog.51cto.com/11805879/1917068 文件類型與軟硬鏈接&#xff1a;…

Django模型關系

模型關系 1:1 一對一 &#xff08;一個身份證對應一個駕照&#xff09; 是使用外鍵唯一約束實現的對應最多只能有一個我們通常會在從表中聲明關系 主表&#xff0c;從表 主表數據刪除&#xff0c;從表數據級聯刪除從表數據刪除&#xff0c;主表不受影響誰聲明關系&#xff0c…

Android常用開源項目

Android常用開源項目 Android 2014-05-23 16:39:43 發布您的評價: 4.3 收藏 24收藏Android開源項目第一篇——個性化控件(View)篇包括ListView、ActionBar、Menu、ViewPager、Gallery、GridView、ImageView、ProgressBar、TextView、其他Android開源項目第二篇——工具庫…

Django中數據知識點歸納

Django對象的增刪改查 我們為了對django對象的增刪改查進行總結&#xff0c;先在model.py文件中創建類便于舉例 定義學生&#xff1a; class Students(models.Model):snamemodels.CharField(max_length20)sgendermodels.BooleanField(defaultTrue)sagemodels.IntegerField()…

面 試 細 節 一 點 通

面談的禮節是社會新人及求職者踏人社會工作前最重要且最需學習的課題&#xff0c;因為這關系到是否能順利踏入社會且尋找到一份合適滿意的工作。 一個社會新人除了應注意的面試禮節外&#xff0c;在開始進行面談之前及面談結束之后&#xff0c;還有不少必須注意的禮儀。 面談時…