總體:https://segmentfault.com/a/11...
HDFS是hadoop的最底層存儲部分,旨在部署在低成本硬件上。HDFS提供對應用程序數據的高吞吐量訪問,高可靠服務。建立後除了追加和刪除以外(append的實現也很曲折,很複雜的異常邏輯https://caodaoxi.iteye.com/bl... ),無更改。直接寫文件+多副本,讀共享內存+就近。主要關注高可靠。
官方:http://hadoop.apache.org/docs...
HDFS是每臺機器運行的守護進程,對外暴露網絡服務,容許其餘節點訪問存儲在該機器上的文件html
架構node
NameSpace
在NameNode之上,一個ns包含多個nn
namespace:全部nn上個的路由應該在內存中,有瓶頸,拆分爲更小的命名空間,單獨管理。容許每一個命名空間的NN自定義DNid的ip,無需和另外一個NS商議。刪除命名空間可刪除本身的dn,nn。好比在NN1的DN1:IP2,NN3的DN2:IP4的配置:算法
<property> <name>dfs.nameservices</name> <value>ns1,ns2</value> </property> <property> <name>dfs.nameservices.ns1</name> <value>nn1,nn2</value> </property> <property> <name>dfs.namenode.rpc-addr.ns1.nn1</name> <value>ip1:8082</value> </property> <property> <name>dfs.nameservices.ns2</name> <value>nn3,nn4</value> </property> <property> <name>dfs.namenode.rpc-addr.ns2.nn3</name> <value>ip4:8082</value> </property>
存放每一個節點的路由。能夠每一個機器放一個+n個dn。爲了保證可靠性,每一個NS都有兩個NN,多NN的HA保證:apache
http://docs.ceph.org.cn/rados...
ceph。相見恨晚,牛逼的分片,不須要保存元數據,也就不須要中心節點,所有計算但又不須要hash同樣的總體移動和一致性hash或半數hash的再分佈不均勻致使相鄰節點再分佈壓力很大連續宕機的狀況。之前對分片的認識少了一大塊。
CRUSH。還有RUSH暫時沒有看。其實他想作的和一致性hash+hash提早分更多片遷移部分差很少,只不過每次不是相鄰的改變,不是固定一半分片或一個分片,而是每一個裏邊隨機挑選部分改變,不改變節點時,每一個對應隨機數權重不變,新增節點的隨機數權重若大於原來的則移動到新節點。刪除節點時,會把原來這部分從新分散到其餘節點。
邏輯pgid的計算。將數據hash到pgid(提早切分到更多)上,這部分爲改變遷移的最小單位,pgid到機房/機器/磁盤上的映射都是經過crush算法。生成僞隨機數(pgid,osid,r)(這裏的r是幾個副本),p=隨機數*權重,全部osid選最大的便可。新增時舊的p不變,只有當新的p>舊的時才移動。刪除時將這部分分散到其餘機器。
https://blog.csdn.net/weixin_...
https://cloud.tencent.com/dev...swift