hadoop2.7.6五臺機器HA高可用centos6.5,無任何格式和配置bug可直接完成操作全過程

ljwha

準備

虛擬機準備

1. 概念:集羣是真實環境的多臺機器,共同配合完成一個分佈式文件系統的構建
2. 環境:centos6.5,hadoop2.7.6,jdk1.8+
3. 準備工作:

   1. linux,jdk,hadoop-2.7.6,  全程必須使用普通用戶hadoop.
      2. 免密登陸
      3. 時間同步
      4. 防火牆設置開機不啓動:chkconfig iptables off---設置開機不啓動
         	   service iptables stop ----關閉當前運行中的防火牆
      5. /etc/hosts映射關係。hostname必須要確定
      6. jdk和hadoop的環境變量的配置: ~/.bash_profile
      7.最好在/etc/sudoers下面將hadoop加上,不然使用hadoop用戶後面很麻煩
  • jdk1.8,配的全局
  • 用戶hadoop
  • 配置完成ssh
  • /opt/apps是解壓完成軟件的路徑
  • /opt/software是包文件夾

規劃

  • 此處的slave1是一個namenode,我沒有改映射和主機名所以就這樣用了
username host 進程
master 192.168.111.200 namenode
slave1 192.168.111.201 namenode
slave2 192.168.111.202 datanonde
slave3 192.168.111.203 datanonde
slave4 192.168.111.204 datanonde

解壓

  • 解壓zookeeper

  • tar -zxvf

  • 重要:權限

    • 普通用戶所有權限

      sudo chmod -R a+w /opt/apps/hadoop-2.7.6/
      sudo chown -R hadoop:hadoop /opt/apps/hadoop-2.7.6/
      
  • 配置hadoop和zookeeper的環境變量

    • 整個:

    • HADOOP_HOME=/opt/apps/hadoop-2.7.6
      ZOO_HOME=/opt/apps/zookeeper-3.4.7
      PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOO_HOME/bin:
      export HADOOP_HOME ZOO_HOME PATH
      
    • source ~/.bash_profile 初始化環境變量

  • 後面的hadoop也一樣加壓至/opt/apps

zookeeper

  • 配置zookeeper-3.4.7/conf/zoo.cfg文件

  • tickTime=2000
    
    initLimit=5
    
    syncLimit=2
    
    dataDir=/opt/apps/zookeeper-3.4.7/tem/zkdata/
    
    clientPort=2181
    
    server.1=master:2888:3888
    server.2=slave1:2888:3888
    server.3=slave2:2888:3888
    server.4=slave3:2888:3888
    server.5=slave4:2888:3888
    
  • 在dataDir=/opt/apps/zookeeper-3.4.7/tem/zkdata/下創建myid文件,裏面爲服務的號1,2,3,4,5,根據下面設定的主機名分別修改爲1,2,3,4,5即可

  • zookeeper分發五臺機器,每一臺如果權限不對也需要和全部給到權限

