1. 程式人生 > 程式設計 >寫給後端的Hadoop初級入門教程:概念篇

寫給後端的Hadoop初級入門教程:概念篇

前言:

Hello大家好,我是韓數。距離我們上一個系列寫給後端的Nginx初級入門教程已經過去整整25天了,中間穿插了兩篇區塊鏈相關的文章,其實吧,這二十來天我一直在憋大招,那就是這個最新的系列寫給後端的Hadoop初級入門教程,由於Hadoop本身的技術細節還是很多的,Hadoop基礎環境的搭建分散式偽分散式的部署叢集啟動的準備,hdfs檔案系統MR程式設計模型,以及最後的優化等等,整個一套寫下來工作量還是蠻大的,好在我快放寒假了(開心),這樣使得我有充足的時間和精力去寫這套教程,一來是為了幫助自己在寫作的時候更加深入地理解這方面的知識,而來是希望可以幫助到那些剛剛準備入門大資料的朋友們去理解和使用Hadoop這門技術。畢竟大家都知道,現在網上搜到的那些技術教程,質量參差不齊,一不小心踩到坑就是:

一電腦,一根菸,一篇教程學半天,除錯半天卻不對,想送作者上青天。

好溼好溼,本篇文章作為整套Hadoop入門教程的第一篇,我們依然從最基礎的概念說起,什麼是大資料,大資料如何影響我們的生活?什麼是Hadoop,Hadoop和其他大資料技術相比又有哪些優勢?明白了這些問題,我相信再學大資料,雖然不能說有buff加成,但是至少知道自己接下來要學的這玩意兒是個啥了。

不廢話,直接上東西

什麼是大資料:

大資料 (Big Data) : 主要是指無法在一定範圍內用常規軟體工具進行捕捉,管理和處理的資料集合,是需要新處理模式才能具有更強的決策力,洞察發現力和流程優化能力的海量,高增長率和多樣化的資訊資產

一句話解釋:大資料就是大量資料,資料多到傳統方案無法處理的程度。

當然資料的體量並不是最重要的,重要的是隱藏在這些資料中的資訊,這些資訊不論是在商業上還是在研究上都有著巨大的價值,電商通過挖掘這些資料中的資訊為每個使用者畫像,並且推薦合適的商品給使用者增加購買,當然,也可以順便調整一下改個價格殺個熟什麼的。

大資料的單位:

但我們畢竟是嚴謹的理科生啊,你說大資料大資料,多大才是大資料?為瞭解決這個問題,減少撕逼,科學家就制定了一系列的資料單位,從小到大依次是:

bit Byte KB MB GB TB PB EB ZB YB BB NB(牛逼)DB(呆逼)

當然,光講這些單位有什麼意思,我怎麼能知道這些單位能存多少資料?為了方便大家更加直接的感受到這些資料單位的威力,我找了一些小栗子:

  • 全世界所產生的印刷材料的資料大概是200PB。
  • 全世界人類總共說過的話大概是5EB。
  • 國外知名網站P站2017年網站產生的總資料量為 3732PB 。
  • 一百萬個漢字大概所需要的記憶體是2MB。

剛才好像混入了什麼奇怪的東西。

大資料的特點:

  • 大量:必須的,不大都不好意思叫大資料。
  • 高速:這麼多資料肯定要快速消化掉的,處理幾十年也等不起啊,今年雙十一的成交額總不能算到明年雙十一再公佈吧。
  • 多樣:不同的場景會產生不同的資料,優酷就是使用者瀏覽資料,視訊資料,QQ音樂就是音樂資料。
  • 低價值密度:這個意思是即使資料量很大,但是我們關注的始終的特定的部分,而非整體,就像警察叔叔調監控一樣,一年前一個月前的資料通常對他來說是沒什麼用的,他只要那麼幾個關鍵節點的監控資料就可以了。

應用場景就不說了,哪都是應用場景。

Hadoop是什麼?

知道了什麼是大資料,我們就得思考另外一個問題,弄這麼多的資料我放哪啊?

槓精:不明擺著的麼,當然放硬碟裡啊,要不放哪兒,還能寫紙上? 我:硬碟我知道,可是萬一這塊硬碟壞了,那資料不就沒了嗎?

路人:你係不繫傻,你多放幾塊硬碟,分別放上去不就行了嗎?

這個時候Hadoop來了,弟弟們都往邊上靠靠,你們那種辦法太笨拙,交給我,輕輕鬆鬆地給你搞定,小意思。

Hadoop是一個由Apache基金會所開發的分散式系統基礎架構,主要用來解決大資料的儲存和分析計算問題。

當然,HadoopSpring一樣,到現在已經沒法去僅僅理解為Hadoop這門技術了,就像你跟別人說,我這個新電商專案基於Spring寫的,那別人肯定不會覺得你只用了Spring,會覺得你可能用了Spring MVCbootJPA等一系列Spring生態的技術。同樣地,Hadoop也是如此,不僅僅是代表Hadoop本身這項技術,同時也代表圍繞Hadoop的技術生態。

