接地氣,到底什麼才是大資料開發工程師?

Java團長_發表於2018-10-01

最近發現有些同學並不太瞭解大資料開發工程師這個職位,所以想簡單介紹一下什麼是大資料開發工程師,當前網際網路公司的資料開發到底是什麼樣子的?和一般的Java或者PHP工程師在工作上有什麼區別?


先說我認為什麼不是大資料開發

    

  • 僅使用資料庫(關係型mysql,sqlserver,oracle等 非關係型 mongo redis等),儘管資料量達到千萬級別,億級別不是大資料開發。

  • 從業務系統的資料庫中查詢資料然後產出報表不是大資料開。

  • 端上(頁面,h5,手機native)埋點上報資料記錄到資料庫中不是大資料開發。


我認為什麼是大資料開發


1. 大資料開發需要的技能


到智聯上搜了一下大資料開發工程師這個職位,隨便點了幾個職位,截圖如下:


640
640

所以說,現在網際網路公司所指的大資料開發用到的工具是:hadoop,hive,hbase,spark,kafka等。


2. 大資料開發做的事情


  • 精簡到一個詞語就是:統計

  • 精簡到兩類指標就是:PV和UV

  • 精簡到一句話就是:統計各種指標的PV和UV


PC網際網路時代,各入口網站(比如:新浪,網易,搜狐)關注的是各自網站今天被開啟了幾次(pv),今天有多少人(uv)訪問了網站。更復雜一點的比如:


  • 頁面上某個按鈕或者某個連線有多少人點選了幾次

  • 某個頁面上的熱力圖(點選地方越多,圖上顏色越重)


移動網際網路時代,手機應用被使用者開啟的次數和人數也是大家關注的重點,但是除此之外還多出了許多其他非常重要的資料,由於手機螢幕的限制,資訊流成為了移動時代的主流。


各大入口網站非常關注自己的新聞客戶端中:在資訊流中曝光了多少篇文章,其中有多少篇文章被使用者點選了。每篇文章閱讀了長時間,因為使用者點選的文章越多,使用客戶端的時間越長,各公司的廣告收入才越高,所以各公司想方設法推薦使用者喜歡的內容。


3. 如何做這些事情


因為網站的瀏覽行為,手機客戶端中文章的曝光或者點選這些資料非常大,基本以億為單位起。所以傳統的把統計資訊放到資料庫中的方式已經不能完成這項統計工作。(例如:wordpress部落格中,使用者每閱讀一篇文章,mysql中就會更新這篇文章的閱讀次數+1)


640


所以大資料是通過日誌來統計這些指標。

比如:後臺服務的日誌(apache,tomcat,weblogic,nginx日誌)


例如下圖,我的個人網站apache服務的access日誌。


日誌的url欄位中以 /年份(紅色部分)開頭行數就是這個網站文章頁被訪問的次數,以/category(藍色部分)開頭的行數就是這個網站分類目錄被訪問的次數。


640

當然我的這份日誌中是統計不了使用者數的,因為使用者數的統計需要在每條日誌上記錄當前使用者的唯一標識,然後再做個去重,去重後的數量就是使用者數,但是這裡沒有上報使用者的唯一標識。


那如何統計人數呢,一般網際網路公司會自己在頁面或者客戶端上生成一個使用者的唯一標識,然後主動上報到自己的日誌伺服器上。


流程如下:


  1. 頁面,客戶端埋點(按照指定的欄位格式,在特定的時間把資料傳送出去)

  2. 日誌接收伺服器,通常是nginx叢集專門用來接收日誌。


例如我的個人網站中,我用的百度統計來統計網站的使用者數,使用者只要開啟我的網站就會有如下資訊傳送到百度的伺服器上:


640

其中:hm.gif 是一個大小為0的圖片,只是為了把這條url記錄列印到nginx服務的日誌中。


我猜測BAIDUID這個欄位是百度用來幫我統計人數的。


上面主要說的是日誌的產生(端上產生,服務端接收),大資料開發工程師的工作就是從接收到的日誌中計算出來需要的指標,並且展示在頁面上,方便分析師檢視。(因為接收到的日誌格式不整齊還有一些垃圾資料,所以需要對日誌進行清洗(etl操作),再處理成各種資料倉儲表,方便後續統計。)


例如:


一行access日誌:

218.69.234.153 - - [23/Sep/2018:21:08:00 +0800] "GET /2018/09/python-scrapy-%e7%99%bb%e5%bd%95%e7%9f%a5%e4%b9%8e%e8%bf%87%e7%a8%8b/ HTTP/1.1" 200 12466

處理之後:為四列(ip,時間,http狀態,url),更方便統計。

218.69.234.153 2018-09-23 21:08:00 200 /2018/09/python-scrapy-%e7%99%bb%e5%bd%95%e7%9f%a5%e4%b9%8e%e8%bf%87%e7%a8%8b/

然後按照某種格式計算的行數就是次數。

按照某種規則,取出某個欄位,用這個欄位排重,就是UV(如果這個欄位是使用者唯一標識,就是人數)。

主要難點在於:


  • 日誌量太大(一般大點的網際網路公司,一個業務線每天的日誌都有幾個t,再大些的每天幾十t,幾百t也不奇怪),需要掌握大資料相關技術例如前面提到的hadoop,hive等。

  • 資料的及時性,從離線計算來說,一般每天零點,前一天的日誌都接收完畢,開始計算前一天的資料,幾點能計算完畢?要看各個公司各自的要求。

  • 資料的準確性。(這是重中之重,大資料開發的工作就是統計,統計的資料如果不準....)

  • 如果是實時計算,需要掌握實時相關技術。例如:每5分鐘網站的線上人數。

  • 監控監控監控:監控任務是否失敗,資料是否產出,產出的資料是否異常。

  • 容災容災容災:如果任務失敗如何補救。比如實時任務,由於某種原因13:00到14:00的資料沒有,如何把資料補回來。


大資料開發和一般業務開發的對比


在轉做大資料開發之前,一直在用Java作業務系統: 例如hr系統(考勤,薪資等),收費系統。


談談我個人對業務系統開發和大資料開發的理解:


業務系統:


一句話:對資料庫的各種增刪改查操作。

重點難點在於:


  • 對複雜業務的理解上(比如計算工資:基本工資,五險一金,全勤獎,高溫補貼,報銷,獎金,加班費.....等等都需要計算)。

  • 線上服務的穩定,比如facebook,淘寶等網站高併發的壓力下維持網站正常執行。


大資料開發


一句話:對字串的各種算數。


重難點在於:


  • 資料的及時性。例如實時資料中,想知道 12:00~12:10這10分鐘的使用者數,如果這個資料在晚上20點才計算完成,那就沒什麼意義了。再比如,大家應該都有體驗過:再手機上重新整理聞的時候,你點了某一篇文章,再繼續重新整理聞,後面很快會出來不少和前面點選的那篇文章類似的文章,這就是根據你的點選給你及時推薦你有更大可能點的東西。

  • 資料的準確性。這個重要性不言而喻

  • 資料的穩定性和容災。


宣告:本文僅代表個人觀點,有不同意見歡迎提出。另外本文對大資料開發工程師沒什麼參考價值,僅是我個人對這個職位做的一個介紹。雖不全面也不繫統,但是能夠讓未接觸過的同學瞭解一些大資料開發吧,歡迎留言。


Java團長

專注於Java乾貨分享

640

掃描上方二維碼獲取更多Java乾貨

相關文章