話說hadoop有rack感知器(rack awareness) ,但是如果你沒設定,叢集中每一台都是default-rack,可使用hadoop dfsadmin -report查看,那麼廢話不多說底下先介紹如何設定rack!!~

1. 設定core-site.xml

<property>
    <name>topology.script.file.name</name>
    <value>/usr/hadoop/rack.py</value>
</property>

<property>
    <name>topology.script.number.args</name>
    <value>5</value> 
</property>

注: 上述紅色部分是要把rack.py放置在這個位置,當然也可以照自己的安排來放置,但是相對的要修改紅色部分的路徑。

2. rack.py的寫法

#!/usr/bin/env python

import sys
from string import join

DEFAULT_RACK = '/default/rack0';

RACK_MAP = {
'192.168.6.2' : '/d1/rack2',
'192.168.6.3' : '/d1/rack3',
'192.168.6.4' : '/d1/rack4',
'192.168.6.5' : '/d1/rack5',
}

if len(sys.argv)==1:
    print DEFAULT_RACK
else:
    print join([RACK_MAP.get(i, DEFAULT_RACK) for i in sys.argv[1:]]," ")

注: 上述IP的部分請記得修改唷!!

a. 複製上述的code即可,可用linux的vi / vim編輯,或用windows編輯,編輯完後請把檔名改成 rack.py(其實檔名沒有一定,但是.py是一定要的喔!!),若是使用windows編輯請編輯完後用FTP上傳即可!!

b. 請記得要使用chmod +x修改rack.py

c. 請記得叢集中的每一台都需要有 "rack.py" 以及 "設定後的core-site.xml"。

3. 重開namenode 與 datanode即可。

4. Rack awareness於hadooop definition guide second edition 中文版(p.61與p.261有說明)。

d1 為資料中心(也就是都是存在於同一間房間...這樣敘述好怪~.~")。

rack2, rack3, rack4, rack5表示不同的rack,如果您的叢集再同一個switch下請把rack值都設定成一樣的就可以了。

Rack awareness於hadoop最大的用途為 : 

1. 資料的副本配置(兩個復本在同一個rack上,另一個則在不同的rack上),而這個副本的配置也與MapReduce的運作息息相關,因為Mapreduce的強項就是"在地運算"!!!~。

2. 資料修復的速度,這是因為同一個rack的頻寬較大,如果要跨rack做資料的拷貝會比較花時間。

這導出一個問題,namenode如何知道資料有誤了,它是透過checksum機制(CRC-32)來得知。

checksum啟動時機:

a. 當你存資料進入hdfs時就會計算資料的CRC-32,每一個datanode會在背景執行緒上執行DataBlockScanner,用來定期檢查datanode上所有區塊,若發現有錯誤則會將正確的復本複製過來(當然會避免client讀取到壞掉的區塊),然後把壞掉的區塊刪除 )。

b. 當你從datanode讀取資料時。 

3. 資料安全性的考量,因為資料都在同一個rack上,萬一掛了...就真的沒救了~。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 TonyMoMo 的頭像
    TonyMoMo

    TonyMoMo的部落格

    TonyMoMo 發表在 痞客邦 留言(0) 人氣()