最近發現有些同學並不太了解大數據開發工程師這個職位,自己轉大數據開發也已經三年了,所以想簡單介紹一下什么是大數據開發工程師,當前互聯網公司的數據開發到底是什么樣子的?和一般的java或者php工程師在工作上有什么區別?
聲明:本文僅代表個人觀點,有不同意見歡迎提出。另外本文對大數據開發工程師沒什么參考價值~僅是我各人對這個職位做一個介紹。
1 先說我認為什么不是大數據開發
僅使用數據庫(關系型mysql,sqlserver,oracle等 非關系型 mongo redis等),盡管數據量達到千萬級別,億級別不是大數據開發。
從業務系統的數據庫中查詢數據然后產出報表不是大數據開。
端上(頁面,h5,手機native)埋點上報數據記錄到數據庫中不是大數據開發。
2 我認為什么是大數據開發
大數據開發需要的技能
到智聯上搜了一下大數據開發工程師
這個職位,隨便點了幾個職位,截圖如下:


所以說首先,現在互聯網公司所指的大數據開發用到的工具是:hadoop,hive,hbase,spark,kafka等.
大數據開發做的事情
精簡到一個詞語就是:統計
精簡到兩類指標就是:PV和UV
精簡到一句話就是:統計各種指標的PV和UV.
PC互聯網時代,各門戶網站(比如:新浪,網易,搜狐)關注的是各自網站今天被打開了幾次(pv),今天有多少人(uv)訪問了網站.更復雜一點的比如:
頁面上某個按鈕或者某個連接有多少人點擊了幾次.
某個頁面上的熱力圖(點擊地方越多,圖上顏色越重)
移動互聯網時代,手機應用被用戶打開的次數和人數也是大家關注的重點,但是除此之外還多出了許多其他非常重要的數據,由於手機屏幕的限制,信息流成為了移動時代的主流.
各大門戶網站非常關注自己的新聞客戶端中: 在信息流中曝光了多少篇文章, 其中有多少篇文章被用戶點擊了.每篇文章閱讀了長時間,因為用戶點擊的文章越多,使用客戶端的時間越長,各公司的廣告收入才越高,所以各公司想方設法推薦用戶喜歡的內容~
如何做這些事情
因為網站的瀏覽行為,手機客戶端中文章的曝光或者點擊這些數據非常大,基本以億為單位起,
所以傳統的把統計信息放到數據庫中的方式已經不能完成這項統計工作.(例如,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點才計算完成,那就沒什么意義了.再比如,大家應該都有體驗過:再手機上刷新聞的時候,你點了某一篇文章,再繼續刷新聞,后面很快會出來不少和前面點擊的那篇文章類似的文章.這就是根據你的點擊給你及時推薦你有更大可能點的東西. - 數據的准確性.這個重要性不言而喻.
- 數據的穩定性和容災.
僅僅分享個人的一些小看法,雖不全面也不系統,但是能夠讓未接觸過的同學了解一些大數據開發吧~歡迎留言.