[優勢]html
支持超大文件 超大文件在這裏指的是幾百M,幾百GB,甚至幾TB大小的文件。前端
檢測和快速應對硬件故障在集羣的環境中,硬件故障是常見的問題。由於有上千臺服務器鏈接在一塊兒,這樣會致使高故障率。所以故障檢測和自動恢復是hdfs文件系統的一個設計目標node
流式數據訪問應用程序能以流的形式訪問數據集。主要的是數據的吞吐量,而不是訪問速度。linux
簡化的一致性模型 大部分hdfs操做文件時,須要一次寫入,屢次讀取。在hdfs中,一個文件一旦通過建立、寫入、關閉後,通常就不須要修改了。這樣簡單的一致性模型,有利於提升吞吐量。ios
[缺點]面試
低延遲數據訪問如和用戶進行交互的應用,須要數據在毫秒或秒的範圍內獲得響應。因爲hadoop針對高數據吞吐量作了優化,犧牲了獲取數據的延遲,因此對於低延遲來講,不適合用hadoop來作。算法
大量的小文件Hdfs支持超大的文件,是經過數據分佈在數據節點,數據的元數據保存在名字節點上。名字節點的內存大小,決定了hdfs文件系統可保存的文件數量。雖然如今的系統內存都比較大,但大量的小文件仍是會影響名字節點的性能。數據庫
多用戶寫入文件、修改文件Hdfs的文件只能有一次寫入,不支持寫入,也不支持修改。只有這樣數據的吞吐量才能大。apache
不支持超強的事務沒有像關係型數據庫那樣,對事務有強有力的支持。
詳情查看:https://www.cnblogs.com/sxt-zkys/archive/2017/07/24/7229857.html編程
<property> <name>dfs.block.size</name>//block的大小,單位字節,後面會提到用處,必須是512的倍數,由於採用crc作文件完整性校驗,默認配置512是checksum的最小單元 <value>5120000</value> </property>
ps.循環冗餘校驗(Cyclic Redundancy Check, CRC)是一種根據網絡數據包或電腦文件等數據產生簡短固定位數校驗碼的一種散列函數,主要用來檢測或校驗數據傳輸或者保存後可能出現的錯誤。它是利用除法及餘數的原理來做錯誤偵測的。
第一套付費產品是 Cloudera Enterpris
1)文件寫入Client 向 NameNode 發起文件寫入的請求。NameNode 根據文件大小和文件塊配置狀況,返回給 Client 它所管理部分 DataNode 的信息。Client 將文件劃分爲多個 Block,根據 DataNode 的地址信息,按順序寫入到每個 DataNode 塊中。
2)文件讀取Client 向 NameNode 發起文件讀取的請求。NameNode 返回文件存儲的 DataNode 的信息。Client 讀取文件信息。
ps.http://www.makaidong.com/%E5%8D%9A%E5%AE%A2%E5%9B%AD%E6%8E%92%E8%A1%8C/9053.shtml
datanode經過長鏈接與namenode保持通訊。(正確)【答案有分歧,根據本身理解回答便可】
長鏈接:Client 方與Server 方先創建通信鏈接,鏈接創建後不斷開,而後再進行報文發送和接收。這種方式下因爲通信鏈接一直存在,此種方式經常使用於點對點通信。
短鏈接:Client 方與Server 每進行一次報文收發交易時才進行通信鏈接,交易完畢後當即斷開鏈接。此種方式經常使用於一點對多點通信,好比多個Client 鏈接一個Server。
Hadoop自身具備嚴格的權限管理和安全措施保障集羣正常運行。(錯誤)
slave節點要存儲數據,因此它的磁盤越大越好。(錯誤)
一旦slave節點宕機,數據恢復是一個難題。
Hadoop集羣三種做業調度算法介紹
Hadoop集羣中有三種做業調度算法,分別爲FIFO,公平調度算法和計算能力調度算法。
先來先服務算法FIFO:FIFO比較簡單,hadoop中只有一個做業隊列,被提交的做業按照前後順序在做業隊列中排隊,新來的做業插入到隊尾。一個做業運行完後,老是從隊首取下一個做業運行。這種調度策略的優勢是簡單、易於實現,同時也減輕了jobtracker的負擔。可是它的缺點也是顯然的,它對全部的做業都一視同仁,沒有考慮到做業的緊迫程度,另外對小做業的運行不利。
公平調度算法:
這種策略在系統中配置了任務槽,一個任務槽能夠運行一個task任務,這些任務就是一個大的做業被切分後的小做業。當一個用戶提交多個做業時,每一個做業能夠分配到必定的任務槽以執行task任務(這裏的任務槽能夠理解爲能夠運行一個map任務或reduce任務)。若是把整個hadoop集羣做業調度跟操做系統的做業調度相比,第一種FIFO就至關於操做系統中早期的單道批處理系統,系統中每一個時刻只有一道做業在運行,而公平調度至關於多道批處理系統,它實現了同一個時刻多道做業同時運行。因爲linux是多用戶的,如有多個用戶同時提交多個做業會怎樣?在這種策略中給每一個用戶分配一個做業池,而後給每一個做業池設置一個最小共享槽個數,什麼是最小共享槽個數呢?先要理解一個最小什麼意思,最小是指只要這個做業池須要,調度器應該確保可以知足這個做業池的最小任務槽數的需求,可是如何才能確保在它須要的時候就有空的任務槽,一種方法是固定分配必定數量的槽給做業池不動,這個數量至少是最小任務槽值,這樣只要在做業池須要的時候就分配給它就好了,可是這樣在這個做業池沒有用到這麼多任務槽的時候會形成浪費,這種策略其實是這樣作的,看成業池的需求沒有達到最小任務槽數時,名義上是本身的剩餘的任務槽會被分給其餘有須要的做業池,當一個做業池須要申請任務槽的時候若系統中沒有了,這時候不會去搶佔別人的(也不知道搶誰的啊),只要當前一個空的任務槽釋放會被當即分配給這個做業池。
在一個用戶的做業池內,多個做業如何分配槽這個能夠自行選擇了,如FIFO。因此這種調度策略分爲兩級:
第一級,在池間分配槽,在多用戶的狀況下,每一個用戶分配一個做業池。
第二級,在做業池內,每一個用戶可使用不一樣的調度策略。
計算能力調度:計算能力調度和公平調度有點相似,公平調度策略是以做業池爲單位分配任務槽,而計算能力調度是以隊列爲單位分配tasktracker(集羣中一個節點),這種調度策略配置了多個隊列,每一個隊列配置了最小額度的tasktracker數量,同公平調度策略相似,當一個隊列有空閒的tasktracker時,調度器會將空閒的分配給其餘的隊列,當有空閒的tasktracker時,因爲這時候可能有多個隊列沒有獲得最小額度的tasktracker而又在申請新的,空閒的tasktracker會被優先分配到最飢餓的隊列中去,如何衡量飢餓程度呢?能夠經過計算隊列中正在運行的任務數與其分得的計算資源之間的比值是否最低來判斷的,越低說明飢餓程度越高。
計算能力調度策略是以隊列的方式組織做業的,因此一個用戶的做業可能在多個隊列中,若是不對用戶作必定的限制,極可能出如今多個用戶之間出現嚴重不公平的現象。因此在選中新做業運行時候,還須要考慮做業所屬的用戶是否超過了資源的限制,若是超過,做業不會被選中。
對於在同一個隊列中,這種策略使用的是基於優先級的FIFO策略,可是不會搶佔。
集羣內每一個節點都應該配 RAID,這樣避免單磁盤損壞,影響整個節點運行。(錯誤 )
hadoop 自己就具備冗餘能力,因此若是不是很嚴格不須要都配備 RAID。
每一個 map 槽就是一個線程。(錯誤)
map 槽---->map slot。(org.apache.hadoop.mapred.TaskTracker.TaskLaucher.numFreeSlots)是一個邏輯值,而不是對應着一個縣城或者進程。Mapreduce 的 input split 就是一個 block。(錯誤)
InputFormat的數據劃分、split調度、數據讀取三個問題的淺析www.aboutyun.com/thread-6803-1-1.html
Hadoop 環境變量中的 HADOOP_HEAPSIZE 用於設置全部 Hadoop 守護線程的內存。它默認是 200 GB。(錯誤)
hadoop 爲各個守護進程(namenode,secondarynamenode,resourcemanager,datanode,nodemanager)統一分配的內存在 hadoop-env.sh 中設置,參數爲 HADOOP_HEAPSIZE,默認爲 1000M。
DataNode 首次加入cluster 的時候,若是log 中報告不兼容文件版本,那須要NameNode執行hdfs namenode -format操做格式化磁盤。(錯誤)
添加了一個新的標識符 ClusterID 用於標識集羣中全部的節點。當格式化一個 Namenode,須要提供這個標識符或者自動生成。這個 ID 能夠被用來格式化加入集羣的其餘 Namenode。
持續更新~~~~