Hadoopのラックを意識した構成

A、Hadoopのラック意識戦略
コピーノードを選択する(ラックの意識)

1、デフォルトの
最初のクライアントのコピーが配置されているノード。クラスタ外のクライアントは、ランダムに選択した場合。
第2のランダムノードと異なるラックのコピーにコピーします。
第三のコピーと同じラックの第2のコピー、ランダムにノード。
2、hadoop2.7.2戦略
におけるクライアントノード最初のコピー。クラスタ外のクライアントは、ランダムに選択した場合。
そして、同じラックの最初のコピーの2番目のコピー。
第三のコピーは異なるフレームです。
第二に、カスタム検知ステップラック
1は、実装インターフェイスはorg.apache.hadoop.net.DNSToSwitchMappingことクラスの作成
、さらにコアsite.xmlファイルを、以下、2

<プロパティ> 
  <名前> net.topology.node。スイッチ .mapping.impl </名前> 
  <値> org.apache.hadoop.net.ScriptBasedMapping </ value>の
  <説明> デフォルトDNSToSwitchMappingの実装。これは、
  指定されたスクリプト呼び出し解決にnet.topology.script.file.name 
  ノード名を。値場合のため net.topology.script.file.nameがされていない設定  デフォルト DEFAULT_RACKの値がされて返されたため、すべてのノード名。
  </記述> 
</ property>の

3、site.xmlの分布コア
全てのHadoopクラスパス($ {HADOOP_HOME /共有/ノードに分散瓶、標識された。4、コンパイラ、 Hadoopの/共通/ LIB}) 以下です。

第三に、カスタムラック具現化センシング
1、準備MyRackAwareクラスとして、

パッケージcom.phx.hadoop.hdfs.rackaware。

輸入org.apache.hadoop.net.DNSToSwitchMapping。

輸入java.io.FileWriter; 
輸入はjava.util.ArrayList; 
輸入はjava.util.List; 

パブリック クラスMyRackAware実装DNSToSwitchMapping {
     / * * 
     * 
     * @param名
     * @return 
     *ラック:/ RACK1 / 002 
     * 192.168.37.102:50010(centos002)
     *ラック:/ RACK1 / 003 
     * 192.168.37.103:50010(centos003)
     *ラック:/ RACK2 / 004 
     * 192.168.37.104:50010(centos004)
     *ラック:/ RACK2 / 005 
     * 192.168.37.105:50010(centos005)
     * / 
    @Override
    公共の一覧<文字列>の決意(一覧<文字列> の名前){ 
        リスト <文字列>リスト=   新しいのArrayList <文字列> ();
        試す{ 
            てFileWriter FW = 新しいてFileWriter(" /data/hadoop/rackaware.txt "真の);
            (文字列str:名){
                 // 输出原来的信息、IP地址(主机名) 
                fw.write(STR + " \ R \ n " );
                //
                 もし(str.startsWith(" 192 "192.168.231.202 
                    ストリングIP = str.substring(str.lastIndexOf(" ")+ 1 )。
                    もし(Integer.parseInt(IP)<= 103 ){ 
                        list.add(" / RACK1 / " + IP)。
                    } { 
                        list.add(" / RACK2 / " + IP)。
                    } 
                } そうであれば(str.startsWith(" CentOSの" )){ 
                    文字列IP
                    
                 = str.substring(6 )。
                    もし(Integer.parseInt(IP)<= 003 ){ 
                        list.add(" / RACK1 / " + IP)。
                    } { 
                        list.add(" / RACK2 / " + IP)。
                    } 
                } 
            } 
            fw.write(リスト + " \ R \ n " ); 
            fw.close(); 
        } キャッチ(例外e){  
            e.printStackTrace();
        } 
        リターンリスト; 
    } 

    @Override 
    公共 ボイドreloadCachedMappings(){ 

    } 

    @Override 
    公共 ボイド reloadCachedMappings(リストの<string> 名){ 

    } 


}

 

MyRackAwareクラスラベル瓶パッケージ:MyRackAware.jar

MyRackAware.jarパッケージは、以下のHadoopクラスパス($ {HADOOP_HOME} /共有/ Hadoopの/共通/ LIB)内のすべてのノードに配布されます。

次のように図2に示すように、コアsite.xmlのプロファイルはさらに構成される。

<プロパティ>
  <名前> net.topology.node.switch.mapping.impl </名前>
  <値> com.phx.hadoop.hdfs.rackaware.MyRackAware </ value>の
</ property>の

Hadoopの$ {HADOOP_HOME}内のすべてのノードの/ etc / Hadoopのに分配コアsite.xmlファイル

3、再起動後、次のコマンドを使用しますHadoopのdfsadmin -printTopology構成を表示します

 

 

 

前記ノード間の距離を算出する
ラック意識して、名前ノードのデータノードは、図1に示すネットワークトポロジを描画することができます。D1は、R1はスイッチであり、底部はデータノードです。H1はrackid = / D1 / R1 / H1であり 、H1は親R1であり、R1はD1です。これらのrackid情報はtopology.script.file.nameを介して設定することができます。これらrackid情報で、私たちは、任意の2つのデータノード、クラスタ全体のネットワーク帯域幅のバランスを最適化するための最適なストレージ戦略、および最適化されたデータの割り当ての間の距離を計算することができます。

距離(/ D1 / R1 / H1 、/ D1 / R1 / H1)は= 同じ0データノード
の距離(/ DL / RL / HL、/ DL / RL / H2の)同じラックの下で異なるデータノード2 =
距離(/ DL / R1 / H1、/ D1 / R2 / H4)= 同IDC下で4つの異なるデータノードを
距離/ R3 / H7の(/ DL / RL / HL、/ D2)= IDC。6つの異なるデータノードで

 

おすすめ

転載: www.cnblogs.com/pinghengxing/p/12099821.html