HADOOP高可用機制

HADOOP高可用機制

HA運做機制java

什麼是HAnode

HADOOP如何實現HAlinux

HDFS-HA詳解shell

HA集羣搭建apache

 

目標:api

掌握分佈式系統中HA機制的思想服務器

掌握HADOOP內置HA的運做機制app

掌握HADOOP2.x的HA集羣機制配置運維

1 Hadoop的HA機制

前言:正式引入HA機制是從hadoop2.0開始,以前的版本中沒有HA機制eclipse

1.1 HA的運做機制

(1)hadoop-HA集羣運做機制介紹

所謂HA,即高可用(7*24小時不中斷服務)

實現高可用最關鍵的是消除單點故障

hadoop-ha嚴格來講應該分紅各個組件的HA機制——HDFS的HA、YARN的HA

(2)HDFS的HA機制詳解

經過雙namenode消除單點故障

雙namenode協調工做的要點:

    A、元數據管理方式須要改變:

    內存中各自保存一份元數據

    Edits日誌只能有一份,只有Active狀態的namenode節點能夠作寫操做

    兩個namenode均可以讀取edits

    共享的edits放在一個共享存儲中管理(qjournal和NFS兩個主流實現)

    B、須要一個狀態管理功能模塊

    實現了一個zkfailover,常駐在每個namenode所在的節點

    每個zkfailover負責監控本身所在namenode節點,利用zk進行狀態標識

    當須要進行狀態切換時,由zkfailover來負責切換

    切換時須要防止brain split現象的發生

1.2 HDFS-HA圖解:

1.2  HA集羣的安裝部署

1.2.1 集羣節點規劃

集羣部署節點角色的規劃(10節點):

server01   namenode   zkfc    > start-dfs.sh

server02   namenode   zkfc

 

server03   resourcemanager    > start-yarn.sh

server04   resourcemanager

 

server05   datanode   nodemanager    

server06   datanode   nodemanager    

server07   datanode   nodemanager    

 

server08   journal node    zookeeper

server09   journal node    zookeeper

server10   journal node    zookeeper

 

集羣部署節點角色的規劃(3節點)

server01   namenode    resourcemanager  zkfc   nodemanager  datanode   zookeeper   journal node

server02   namenode    resourcemanager  zkfc   nodemanager  datanode   zookeeper   journal node

server05   datanode    nodemanager     zookeeper    journal node

 

1.2.2 環境準備

一、環境準備

a/linux系統準備

    ip地址配置

    hostname配置

    hosts映射配置

    防火牆關閉

init啓動級別修改

sudoers加入hadoop用戶

ssh免密登錄配置

b/java環境的配置

    上傳jdk,解壓,修改/etc/profile

 c/zookeeper集羣的部署

1.2.3 配置文件

core-site.xml

                <configuration>

                    <!-- 指定hdfs的nameservice爲ns1 -->

                    <property>

                        <name>fs.defaultFS</name>

                        <value>hdfs://ns1/</value>

                    </property>

                    <!-- 指定hadoop臨時目錄 -->

                    <property>

                        <name>hadoop.tmp.dir</name>

                        <value>/home/hadoop/app/hadoop-2.4.1/tmp</value>

                    </property>

                   

                    <!-- 指定zookeeper地址 -->

                    <property>

                        <name>ha.zookeeper.quorum</name>

                        <value>weekend05:2181,weekend06:2181,weekend07:2181</value>

                    </property>

                </configuration>

 

hdfs-site.xml

configuration>

<!--指定hdfs的nameservice爲ns1,須要和core-site.xml中的保持一致 -->

<property>

    <name>dfs.nameservices</name>

    <value>ns1</value>

</property>

<!-- ns1下面有兩個NameNode,分別是nn1,nn2 -->

<property>

    <name>dfs.ha.namenodes.ns1</name>

    <value>nn1,nn2</value>

</property>

<!-- nn1的RPC通訊地址 -->

<property>

    <name>dfs.namenode.rpc-address.ns1.nn1</name>

    <value>weekend01:9000</value>

</property>

<!-- nn1的http通訊地址 -->

<property>

    <name>dfs.namenode.http-address.ns1.nn1</name>

    <value>weekend01:50070</value>

</property>

<!-- nn2的RPC通訊地址 -->

<property>

    <name>dfs.namenode.rpc-address.ns1.nn2</name>

    <value>weekend02:9000</value>