而且大家千萬不要把事情想複雜,以為分散式儲存什麼這些概念都是多麼深奧的東西,的確,官方概念確實是有點抽象晦澀了,但是我覺得,任何一項理論都一定來源於生活,因為是生活給予了他們靈感,但是生活並不是十分複雜的,所以任何深奧複雜的理論一定可以在生活中找到一個通俗易懂的解釋。

什麼是分散式儲存,不跟大家吹,我初中的時候就已經在搞這個了,那時候流行看玄幻小說,那種大部頭知道吧,特厚,通常一個班就只有那麼一本,被教導主任沒收了就完蛋了,誰都沒得看,於是當時盛行把一本玄幻小說一頁一頁撕下來,每個同學幾頁,大家互相換著看,就算老師發現了也就只是沒收了一部分,沒辦法全部殲滅。你看,分散式有了,儲存有了,這不就是分散式儲存嗎?為了防止一本書被老師沒收了導致這本書不完整,那就買三本,也這麼幾頁幾頁分開存,這不就是多備份嗎,沒那麼複雜,別老糾結那些學者寫的給學者看的概念。

Hadoop發展史:

這個也沒啥好講的,我這裡就列幾個關鍵的點,感興趣的朋友下去可以自己搜,網上一搜一大堆。

  • 一個叫Dung Cutting 沒事用java寫了一個全文搜尋的框架 - Lucene
  • 資料量大的時候,Lucene效能跟不上了就。
  • 巧了,Google本身也是做全文搜尋的,為啥人家效能就那麼頂呢?
  • 通過學習谷歌,搞了個Nutch
  • 後來谷歌公開了部分GFSMapReduce的細節。
  • Dung Cutting 一看這答案都給自己了,於是花了兩年,注意是業餘時間,自己實現了DFSMapReduce,`Nutch·效能一下字就提上去了,一個字,牛逼。
  • 後來Hadoop作為Lucene子專案Nutch的一部分被正式引進了Apache基金會。
  • 然後Map-ReduceNDFS一塊被整合進了Hadoop專案裡面,Hadoop就這麼誕生了。

為啥人家業餘時間就能搞出來這麼牛逼的東西,我業餘時間王者榮耀王者都上不去,難道有中間商賺差價?

Hadoop發行版本:

和Linux差不多,不同的公司在此基礎上分別定製了自己的發行版本,Hadoop發行版本主要有三個,分別是:

  • Apache版本:最原始(最基礎)的版本,對於入門學習最好,畢竟是出生地,血統也是最正的。
  • Cloudera :在大型網際網路企業中用的較多。
  • Hortonworks:檔案比較全。

不用想,我們肯定選Apache,也沒啥別的原因,就是因為它基礎,簡單,不要錢。

Hadoop優勢是什麼?

Hadoop為啥這麼牛逼,導致我們現在一說大資料開發,就會想到Hadoop?

畢竟寫程式不是談戀愛,沒什麼就算你不好我也依然愛你這回事,我們壞得很,哪個好用使哪個。

Hadoop在江湖中能混到今天的地位主要靠以下四點:

  • 高可靠性Hadoop底層使用多個資料副本,即使Hadoop某個計算元素或儲存出現故障,也不會導致資料的丟失,想想上面講的分散式儲存的例子。
  • 高擴充套件性:在叢集間分配任務資料,可以方便的擴充套件數以千計的節點。就是,有一天運維早上一上班,臥槽,叢集儲存不夠了,但是問題不大,因為在叢集中加入一個新的節點或者去掉一個節點都分分鐘的事兒。
  • 高效性:在MapReduce的思想下,Hadoop是並行工作的,以加快任務處理速度。
  • 高容錯性:能夠將失敗的任務重新分配。

你說了一堆優點,Hadoop就沒啥缺點嗎?必須有,但是這個要到後面寫到HDFSMR的時候才能說,要不現在都不知道Hdfs是啥,說缺點的話不形象,就跟說人壞話一樣,當著人家面兒說才有效果。

下面開始技術總結:

今天這篇文章呢,作為整套Hadoop系列教程的第一篇,主要是按照我寫部落格的習慣講了一些基本的概念,希望大家看過之後心裡能夠對大資料和Hadoop有個基本的認識,另外,我寫技術文章比較口語化,廢話比較多,這個歡迎大家提建議,放心,提了我也不改,但是我寫小說啥的還是非常嚴肅的,而且廢話文你讀起來比那些深奧玩弄概念的文章快多了(滑稽),下一篇文章呢,我們同樣也是概念篇,主要講HDFSYARNMR這三個Hadoop核心概念,之後就是實打實的要和程式碼接觸了。

非常感謝能讀到這裡的朋友,你們的支援和關注是我堅持高質量分享下去的動力。

相關程式碼已經上傳至本人github。一定要點個star啊啊啊啊啊啊啊

萬水千山總是情,給個star行不行

韓數的開發筆記

歡迎點贊,關注我,有你好果子吃(滑稽)