1. 程式人生 > >配置高可用的Hadoop平臺

配置高可用的Hadoop平臺

1.概述

  在Hadoop2.x之後的版本,提出瞭解決單點問題的方案--HA(High Available 高可用)。這篇部落格闡述如何搭建高可用的HDFS和YARN,執行步驟如下:

  1. 建立hadoop使用者
  2. 安裝JDK
  3. 配置hosts
  4. 安裝SSH
  5. 關閉防火牆
  6. 修改時區
  7. ZK(安裝,啟動,驗證)
  8. HDFS+HA的結構圖
  9. 角色分配
  10. 環境變數配置
  11. 核心檔案配置
  12. slave
  13. 啟動命令(hdfs和yarn的相關命令)
  14. HA的切換
  15. 效果截圖

  下面我們給出下載包的連結地址:

  注:若JDK無法下載,請到Oracle的官網下載JDK。

到這裡安裝包都準備好了,接下來我們開始搭建與配置。

2.搭建

2.1建立Hadoop使用者

useradd hadoop
passwd hadoop

  然後根據提示,設定密碼。接著我給hadoop使用者設定面免密碼許可權,也可自行新增其他許可權。

chmod +w /etc/sudoers 
hadoop ALL=(root)NOPASSWD:ALL 
chmod -w /etc/sudoers

2.2安裝JDK

  將下載好的安裝包解壓到 /usr/java/jdk1.7,然後設定環境變數,命令如下:

sudo vi /etc/profile

  然後編輯配置,內容如下:

export JAVA_HOME=/usr/java/jdk1.7
export PATH=$PATH:$JAVA_HOME/bin

  然後使環境變數立即生效,命令如下:

source /etc/profile

  然後驗證JDK是否配置成功,命令如下:

java -version

  若顯示對應版本號,即表示JDK配置成功。否則,配置無效!

2.3配置hosts

  叢集中所有機器的hosts配置要要相同(推薦)。可以避免不必要的麻煩,用域名取代IP,方便配置。配置資訊如下:

10.211.55.12    nna  # NameNode Active
10.211.55.13    nns  # NameNode Standby
10.211.55.14 dn1  # DataNode1 10.211.55.15 dn2  # DataNode2 10.211.55.16 dn3  # DataNode3

  然後用scp命令,將hosts配置分發到各個節點。命令如下:

# 這裡以NNS節點為例子
scp /etc/hosts [email protected]:/etc/

2.4安裝SSH

  輸入如下命令:

ssh-keygen –t rsa

  然後一路按回車鍵,最後在將id_rsa.pub寫到authorized_keys,命令如下:

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

  在hadoop使用者下,需要給authorized_keys賦予600的許可權,不然免密碼登陸無效。在其他節點只需要使用 ssh-keygen –t rsa 命令,生產對應的公鑰,然後將各個節點的id_rsa.pub追加到nna節點的authorized_keys中。最後,將nna節點下的authorized_keys檔案通過scp命令,分發到各個節點的 ~/.ssh/ 目錄下。目錄如下:

# 這裡以NNS節點為例子
scp ~/.ssh/authorized_keys [email protected]:~/.ssh/

  然後使用ssh命令相互登入,看是否實現了免密碼登入,登入命令如下:

# 這裡以nns節點為例子
ssh nns

  若登入過程中木有提示需要輸入密碼,即表示密碼配置成功。

2.5關閉防火牆

  由於hadoop的節點之間需要通訊(RPC機制),這樣一來就需要監聽對應的埠,這裡我就直接將防火牆關閉了,命令如下:

chkconfig  iptables off

  注:如果用於生產環境,直接關閉防火牆是存在安全隱患的,我們可以通過配置防火牆的過濾規則,即將hadoop需要監聽的那些埠配置到防火牆接受規則中。關於防火牆的規則配置參見“linux防火牆配置”,或者通知公司的運維去幫忙配置管理。

  同時,也需要關閉SELinux,可修改 /etc/selinux/config 檔案,將其中的 SELINUX=enforcing 改為 SELINUX=disabled即可。

2.6修改時區

  各個節點的時間如果不同步,會出現啟動異常,或其他原因。這裡將時間統一設定為Shanghai時區。命令如下:

# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
cp: overwrite `/etc/localtime'? yes
修改為中國的東八區
# vi /etc/sysconfig/clock
ZONE="Asia/Shanghai"
UTC=false
ARC=false

2.7ZK(安裝,啟動,驗證)

2.7.1安裝

  將下載好的安裝包,解壓到指定位置,這裡為直接解壓到當前位置,命令如下:

tar -zxvf zk-{version}.tar.gz

  修改zk配置,將zk安裝目錄下conf/zoo_sample.cfg重新命名zoo.cfg,修改其中的內容:

# The number of milliseconds of each tick
# 伺服器與客戶端之間互動的基本時間單元(ms) 
tickTime=2000   

# The number of ticks that the initial  
# synchronization phase can take 
# zookeeper所能接受的客戶端數量 
initLimit=10  

# The number of ticks that can pass between  
# sending a request and getting an acknowledgement 
# 伺服器和客戶端之間請求和應答之間的時間間隔 
syncLimit=5

# the directory where the snapshot is stored. 
# do not use /tmp for storage, /tmp here is just  
# example sakes. 
# 儲存zookeeper資料,日誌的路徑
dataDir=/home/hadoop/data/zookeeper

# the port at which the clients will connect 
# 客戶端與zookeeper相互互動的埠 
clientPort=2181 
server.1= dn1:2888:3888 
server.2= dn2:2888:3888 
server.3= dn3:2888:3888

#server.A=B:C:D  其中A是一個數字,代表這是第幾號伺服器;B是伺服器的IP地址;C表示伺服器與群集中的“領導者”交換資訊的埠;當領導者失效後,D表示用來執行選舉時伺服器相互通訊的埠。

  接下來,在配置的dataDir目錄下建立一個myid檔案,裡面寫入一個0-255之間的一個隨意數字,每個zk上這個檔案的數字要是不一樣的,這些數字應該是從1開始,依次寫每個伺服器。檔案中序號要與dn節點下的zk配置序號一直,如:server.1=dn1:2888:3888,那麼dn1節點下的myid配置檔案應該寫上1。

2.7.2啟動

  分別在各個dn節點啟動zk程序,命令如下:

bin/zkServer.sh start

  然後,在各個節點輸入jps命令,會出現如下程序:

QuorumPeerMain

2.7.3驗證

  上面說的輸入jps命令,若顯示對應的程序,即表示啟動成功,同樣我們也可以輸入zk的狀態命令檢視,命令如下:

bin/zkServer.sh status

  會出現一個leader和兩個follower。

2.8HDFS+HA的結構圖

  HDFS配置HA的結構圖如下所示:

  上圖大致架構包括:

  1. 利用共享儲存來在兩個NN間同步edits資訊。以前的HDFS是share nothing but NN,現在NN又share storage,這樣其實是轉移了單點故障的位置,但中高階的儲存裝置內部都有各種RAID以及冗餘硬體,包括電源以及網絡卡等,比伺服器的可靠性還是略有提高。通過NN內部每次元資料變動後的flush操作,加上NFS的close-to-open,資料的一致性得到了保證。

  2. DN同時向兩個NN彙報塊資訊。這是讓Standby NN保持叢集的最新狀態的必須步驟。

  3. 用於監視和控制NN程序的FailoverController程序。顯然,我們不能在NN程序內部進行心跳等資訊同步,最簡單的原因,一次FullGC就可以讓NN掛起十幾分鍾,所以,必須要有一個獨立的短小精悍的watchdog來專門負責監控。這也是一個鬆耦合的設計,便於擴充套件或更改,目前版本里是用ZooKeeper(簡稱ZK)來做同步鎖,但使用者可以方便的把這個Zookeeper FailoverController(簡稱ZKFC)替換為其他的HA方案或leader選舉方案。

  4. 隔離(Fencing),防止腦裂,就是保證在任何時候只有一個主NN,包括三個方面:

    共享儲存fencing,確保只有一個NN可以寫入edits。

    客戶端fencing,確保只有一個NN可以響應客戶端的請求。

    DN fencing,確保只有一個NN向DN下發命令,譬如刪除塊,複製塊等等。

2.9角色分配

名稱

Host

職責

NNA

10.211.55.12

zkfc

NNS

10.211.55.13

zkfc

DN1

10.211.55.14

zookeeper

DN2

10.211.55.15

zookeeper

DN3

10.211.55.16

zookeeper

2.10環境變數配置

  這裡列出了所有的配置,後面配置其他元件,可以參考這裡的配置。 配置完成後,輸入:. /etc/profile(或source /etc/profile)使之立即生效。驗證環境變數配置成功與否,輸入:echo $HADOOP_HOME,若輸出對應的配置路徑,即可認定配置成功。

  注:hadoop2.x以後的版本conf資料夾改為etc檔案夾了

配置內容如下所示:

export JAVA_HOME=/usr/java/jdk1.7 
export HADOOP_HOME=/home/hadoop/hadoop-2.6.0 
export ZK_HOME=/home/hadoop/zookeeper-3.4.6 
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOM

2.11核心檔案配置

  注:這裡特別提醒,配置檔案中的路徑在啟動叢集之前,得存在(若不存在,請事先建立)。下面為給出本篇文章需要建立的路徑指令碼,命令如下:

mkdir -p /home/hadoop/tmp
mkdir -p /home/hadoop/data/tmp/journal
mkdir -p /home/hadoop/data/dfs/name
mkdir -p /home/hadoop/data/dfs/data
mkdir -p /home/hadoop/data/yarn/local
mkdir -p /home/hadoop/log/yarn
  • core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://cluster1</value>
    </property>

    <property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/tmp</value>
    </property>
    <property>
        <name>hadoop.proxyuser.hadoop.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.hadoop.groups</name>
        <value>*</value>
    </property>
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>dn1:2181,dn2:2181,dn3:2181</value>
    </property>
</configuration>
  • hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property>
        <name>dfs.nameservices</name>
        <value>cluster1</value>
    </property>
    <property>
        <name>dfs.ha.namenodes.cluster1</name>
        <value>nna,nns</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.cluster1.nna</name>
        <value>nna:9000</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.cluster1.nns</name>
        <value>nns:9000</value>
    </property>

    <property>
        <name>dfs.namenode.http-address.cluster1.nna</name>
        <value>nna:50070</value>
    </property>

    <property>
        <name>dfs.namenode.http-address.cluster1.nns</name>
        <value>nns:50070</value>
    </property>
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://dn1:8485;dn2:8485;dn3:8485/cluster1</value>
    </property>

    <property>
        <name>dfs.client.failover.proxy.provider.cluster1</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/home/hadoop/.ssh/id_rsa</value>
    </property>
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/home/hadoop/data/tmp/journal</value>
    </property>
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/home/hadoop/data/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/home/hadoop/data/dfs/data</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
    </property>

    <property>
        <name>dfs.journalnode.http-address</name>
        <value>0.0.0.0:8480</value>
    </property>
    <property>
        <name>dfs.journalnode.rpc-address</name>
        <value>0.0.0.0:8485</value>
    </property>
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>dn1:2181,dn2:2181,dn3:2181</value>
    </property>

</configuration>
  • map-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>nna:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>nna:19888</value>
    </property>
</configuration>
  • yarn-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property>
        <name>yarn.resourcemanager.connect.retry-interval.ms</name>
        <value>2000</value>
    </property>
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>dn1:2181,dn2:2181,dn3:2181</value>
    </property>

    <property>
        <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>nna</value>
    </property>

    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>nns</value>
    </property>
    <!--在namenode1上配置rm1,在namenode2上配置rm2,注意:一般都喜歡把配置好的檔案遠端複製到其它機器上,但這個在YARN的另一個機器上一定要修改 -->
    <property>
        <name>yarn.resourcemanager.ha.id</name>
        <value>rm1</value>
    </property>
    <!--開啟自動恢復功能 -->
    <property>
        <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</value>
    </property>
    <!--配置與zookeeper的連線地址 -->
    <property>
        <name>yarn.resourcemanager.zk-state-store.address</name>
        <value>dn1:2181,dn2:2181,dn3:2181</value>
    </property>
    <property>
        <name>yarn.resourcemanager.store.class</name>
        <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
    </property>
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>dn1:2181,dn2:2181,dn3:2181</value>
    </property>
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>cluster1-yarn</value>
    </property>
    <!--schelduler失聯等待連線時間 -->
    <property>
        <name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name>
        <value>5000</value>
    </property>
    <!--配置rm1 -->
    <property>
        <name>yarn.resourcemanager.address.rm1</name>
        <value>nna:8132</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address.rm1</name>
        <value>nna:8130</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm1</name>
        <value>nna:8188</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address.rm1</name>
        <value>nna:8131</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address.rm1</name>
        <value>nna:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.ha.admin.address.rm1</name>
        <value>nna:23142</value>
    </property>
    <!--配置rm2 -->
    <property>
        <name>yarn.resourcemanager.address.rm2</name>
        <value>nns:8132</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address.rm2</name>
        <value>nns:8130</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm2</name>
        <value>nns:8188</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address.rm2</name>
        <value>nns:8131</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address.rm2</name>
        <value>nns:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.ha.admin.address.rm2</name>
        <value>nns:23142</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property
            
           

相關推薦

一鍵配置可用Hadoop叢集(hdfs HA+zookeeper HA)

準備環境 3臺節點,主節點 建議 2G 記憶體,兩個從節點 1.5G記憶體, 橋接網路    關閉防火牆 配置ssh,讓節點之間能夠相互 ping 通 準備  軟體放到 autoInstall  目錄下,已存放 hadoop-2.9.0.tar.g

可用Hadoop平臺-啟航

1.概述   在上篇部落格中,我們搭建了《配置高可用Hadoop平臺》,接下來我們就可以駕著Hadoop這艘巨輪在大資料的海洋中遨遊了。工欲善其事,必先利其器。是的,沒錯;我們開發需要有開發工具(IDE);本篇文章,我打算講解如何搭建和使用開發環境,以及編寫和講解WordCount這個例子,給即將在Hado

可用Hadoop平臺-Flume NG實戰圖解篇

1.概述   今天補充一篇關於Flume的部落格,前面在講解高可用的Hadoop平臺的時候遺漏了這篇,本篇部落格為大家講述以下內容: Flume NG簡述 單點Flume NG搭建、執行 高可用Flume NG搭建 Failover測試 截圖預覽   下面開始今天的部落格介紹。 2.F

配置可用Hadoop平臺

1.概述   在Hadoop2.x之後的版本,提出瞭解決單點問題的方案--HA(High Available 高可用)。這篇部落格闡述如何搭建高可用的HDFS和YARN,執行步驟如下: 建立hadoop使用者 安裝JDK 配置hosts 安裝SSH 關閉防火牆 修改時區 ZK(安裝,啟動,

hadoop+Zookeeper叢集安裝配置可用-HadoopHA

1、請看:https://blog.csdn.net/sunxiaoju/article/details/85222290,此處只是配置系統的:硬體配置以及作業系統、節點需要安裝的工具、安裝JDK環境、建立hadoop使用者、建立ssh無密碼登入本機前五部分,第6部分的hadoop安裝在此博文中

MySQL+Keepalived配置可用

9.png 從庫 vim http cnblogs 服務器環境 -1 image vip 服務器環境: 主mysql:192.168.1.163 從mysql:192.168.1.126 VIP:192.168.1.50 一、mysql配置主從同步 1、配置主mysql服務

配置可用集群(環境)

inter 允許 nat sage rep list sha 啟動 meta 一準備三個虛擬機,把/etc/hosts/文件配置好 192.168.43.9 node0

集群介紹,keepalived介紹,使用keepalived配置可用集群

集群 linux keepalived 服務器 筆記內容:18.1 集群介紹18.2 keepalived介紹18.3 用keepalived配置高可用集群(上)18.4 用keepalived配置高可用集群(中)18.5 用keepalived配置高可用集群(下)筆記日期:2017-11-1

18.1集群介紹 18.2 keepalived介紹18.3/18.4/18.5 用keepalived配置可用集群

18.1集群介紹 18.2 keepalived介紹18.3/18.4/18.5 用keepalived配置高可用集群- 18.1 集群介紹 - 18.2 keepalived介紹 - 18.3/18.4/18.5 用keepalived配置高可用集群 - 擴展 - heartbeat和keepalived

18.1 集群介紹 18.2 keepalived介紹 18.3/18.4/18.5 用keepalived配置可用集群

18.1 集群介紹 18.2 keepalived介紹 18.3/18.4/18.5 用keepalived配置高可用集群- 18.6 負載均衡集群介紹 - 18.7 LVS介紹 - 18.8 LVS調度算法 - 18.9/18.10 LVS NAT模式搭建 - 擴展 - lvs 三種模式詳解 http:/

集群介紹、keepalived介紹、用keepalived配置可用集群

keepalived服務集群介紹Linux集群根據功能劃分為兩大類:高可用和負載均衡。1、高可用集群通常為2臺服務器,一臺工作,另一臺作為冗余,當提供服務的機器宕機時,冗余將接替繼續提供服務。實現高可用的開源軟件有:heartbeat、Keepalived,其中heartbeat很多bug已無人維護(不推薦使

Linux集群(keepalived介紹,Keepalived配置可用集群,Keepa+mysql

開源軟件 adding aux 維護 fault etc 服務器 eve 之前 一、Linux集群概述根據功能劃分為兩大類:高可用和負載均衡(1)高可用集群通常為兩臺服務器,臺工作,另外一臺作為準備,當提供服務的機器宕機,另外一臺將接替繼續提供服務。實現高可用的開源軟件有:

heartbeat v2 haresource配置可用集群

高可用 heartbeat haresource heartbeat v2提供了完整的高可用方案,既包含了Messaging Layer,又包含CRM,其中CRM有haresource(默認)和crm,本文基於haresource配置一、環境介紹:Node1: CentOS6 192.1

corosync+pacemaker配置可用集群

corosync 高可用 crm 一、環境介紹:Node1: CentOS6 192.168.9.168 192-168-9-168CentOS6 192.168.9.176 192-168-9-176VIP: 192.168.9.144corosync和pacemak

用keepalived配置可用集群

keepalived1 keepalived是什麽?  Keepalived軟件起初是專為LVS負載均衡軟件設計的,用來管理並監控LVS集群系統中各個服務節點的狀態,後來又加入了可以實現高可用的VRRP功能。因此,Keepalived除了能夠管理LVS軟件外,還可以作為其他服務(例如:Nginx、Haprox

2018-4-9 15周4次課 用keepalived配置可用集群

keepalived18.1 集群介紹·根據功能劃分為兩大類:高可用和負載均衡·高可用集群通常為兩臺服務器,一臺工作,另外一臺作為冗余,當提供服務的機器宕機,冗余將接替繼續提供服務·實現高可用的開源軟件有:heartbeat、keepalived·負載均衡集群,需要有一臺服務器作為分發器,它負責把用戶的請求分

18.1集群介紹18.2keepalived介紹18.3-5用keepalived配置可用集群

十五周四次課(4月9日)18.1集群介紹18.2 keepalived介紹18.3 18.4 18.5 用keepalived配置高可用集群這裏是用ngixn作為高可用的演示對象,因為有生產中很多企業用nginx作為負載均衡器使用編輯130上keepalived配置文件,內容從https://coding.n

linux集群介紹、用Keepalived配置可用集群

Linux學習筆記linux集群介紹 用Keepalived配置高可用集群 linux集群介紹、用Keepalived配置高可用集群

Linux集群架構(1)集群介紹、keepalived介紹、用keepalived配置可用集群

高可用keepalived 集群介紹 這些實現高可用和負載均衡的都是軟件,是為我們在服務器上的服務所作用的。 keepalived介紹 用keepalived配置高可用集群在nginx上實現高可用: 準備工作:準備兩臺機器133和

18.1-18.5 集群介紹,用keepalived配置可用集群

高可用 keepalived 集群 18.1 集群介紹根據功能劃分為兩大類:高可用和負載均衡高可用集群通常為兩臺服務器,一臺工作,另外一臺作為冗余,當提供服務的機器宕機,冗余將接替繼續提供服務大概意思是:高可用一般使用兩臺機器,功能,角色是一樣的。當一臺服務器宕機不能服務了,利用另外的服務器頂替。