</property>

<!-- nn2的http通訊地址 -->

<property>

    <name>dfs.namenode.http-address.ns1.nn2</name>

    <value>weekend02:50070</value>

</property>

<!-- 指定NameNode的edits元數據在JournalNode上的存放位置 -->

<property>

    <name>dfs.namenode.shared.edits.dir</name>

    <value>qjournal://weekend05:8485;weekend06:8485;weekend07:8485/ns1</value>

</property>

<!-- 指定JournalNode在本地磁盤存放數據的位置 -->

<property>

    <name>dfs.journalnode.edits.dir</name>

    <value>/home/hadoop/app/hadoop-2.4.1/journaldata</value>

</property>

<!-- 開啓NameNode失敗自動切換 -->

<property>

    <name>dfs.ha.automatic-failover.enabled</name>

    <value>true</value>

</property>

<!-- 配置失敗自動切換實現方式 -->

<property>

    <name>dfs.client.failover.proxy.provider.ns1</name>

    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

</property>

<!-- 配置隔離機制方法,多個機制用換行分割,即每一個機制暫用一行-->

<property>

    <name>dfs.ha.fencing.methods</name>

    <value>

        sshfence

        shell(/bin/true)

    </value>

</property>

<!-- 使用sshfence隔離機制時須要ssh免登錄 -->

<property>

    <name>dfs.ha.fencing.ssh.private-key-files</name>

    <value>/home/hadoop/.ssh/id_rsa</value>

</property>

<!-- 配置sshfence隔離機制超時時間 -->

<property>

    <name>dfs.ha.fencing.ssh.connect-timeout</name>

    <value>30000</value>

</property>

/configuration>

 

1.2.4 集羣運維測試

一、Datanode動態上下線

Datanode動態上下線很簡單,步驟以下:

a)   準備一臺服務器,設置好環境

b)   部署hadoop的安裝包,並同步集羣配置

c)   聯網上線,新datanode會自動加入集羣

d)   若是是一次增長大批datanode,還應該作集羣負載重均衡

二、Namenode狀態切換管理

使用的命令上hdfs  haadmin

可用 hdfs  haadmin –help查看全部幫助信息

 

能夠看到,狀態操做的命令示例:

查看namenode工做狀態  

hdfs haadmin -getServiceState nn1

 

將standby狀態namenode切換到active

hdfs haadmin –transitionToActive nn1

 

將active狀態namenode切換到standby

hdfs haadmin –transitionToStandby nn2

 

三、數據塊的balance

啓動balancer的命令:

start-balancer.sh -threshold 8

運行以後,會有Balancer進程出現:

上述命令設置了Threshold爲8%,那麼執行balancer命令的時候,首先統計全部DataNode的磁盤利用率的均值,而後判斷若是某一個DataNode的磁盤利用率超過這個均值Threshold,那麼將會把這個DataNode的block轉移到磁盤利用率低的DataNode,這對於新節點的加入來講十分有用。Threshold的值爲1到100之間,不顯示的進行參數設置的話,默認是10。

1.2.5 HA下hdfs-api變化

客戶端須要nameservice的配置信息,其餘不變

/**

 * 若是訪問的是一個ha機制的集羣

 * 則必定要把core-site.xml和hdfs-site.xml配置文件放在客戶端程序的classpath下

 * 以讓客戶端可以理解hdfs://ns1/中  「ns1」是一個ha機制中的namenode對——nameservice

 * 以及知道ns1下具體的namenode通訊地址

 * @author

 *

 */

public class UploadFile {

        

         public static void main(String[] args) throws Exception  {

                  

                   Configuration conf = new Configuration();

                   conf.set("fs.defaultFS", "hdfs://ns1/");

                  

                   FileSystem fs = FileSystem.get(new URI("hdfs://ns1/"),conf,"hadoop");

                  

                   fs.copyFromLocalFile(new Path("g:/eclipse-jee-luna-SR1-linux-gtk.tar.gz"), new Path("hdfs://ns1/"));    

                   fs.close();    

         }

}

 

Federation下 mr程序運行的staging提交目錄問題

<property>

  <name>yarn.app.mapreduce.am.staging-dir</name>

  <value>/bi/tmp/hadoop-yarn/staging</value>

  <description>The staging dir used while submitting jobs.

  </description>

</property>

相關文章
相關標籤/搜索