記得從上大學的時候就已經據說過這個詞語 之前的理解可能就是數據量超大不少嘛 到這幾年大數據這個詞語被人們談論得也愈來愈頻繁 也愈來愈想了解它的因此本身才會去學習 我以爲作任何事以前確定有某種驅使你去了解它的過程 如下僅是本身我的的理解服務器
大數據不只是數據量大 (G,TB,PB.....)達到甚至更大 ,試想一下我給你一個數據量達到TB級別的數據 可是裏面的數據都是一些你看不懂或者沒有什麼可用的信息的 那它也不過是一個數據量很大的文件而已(僅此而已沒有什麼能夠提供的價值信息) ,因此說大數據不只是擁有海量的數據並且是多維度的(可以獲取到不少有價值的信息)咱們常常會把數據存放到硬盤 硬盤大嘛能夠存放幾百G的容量 可是咱們的大數據就不行了 由於大數據的數據量是龐大的是你都沒法想象的(有時候會在腦海裏想一想 全世界有接近70多億的人口說全世界可能範圍太大 就單單一箇中國13億人天天產生的數據量就大的驚人)這麼大的數據量怎麼可能去存放到硬盤裏呢(在多弄幾臺電腦不就好了 幾臺不行在搞個幾十臺當初就是這麼想的) 這時候咱們的大數據就派上用場了 框架
大數據的核心是解決海量數據 場景下的數據存儲加運算問題(拿到數據後確定會進行一些計算而後提取到咱們所須要的信息) 而海量數據 場景下的數據存儲加運算問題的核心又是分佈式技術分佈式
咱們常常會上網購物 淘寶天貓京東呀 每次只要搜索的時候一件物品(好比電腦)那麼下次再進來的時候你就會發現不少有關電腦的購物信息 當我選擇一件物品進入到購物車 就會當即跟我推薦不少跟我購物車相關的物品 之前可能回想這是怎麼回事 爲何不推薦其餘的物品呢 如今可能有了一些些瞭解佈局
首先當咱們訪問一個頁面的時候 例如京東的網站 每當咱們在瀏覽一個頁面點擊每一件商品的時候 會像服務端server發送不少信息 (商品標題 ip地址 用戶id.......)都會發到server 服務端收到信息以後 就會把這些信息獲取到而後保存到硬盤中 至關一個日誌吧 天天都會存放一些信息 而且會不斷的更新數據會愈來愈大必須作一些處理 那麼問題也就來了學習
Q1:試想如下像京東天貓天天同時瀏覽人數沒有上億也有好幾千萬的訪問量 ,假如一我的訪問數據量爲幾k 一天總共請求的數據也有百g了 若是一個月 一年 那麼數據就會愈來愈大那麼它的數據又是如何保存的呢?大數據
若是用硬盤存放確定不現實 而京東(不止是京東 天貓 谷歌 阿里)也是運用了分佈式文件存儲系統(HDFS) 將數據存放到多臺服務器上面 而後進行數據操做網站
1.HDFS是作什麼的?spa
HDFS分佈式計算中數據存儲管理的基礎 是用來存儲超大數據文件的系統日誌
2.HDFS有什麼優勢爲何這麼多公司會用?server
(1)高容錯性
數據自動保存多個副本 當一個副本丟失會自動恢復
(2)適合大數據處理
1) 數據規模:可以處理數據規模達到 GB、TB、甚至PB級別的數據。
2) 文件規模:可以處理百萬規模以上的文件數量,數量至關之大。
(3) 流式數據訪問
1) 一次寫入,屢次讀取,不能修改,只能追加。
2) 它能保證數據的一致性。
(4) 可構建在廉價機器上
1) 它經過多副本機制,提升可靠性。
2) 它提供了容錯和恢復機制。好比某一個副本丟失,能夠經過其它副原本恢復。
(5) 適合批處理
1) 它是經過移動計算而不是移動數據。
2) 它會把數據位置暴露給計算框架。
3.HDFS如何存儲數據?
(1) 咱們要想知道HDFS如何存儲數據 就必須先了解到HDFS Client、NameNode、DataNode和Secondary NameNode
1) HDFS Cilent hdfs客戶端
文件上傳到HDFS的時候 會將文件進行分塊 而後再進行存儲
與NameNode交互 獲取到文件的位置信息 NameNode管理DataNode 應該將文件存儲到哪一個節點
與DataNode交互 存儲獲讀取數據
Client 提供一些命令來管理 HDFS,好比啓動或者關閉HDFS。
2)NameNode
處理客戶端的請求
管理數據塊的信息
管理DataNode
3)DataNode
是真正幹事的節點 它負責存儲數據
4)Secondary NameNode
輔助 NameNode,分擔其工做量(有點像祕書的角色) 可是當NameNode掛掉的時候 它並不能立刻替換 NameNode 並提供服務
按期合併 fsimage和fsedits,並推送給NameNode。
1 當客戶端發送一個請求說有一個文件須要存儲(gfvadio.avi)
2.NameNode會接收到這個請求 而且會在虛擬目錄樹下面找是否有這個文件 若是有就響應能夠傳輸
3.而後客戶端就會去傳輸數據(而且會分塊傳輸 默認是128M是一塊 而我要傳輸的文件是200M 它會分爲兩塊去傳) 而且會保存三份副本 以避免數據丟失
4.NameNode通知客戶端能夠將數據傳到 DN1 DN2 DN4 而且會給它分配一個全局惟一的blk_id
5.客戶端收到消息後就會將文件傳到DN1 DN2 DN4 第一塊傳輸完成
6.客戶端請求傳輸文件的第二塊 而且也保存三份 接着NameNode通知能夠將文件傳到DN2 DN3 DN4 而且會分配給它一個佈局惟一的blk_id2
7.客戶端收到消息後傳輸文件到DN2 DN3 DN4 存儲完成
至於爲何HDFS會這麼存儲數據 確定是有它的道理的 接下來這幾個問題問題也許能夠解決這個疑問
Q2:若是多個客戶端傳輸同一個文件名 可能形成什麼後果?
以前的數據確定會被覆蓋 數據丟失 正是由於這個緣由因此在傳輸文件的時候NameNode會分配一個全局惟一的編號
Q3:若是客戶端傳輸一個超大文件100G會發生什麼?
100G的數據讀起來確定很是慢 因此會分塊 每一個機器讀取不一樣的塊 能夠大大增長讀取效率
Q4:傳輸數據的時候數據存儲服務器掛掉(若是DN1,DN2 )了會發生什麼?
這裏就能夠解決爲何會備份副本 傳輸文件的時候會備份多份 這樣能夠防止某臺服務器忽然掛掉 數據出現丟失的狀況
1.客戶端發送請求讀取數據
2.NameNode會在元數據中查找是否存在這個文件 若是存在 而後就會通知客戶端blk_id在DN1 blk_id2在DN2
3.客戶端而後再去DN1中取第一塊數據 取完以後再在DN2中取第二塊