只有光頭才能變強。文本已收錄至個人GitHub倉庫,歡迎Star:https://github.com/ZhongFuCheng3y/3ygit
這篇文章主要是入門大數據,不涉及到高深的知識點和理論,我相信每一個人都看得懂。若是文章有錯誤的地方,不妨在評論區友善指出~github
我有的時候給外行人講解什麼是數據庫,就經常用Excel來舉例子(由於大多數人認識什麼是Excel)。在知乎有一個相似的題目《有excel了要數據庫幹啥?》,你們能夠去看看:數據庫
其實很大一部分緣由就是:Excel能處理的數據量遠遠沒有數據庫得多。因爲咱們互聯網產生的數據是很是很是多的,因此咱們通常選擇數據庫來存儲數據。服務器
Excel只有104w行,多了加載不進去的 ---- @知乎 EamonLiao
衆所周知,咱們能存多少數據,是取決於咱們硬盤的大小的。好比,個人磁盤的大小就256GB(實際能存儲的大小是沒有256GB的,但這裏我就不展開了),這意味着我這電腦只能存儲比256GB要小的數據。網絡
爲了可以更好地管理計算機的數據(訪問和查找變得更加簡單),咱們就有了文件系統。框架
有了文件系統,已經能夠存儲數據了(很方便咱們去獲取),那爲何還會有數據庫呢?分佈式
文件系統存在如下缺點: 數據共享性差,冗餘度大; 數據獨立性差工具
數據庫系統實現總體結構化,這是數據庫系統與文件系統的本質區別。 -----《數據庫系統概論》oop
數據庫其實就是爲了針對特定類型數據處理而設計的系統,而文件系統則可看做通用型的數據存儲系統 @知乎 吳穗榮性能
再回到大數據上,大數據就看名字咱們就知道:數據量很大。大到什麼程度呢?一塊普通的硬盤不能將一個文件存儲下來。
那我還想將這個文件存下來,怎麼辦呢?方案其實很簡單(說白了一個是垂直伸縮,一個是水平伸縮):
多買幾塊硬盤,組成一個更大的「硬盤」,但願能容納更多的數據。
把這個文件切開幾份,存到不一樣的硬盤中
若是是普通的用戶,確定選擇的是多買一塊硬盤,升級硬件啊。可是互聯網公司就不這樣幹,他們就選擇將一個文件切分紅幾份,放到不一樣的服務器中。爲何?
綜上所述,目前互聯網企業中都是選擇水平伸縮在一個系統中添加計算機來知足不斷增加的用戶量和支撐數據的平穩運行。
隨着數據量愈來愈大,在一臺機器上已經沒法存儲全部的數據了,那咱們會將這些數據分配到不一樣的機器來進行存儲,可是這就帶來一個問題:不方便管理和維護
因此,咱們就但願有一個系統能夠將這些分佈在不一樣操做服務器上的數據進行統一管理,這就有了分佈式文件系統
在使用HDFS的時候是很是簡單的:雖然HDFS是將文件存儲到不一樣的機器上,可是我去使用的時候是把這些文件當作是存儲在一臺機器的方式去使用(背後倒是多臺機器在執行):
上面咱們使用HDFS做爲分佈式文件系統,已經能夠把數據存到不一樣的機器上(或者在不一樣的機器上讀取到數據)。能夠經過簡單命令行的方式對文件的簡單的存取。
如今呢,因爲數據量是很是大的,分散到不一樣的機器上。咱們想要對數據進行處理,咱們確定會有一段寫好的程序。處理的方式有兩種:
選哪一個?咱們通常會採用」程序到數據所在的地方執行「,由於在大數據裏邊咱們的數據量很大,若是要把機器A/B/C
的數據輸入到機器D
上,這樣不划算。
因此咱們會將程序分別放到機器A/B/C
上處理,原本程序就很是小,放到別的機器上是輕輕鬆鬆的。還可使用機器A/B/C
的資源作運算,這就很合適了。
「將數據傳遞給程序」這種就是所謂的「移動存儲到計算」,而「程序到數據所在的地方執行」這種就是所謂的「移動計算到存儲的觀念」。
在大數據的領域裏, 移動計算比移動數據更划算。MapReduce就是這樣乾的:
在剛聽到「大數據」這個詞的時候,可能有的人會想問:所謂大數據,那數據是從哪裏來的呢?
簡單來講能夠歸類爲三類:
一、 爬蟲應該很好理解,就是經過網絡爬蟲獲取外部數據,將這些數據本身存儲起來。不少的比價網站就是爬取各類電商網站的數據,而後比較各個網站的數據後獲得結果。自己它們網站自己是沒有這個數據的,這個數據是從別人那爬過來的。
二、數據庫原本就已經存儲了咱們的數據,而咱們要作的只是把數據庫的數據導入咱們的大數據平臺那兒,讓數據可以獲得更好的分析。
三、日誌這塊其實我更多想說的是打點(埋點)這塊。有的人會把這埋點和日誌的概念分開,只是我把它給合在一塊兒叫「日誌」。日誌有用戶行爲日誌(埋點),也有系統的運行產生的日誌。用戶行爲日誌這塊說白了就是:從你進去某個APP的一刻開啓。幾乎你全部的操做都會被記錄下來(點了某個tag、在某個tag停頓了多少秒)。猜你喜歡這類的系統就是根據你以往行爲來對進行推薦。
好了,如今咱們有不一樣的地方收集到數據,咱們要最終要作的就是把這個數據彙總到一塊兒來進行存儲和分析。
因而咱們就須要將日誌、數據庫、爬蟲這些不一樣數據源的數據導入到咱們的集羣中(這個集羣就是上面提到的,分佈式文件系統(HDFS),分佈式計算系統)。
因爲數據源的不一樣,因此會有多種的工具對數據進行導入。好比將日誌的數據收集咱們會有Flume,從數據庫同步咱們會有Sqoop。這也就是所謂的ETL(萃取「extract」、轉置「transform」、加載「load」)
ETL是將 業務系統的數據通過抽取、清洗轉換以後加載到數據倉庫的過程,目的是將企業中的分散、零亂、標準不統一的數據整合到一塊兒,爲企業的決策提供分析依據。
(注:不要被上面的Sqoop、Flume 這樣的名詞給嚇着了,其實就是現有的成熟的框架技術)
咱們把全部的數據收集起來,把這個存儲數據的地方叫作數據倉庫。基於數據倉庫咱們統計能各類的指標,基於這些指標能夠指導咱們是否要作一個需求或決策。
好比說:如今咱們要對APP的首頁改版了,但不知道用戶是否能接受此次的改版。因而咱們就能夠先對一少部分的用戶作實驗(這一部分的用戶看到的是改版後的首頁),咱們根據這一部分用戶的行爲來判斷這一次的改版是否有比較好的效果。
這種拿一部分流量作實驗,咱們也稱這種作法爲「 ABTest」,若是對ABTest感興趣的同窗能夠在個人 GitHub下搜索關鍵字「ABTest」來閱讀具體的文章哦~
這篇文章簡單的說了一下所謂的「大數據」中的數據是從哪裏來的,因爲數據量很大,因此咱們要解決數據的存儲和計算的問題。
基於存儲和計算問題咱們業內就提供了不少現成的技術實現了,下面圖中的技術每一種類型我後續都會講解到,能夠關注我,不迷路哦。
參考資料:《從0開始學大數據》--李智慧
若是你們想要實時關注我更新的文章以及分享的乾貨的話,能夠關注個人公衆號「Java3y」。
在公衆號下回復「888」便可獲取!!
本已收錄至個人GitHub精選文章,歡迎Star: https://github.com/ZhongFuCheng3y/3y求點贊 求關注️ 求分享👥 求留言💬 對我來講真的 很是有用!!!