HADOOP

  • 解壓完成後用戶權限和組

    sudo chown -R hadoop:hadoop  hadoop-2.7.6/
    sudo chmod -R a+w /opt/apps/hadoop-2.7.6/
    
  • slaves文件

    vi hadoop-2.7.6/etc/hadoop/slaves

    • 想讓誰成爲datanode節點就寫上,此處我全部都是datanode
    master
    slave1
    slave2
    slave3
    slave4
    
  • core-site.xml

    vi hadoop-2.7.6/etc/hadoop/core-site.xml

    
    <configuration>
    <!--指定HDFS的命名空間-->
    <!-- 默認文件系統的名稱。一個URI的方案和權限決定文件系統的實現。的uri的模式決配置屬性(fs. schema .impl)的命名文件系統實現類。uri的權限用於確定文件系統的主機、端口等-->
    <property>
      <name>fs.defaultFS</name>
      <value>hdfs://ljwha</value>
    </property>
    
    <!--其他臨時目錄的基礎,-->
    <property>
      <name>hadoop.tmp.dir</name>
      <value>/opt/apps/hadoop-2.7.6/hadoopdata/tmp</value>
    </property>
    
    <!--用於序列文件的緩衝區的大小。這個緩衝區的大小應該是硬件的倍數(Intel x86上的4096),它決定有多少數據在讀寫操作期間緩衝。-->
    <property>
      <name>io.file.buffer.size</name>
      <value>4096</value>
    </property>
    
    <!--用逗號分隔的ZooKeeper服務器地址列表在自動故障轉移中由 ZKFailoverController使用。-->
    <!-- 指定zookeeper集羣地址,輔助兩個namenode進行失敗切換 -->
     <property>
       <name>ha.zookeeper.quorum</name>
       <value>master:2181,slave1:2181,slave2:2181,slave3:2181,slave4:2181</value>
     </property>
    
     <property>
      <name>ipc.client.connect.max.retries</name>
      <value>100</value>
     </property>
     <property>
      <name>ipc.client.connect.retry.interval</name>
      <value>10000</value>
     </property>
    
    </configuration>
    
    
  • hdfs-site.xml

    修改時注意有些地方都需要將我的ljwHA改成自己core文件中的命名空間的,不然永遠都是bug

    hadoop-2.7.6/etc/hadoop/hdfs-site.xml

    <configuration>
    
    <!--配置副本數-->
    <property>
      <name>dfs.replication</name>
      <value>3</value>
    </property>
    
    <!--塊大小-->
    <property>
    <name>dfs.block.size</name>
    <value>134217728</value>
    </property>
    
    <!--下面兩個文件不改默認的配置路徑也沒問題,因爲在core文件中已經配置了hadoop.tmp.dir文件,有了臨時目錄,name和data都存在這個目錄下,但是如果整個路徑都改了不在hadoop文件下的temp這樣,那就需要全部重新制定你的目錄-->
    <!--HDFS元數據存儲位置-->
    <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:///opt/apps/hadoop-2.7.6/hadoopdata/dfs/name</value>
    </property>
    
    <!--HDFS數據的存儲位置-->
    <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///opt/apps/hadoop-2.7.6/hadoopdata/dfs/data</value>
    </property>
        
    <!-- 指定hdfs的虛擬服務名 -->
    <property>
      <name>dfs.nameservices</name>
      <value>ljwha</value>
    </property>
    
    <!--指定hdfs的兩虛擬服務名下的namenode名字-->
    <property>
      <name>dfs.ha.namenodes.ljwha</name>
      <value>nn1,nn2</value>
    </property>
    
    <!--指定nameNode的內部通信地址-->
    <property>
      <name>dfs.namenode.rpc-address.ljwha.nn1</name>
      <value>master:8020</value>
    </property>
    <!--指定nameNode的內部通信地址-->
    <property>
      <name>dfs.namenode.rpc-address.ljwha.nn2</name>
      <value>slave1:8020</value>
    </property>
    
    <!--NameNode1的web ui通信地址-->
    <property>
      <name>dfs.namenode.http-address.ljwha.nn1</name>
      <value>master:50070</value>
    </property>
    <!--NameNode2的web ui 通信地址-->
    <property>
      <name>dfs.namenode.http-address.ljwha.nn2</name>
      <value>slave1:50070</value>
    </property>
    
    <!--指定jouranlnode數據共享目錄-->
    <property>
      <name>dfs.namenode.shared.edits.dir</name>
      <value>qjournal://master:8485;slave1:8485;slave2:8485;slave3:8485;slave4:8485/ljwha</value>
    </property>
    
    <!--指定namenode失敗進行自動切換的主類-->
    <property>
      <name>dfs.client.failover.proxy.provider.ljwha</name>
      <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    
    <!--防止多個namenode同時active(腦裂)的方式,殺死其中一個-->
    <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.ha.fencing.ssh.connect-timeout</name>
      <value>30000</value>
    </property>
    
    <!-- 指定jouranlnode本地共享目錄-->
    <property>
      <name>dfs.journalnode.edits.dir</name>
      <value>/opt/apps/hadoop-2.7.6/hadoopdata/journal/node/local/data</value>
    </property>
    
    <!--開啓hdfs的namenode死亡後自動切換-->
     <property>
       <name>dfs.ha.automatic-failover.enabled</name>
       <value>true</value>
     </property>
    
    </configuration>
    
    
  • yarn-site.xml

    <!--指定MapReduce的shuffle-->
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property>
    <!--是否啓用yarn的ha-->
    <property>
      <name>yarn.resourcemanager.ha.enabled</name>
      <value>true</value>
    </property>
    <!--yarn的虛擬服務名-->
    <property>
      <name>yarn.resourcemanager.cluster-id</name>
      <value>ljwyarn</value>
    </property>
    <!--yarn的虛擬服務名下的具體的rm-->
    <property>
      <name>yarn.resourcemanager.ha.rm-ids</name>
      <value>rm1,rm2</value>
    </property>
    <!--指定rm1所啓動的主機-->
    <property>
      <name>yarn.resourcemanager.hostname.rm1</name>
      <value>master</value>
    </property>
    <property>
      <name>yarn.resourcemanager.hostname.rm2</name>
      <value>slave1</value>
    </property>
    <!--指定rm1的web ui的通信地址-->
    <property>
      <name>yarn.resourcemanager.webapp.address.rm1</name>
      <value>master:8088</value>
    </property>
    <property>
      <name>yarn.resourcemanager.webapp.address.rm2</name>
      <value>slave1:8088</value>
    </property>
    <property>
      <name>yarn.resourcemanager.zk-address</name>
      <value>master:2181,slave1:2181,slave2:2181,slave3:2181,slave4:2181</value>
    </property>
    
    
  • map-site.xml

    <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
            <final>true</final>
    </property>
    
  • hadoop-env.sh

    此文件加將jdk的路徑改成自己的

分發

  • 分發到所有節點

  • scp -r /opt/apps/hadoop-2.7.6/ slave1:/opt/apps/
    
  • 改用戶權限

    chowm -R hadoop:hadoop /opt/apps/hadoop-2.7.6/
    

初始化

  • 一定要按照流程
啓動zk
zkServer.sh start


 jps查看
2674 Jps
2647 QuorumPeerMain

啓動journalnode服務
hadoop-daemon.sh start journalnode

 jps查看
2739 JournalNode
2788 Jps
2647 QuorumPeerMain


挑選兩個namenode之中的一臺來格式化
hdfs namenode -format


然後啓動namenode
hadoop-daemonsh start namenode


在另一臺namenode的機子上拉取元數據

hdfs namenode -bootstrapStandby

格式化zkfc(在namenode節點)
hdfs zkfc -formatZK
  • 如果初始化出現問題導致後面namenode節點啓動不了的一系列問題,簡單粗暴,將所有機器的兩個目錄全部幹掉rm -rf /opt/apps/hadoop-2.7.6/logs/ /opt/apps/hadoop-2.7.6/hadoopdata/

  • 無任何bug

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章