大數據開發工程師須要掌握什麼技能?

最近發現有些同窗並不太瞭解大數據開發工程師這個職位,本身轉大數據開發也已經三年了,因此想簡單介紹一下什麼是大數據開發工程師,當前互聯網公司的數據開發究竟是什麼樣子的?和通常的java或者php工程師在工做上有什麼區別?php

聲明:本文僅表明我的觀點,有不一樣意見歡迎提出。另外本文對大數據開發工程師沒什麼參考價值~僅是我各人對這個職位作一個介紹。java

1 先說我認爲何不是大數據開發python

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

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

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

2 我認爲何是大數據開發web

大數據開發須要的技能redis

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

大數據開發工程師須要掌握什麼技能?
大數據開發工程師須要掌握什麼技能?

因此說首先,如今互聯網公司所指的大數據開發用到的工具是: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點才計算完成,那就沒什麼意義了.再好比,你們應該都有體驗過:再手機上刷新聞的時候,你點了某一篇文章,再繼續刷新聞,後面很快會出來很多和前面點擊的那篇文章相似的文章.這就是根據你的點擊給你及時推薦你有更大可能點的東西.

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

數據的穩定性和容災.

僅僅分享我的的一些小見解,雖不全面也不繫統,可是可以讓未接觸過的同窗瞭解一些大數據開發吧~

對大數據以及人工智能概念都是模糊不清的,該按照什麼線路去學習,學完往哪方面發展,想深刻了解,想學習的同窗歡迎加入大數據學習qq羣:458345782,有大量乾貨(零基礎以及進階的經典實戰)分享給你們,而且有清華大學畢業的資深大數據講師給你們免費授課,給你們分享目前國內最完整的大數據高端實戰實用學習流程體系 。從java和linux入手,其後逐步的深刻到HADOOP-hive-oozie-web-flume-python-hbase-kafka-scala-SPARK等相關知識一一分享!

轉載於:https://blog.51cto.com/14217196/2357658