大數據已經火了很長很長時間了,從最開始是個公司都說本身公司的數據量很大,咱們在搞大數據。到如今大數據真的已經很是成熟而且已經在逐漸的影響咱們的生產生活。你可能聽過支付寶的金融大數據,滴滴的出行大數據以及其餘的諸如氣象大數據等等,咱們每一個人都是數據的製造者,之後又將享受大數據技術所帶來的生活的便利。node
做爲一個IT相關的從業人員,你確定聽過Hadoop,Spark了。畢竟技術在發展,如今你們上班下班地鐵公交都交流啥,機器學習,人工智能,AI,搞大數據都不太敢說話。爲啥,由於技術實在是發展太快了。。。有點跟不上節奏。可是如今大數據已經很是成熟了,並且是所謂的機器學習,人工智能的基礎。因此,若是有想法趕忙學習學習吧。linux
大數據究竟是啥?大數據是一個概念也是一門技術,它是在以Hadoop爲表明的大數據平臺框架上進行各類數據分析的技術。大數據包括以Hadoop和Spark爲表明的基礎大數據框架,還包括實時數據處理,離線數據處理,數據分析,數據挖掘和用機器算法進行預測分析等技術。 說通俗點,就是大量數據進行 數據存儲,數據清洗,數據分析,數據處理,數據應用 的技術就是大數據。算法
我曾拜讀過雲戒大神的全棧大數據一書,該書中簡單概要的描述了互聯網的發展,大數據是其中很是重要的一環。你們能夠看下圖哈。安全
由圖片看到啊,互聯網往小了發展是移動互聯網,以前移動互聯網多麼火造就了多少獨角獸公司就不用多介紹了吧。如今的物聯網也是站在了風口之上,各類可穿戴設備層出不窮。互聯網往大了發展呢,第一步是雲計算。雲計算相信你們都用過,阿里雲,aws,雖然收費愈來愈貴可是確實解決了不少問題。而後就是大數據了。因此大數據仍是順應了技術發展的潮流,也不枉他在咱們IT圈口口相傳火了這麼多年。因此大數據是一個頗有錢途的方向。併發
咱們在介紹大數據的定義的時候反覆的提到了Hadoop框架,那麼做爲大數據的表明性技術框架,咱們必需要學好,用好它。接下來,咱們就來簡單看一下Hadoop框架。app
Hadoop是一個開源的大數據框架框架
Hadoop是一個分佈式計算的解決方案機器學習
Hadoop = HDFS(分佈式存儲服務) + MapReduce (分佈式計算框架)分佈式
咱們能夠看出啊Hadoop包括兩個核心,一個是HDFS一個是MapReduce。工具
問:假如你有一個10M的文件,你想過濾出含有Hadoop字符串的行,你會怎麼作。
做爲一個程序猿的你這時候就要秀一波操做了,你可能會用linux的grep命令。也可能去寫幾行代碼搞一把。10M並不能讓你感受到絕望,那麼10G呢,10T呢,甚至是10P呢。你會不會感受到絕望?而Hadoop這兩個核心就分別解決了上述的問題,HDFS解決了10T或者10P的數據存儲的問題,MapReduce解決了分佈式計算的問題,強強聯手啊,能比較輕鬆的搞定令你感受到絕望的問題。
HDFS爲何是Hadoop的核心? 嗯,這個問題問得好。 由於存儲是大數據的核心。 若是連數據存儲都搞不定,你拿設麼分析計算呢。要知道當咱們入了大數據的門,咱們接觸的數據規模不侷限於GB級了,咱們可能會處理TB甚至是PB的數據,單機去存儲幾T的數據已經很是多了。若是是幾PB的話單機是確定搞不定的,因此HDFS幫你解決了這個問題。
咱們都知道Hadoop的一大優勢就是利用多個廉價的機器組成集羣,HDFS就是將大量的數據存儲到這成百上千的廉價的機器上,可是你訪問的時候就跟使用本地文件同樣的簡單。好比你要訪問一個/tmp/file1的文件,這個文件可能存儲到了不少機器上。可是你是用戶啊,用戶就是上帝,你根本就不用管他怎麼存的,存在哪。你只須要告訴HDFS你要這個文件就能夠了。
對於HDFS啊,我這裏只介紹三個重要的概念:數據塊、NameNode、DataNode
若是咱們對Hadoop有過了解的話咱們都知道存儲在HDFS上的數據都是按塊存的。
數據塊是什麼?數據塊是一個抽象的概念。
好比咱們設置數據塊的大小爲128m,咱們要存一個10m的文件,由於是按塊存的 因此咱們這個文件就獨佔了一個數據塊。若是咱們存儲大小爲300m的文件,那就會分紅三個塊進行存儲。
那麼按塊存到底有什麼好處呢, 首先 他屏蔽了文件這個概念,好比你存了一個200T的文件,這個文件大於你任意一個磁盤單個的大小,這種狀況下你能夠將整個文件分紅n個數據塊,而後存儲到各個磁盤。這樣就簡化了存儲系統的設計, 並且 咱們知道爲了保證數據安全咱們確定是要備份的, 而數據塊它就很是適合用於數據備份,進而提供數據容錯能力和可用性。
那麼咱們到底選擇設置多大的數據塊呢?數據塊的默認大小是64M,通常咱們會將他設置成128M。若是數據塊的大小設置過小的話,那麼對於通常的文件咱們可能也須要按塊進行存儲了,這樣的話當咱們查詢一個文件的時候就須要檢索多個數據塊的地址,這樣效率不高,並且對NameNode的內存是一種極大的浪費。由於咱們是經過NameNode去檢索數據的,NameNode的內存中存儲了數據塊與文件和DataNode的映射,這個咱們後面會提到。若是數據塊設置太大的話,咱們可能會遇到一些系統層面的問題,好比系統重啓的時候須要從新加載數據,數據塊越大恢復須要的時間越長。並且數據塊過大對於並行的支持不好。 因此,通常咱們都將其設置成128M。
咱們都知道HDFS是分佈式文件系統,既然是分佈式那麼通常是主從模式,那麼誰是主,誰是從呢?NameNode就是主,而DataNode就是從。因此HDFS是由一個NameNode(Master)和多個DataNode(Slave)組成的。
管理文件系統的NameSpace
維護着文件系統樹以及文件樹中全部的文件和文件夾的元數據(這些數據存儲在內存中,也會持久化存儲到磁盤)
記錄着每一個文件中各個塊所在數據節點的位置信息,這些信息在DataNode啓動的時候會發送給NameNode
DataNode是文件系統的工做節點
負責存儲和檢索數據,而且將他所存儲的塊的列表發送給NameNode
既然有主從模式咱們都要考慮若是Master也就是NameNode掛掉了怎麼辦,Hadoop2以後呢咱們能夠配置兩個NameNode,一個處於active狀態,一臺處於standby狀態。這樣若是處於active狀態的NameNode掛掉了,另一臺能夠快速無縫的接手後續的工做。很大的程度上避免了單點問題的存在。
經過咱們上面對HDFS進行的介紹,咱們來總結一下HDFS的優缺點:
優勢:
那對應這三個優勢呢 天然就會發現他的三個缺點:
因此說,用不用Hadoop這頭神象仍是要根據具體的場景,具體的需求來考慮。 在合適的需求下用合適的工具才能達到合適的效果!
(未完待續,下節是HDFS的讀寫流程)