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

先說我認為什麼不是大數據開發

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

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

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

我認為什麼是大數據開發

1. 大數據開發需要的技能

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

已經為大家精心準備了大數據的系統學習資料,從Linux-Hadoop-spark-......,需要的小夥伴可以點擊進入

所以說,現在互聯網公司所指的大數據開發用到的工具是:hadoop,hive,hbase,spark,kafka等。

2. 大數據開發做的事情

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

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

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

PC互聯網時代,各門戶網站(比如:新浪,網易,搜狐)關注的是各自網站今天被打開了幾次(pv),今天有多少人(uv)訪問了網站。更複雜一點的比如:

頁面上某個按鈕或者某個連接有多少人點擊了幾次

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

移動互聯網時代,手機應用被用戶打開的次數和人數也是大家關注的重點,但是除此之外還多出了許多其他非常重要的數據,由於手機屏幕的限制,信息流成為了移動時代的主流。

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

3. 如何做這些事情

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

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

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

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

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

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

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

流程如下:

頁面,客戶端埋點(按照指定的欄位格式,在特定的時間把數據發送出去)

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

例如我的個人網站中,我用的百度統計來統計網站的用戶數,用戶只要打開我的網站就會有如下信息發送到百度的伺服器上:

其中: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點才計算完成,那就沒什麼意義了。再比如,大家應該都有體驗過:再手機上刷新聞的時候,你點了某一篇文章,再繼續刷新聞,後面很快會出來不少和前面點擊的那篇文章類似的文章,這就是根據你的點擊給你及時推薦你有更大可能點的東西。

數據的準確性。這個重要性不言而喻

數據的穩定性和容災。


推薦閱讀:
相關文章