Hadoop 12節點集羣搭建配置清單

Hadoop 12節點集羣搭建

U盤掛載操做以下:

此步驟是 U盤給Linux上掛載顯示,如無此需求請忽略此步。java

  • 1) 插入U盤
  • 2) 輸入 fdisk -l 查看輸出結果,好比個人是這樣的:
    ...
    Device Boot Start End Blocks Id System
    /dev/sdb1 * 1 2668 128016 6 FAT16
  • 3) 看了上面的輸出就知道U盤所在的設備了,好比個人就是/dev/sdb1,接着即是掛載了
    # 先建立一個掛載目錄
    $ mkdir /mnt/usb
    # 若是是U盤文件格式爲 fat32,就用命令:
    $ mount -t vfat /dev/sdb1 /mnt/usb
    # 若是是U盤文件格式爲 ext2格式,就用命令:
    $ mount -t ext2 /dev/sda1 /mnt/usb
    # 若是是U盤文件格式爲 ntfs,就用命令:
    # 先安裝ntfs-3g:
    $ yum install ntfs-3g
    $ mount -t ntfs-3g /dev/sda1 /ntfs
  • 4) 能夠查看掛載狀況
    $ df –lh
  • 5) 打開/mnt/usb 就能夠看到你的U盤裏的東西了!
    $ cd /mnt/usb
  • 6) 卸載命令則爲:
    $ umount  /mnt/usb

每一個節點部署服務配置清單:

節點名稱 IP地址 安裝服務
hadoop001 192.168.0.10 NameNode、DFSZKFailoverController(ZKFC)
hadoop002 192.168.0.11 DataNode、NodeManager、JournalNode、QuorumPeerMain、ZooKeeper
hadoop003 192.168.0.12 DataNode、NodeManager、JournalNode、QuorumPeerMain、ZooKeeper
hadoop004 192.168.0.13 ResourceManager
hadoop005 192.168.0.14 DataNode、NodeManager
hadoop006 192.168.0.15 DataNode、NodeManager
hadoop007 192.168.0.16 NameNode、DFSZKFailoverController(ZKFC)
hadoop008 192.168.0.17 DataNode、NodeManager、JournalNode 、QuorumPeerMain 、zookeeper --- JN用來同步兩個NN之間的數據,standbay的NN至關於SNN
hadoop009 192.168.0.18 ResourceManager
hadoop010 192.168.0.19 DataNode、NodeManager
hadoop011 192.168.0.20 DataNode、NodeManager
hadoop012 192.168.0.21 DataNode、NodeManager

關於爲何沒有secondarynamenode,由於standby狀態的NameNode能夠完成checkpoint操做,所以不必配置Secondary NameNode、CheckpointNode、BackupNode。若是真的配置了,還會報錯。node


配置步驟:

  • 1.1 首先配置zookeeper (hadoop002,hadoop003,hadoop008)
$ cd /hadoop/zookeeper-3.4.6/conf/
$ cp zoo_sample.cfg zoo.cfg
$ vim zoo.cfg

#修改如下內容長度
dataDir=/hadoop/zookeeper-3.4.6/tmp

#在最後添加:
server.1=hadoop104:2888:3888
server.2=hadoop105:2888:3888
server.3=hadoop106:2888:3888
#保存退出
注:2888是leader和follower通訊的端口,3888是投票用的端口
  • 1.2 而後建立一個tmp文件夾
    $ mkdir /hadoop/zookeeper-3.4.6/tmp
  • 1.3 再建立一個空文件
    $ touch /hadoop/zookeeper-3.4.6/tmp/myid
  • 1.4 最後向該文件寫入ID,填入myid文件裏
    #hadoop104機器:
    $ echo 1 > /hadoop/zookeeper-3.4.6/tmp/myid
    #hadoop105機器:
    $ echo 2 > /hadoop/zookeeper-3.4.6/tmp/myid
    #hadoop106機器:
    $ echo 3 > /hadoop/zookeeper-3.4.6/tmp/myid

  • 2.1 配置$HADOOP_HOME/etc/hadoop目錄下的配置文件 core-site.xmlapache

    $ vim core-site.xml
    #全部設置的文件夾都要提早建好(很重要)
    #【這裏的值指的是默認的HDFS路徑。當有多個HDFS集羣同時工做時,集羣名稱在這裏指定!該值來自於hdfs-site.xml中的配置】
    <configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://myha</value>
    </property>
    #【這裏的路徑默認是NameNode、DataNode、JournalNode等存放數據的公共目錄。用戶也能夠本身單獨指定這三類節點的目錄。】
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:///home/hadoop/tmp</value>
    </property>
    #【io數據塊大小】
    <property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
    </property>
    #【FSImage文件和EditsLog文件能夠經過ID來互相關聯。在參數dfs.namenode.name.dir設置的路徑下,會保存FSImage文件和EditsLog文件,若是是QJM方式HA的話,EditsLog文件保存在參數dfs.journalnode.edits.dir設置的路徑下。】
    <property>
        <name>dfs.journalnode.edits.dir</name><value>/home/hadoop/journaldata</value>  #注意,不要加file
    </property>
    #【這裏是ZooKeeper集羣的地址和端口。注意,數量必定是奇數,且很多於三個節點】
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>hadoop002:2181,hadoop003:2181,hadoop008:2181</value>
    </property>
    </configuration>
  • 2.2 修改配置文件 core-site.xml
$ vim hdfs-site.xml
#【指定DataNode存儲block的副本數量。默認值是3個,咱們如今有4個DataNode,該值不大於4便可。】
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
#【使用federation時,HDFS集羣別名。名字能夠隨便起,多個集羣時相互不重複便可】
    <property>
        <name>dfs.nameservices</name>
        <value>myha</value>
    </property>
#【指定該集羣的namenode的機器】
    <property>
        <name>dfs.ha.namenodes.myha</name>
        <value>hadoop001,hadoop007</value>
    </property>
#【指定hadoop100的RPC地址】
    <property>
        <name>dfs.namenode.rpc-address.myha.hadoop001</name>
        <value>hadoop001:9000</value>
    </property>
#【指定hadoop100的http地址】
    <property>
        <name>dfs.namenode.http-address.cluster1.hadoop001</name>
        <value>hadoop001:50070</value>
    </property>
#【指定hadoop101的RPC地址】
    <property>
        <name>dfs.namenode.rpc-address.myha.hadoop101</name>
        <value>hadoop101:9000</value>
    </property>
#【指定hadoop101的http地址】
    <property>
        <name>dfs.namenode.http-address.myha.hadoop101</name> 
        <value>hadoop101:50070</value>
    </property>

#【指定該集羣的兩個NameNode共享edits文件目錄時,使用的JournalNode集羣信息】
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://hadoop002:8485;hadoop003:8485;hadoop008:8485/myha</value>
    </property>
#【指定該集羣是否啓動自動故障恢復,即當NameNode出故障時,是否自動切換到另外一臺NameNode】
    <property>
        <name>dfs.ha.automatic-failover.enabled.myha</name>
        <value>true</value>
    </property>
#【指定該集羣出故障時,哪一個實現類負責執行故障切換】
    <property>
        <name>dfs.client.failover.proxy.provider.myha</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
#【一旦須要NameNode切換,使用ssh方式進行操做】
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>
#【若是使用ssh進行故障切換,使用ssh通訊時用的密鑰存儲的位置】
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>file:///root/.ssh/id_rsa</value>
    </property>
#【connect-timeout鏈接超時】
    <property>
        <name>dfs.ha.fencing.ssh.connect-timeout</name>
        <value>30000</value>
    </property>

    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///home/hadoop/tmp/dfs/name</value>
    </property>
#【設置】
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///home/hadoop/tmp/dfs/data</value>
    </property>
</configuration>
  • 2.3 修改配置文件 mapred-site.xml
$ vim mapred-site.xml

<configuration>
#【指定運行mapreduce的環境是yarn,與hadoop1大相徑庭的地方】
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>
  • 2.4 修改配置文件 yarn-site.xml
$ vim yarn-site.xml

<configuration>
#【啓動HA高可用性】
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
#【指定resourcemanager的名字,不能與zookeeper的命名相同】
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>yrc</value>
    </property>
#【使用了2個resourcemanager,分別指定Resourcemanager的地址】
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
#【自定ResourceManager1的地址】
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>hadoop102</value>
    </property>
#【自定ResourceManager2的地址】
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>hadoop103</value>
    </property>
#【制定Zookeeper機器】
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>hadoop104:2181,hadoop105:2181,hadoop106:2181</value>
    </property>
#【默認】
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>
    • 2.5 在hadoop-env.sh 和 yarn-env.sh 中配置JAVA_HOME

啓動報錯:

注:若是在啓動的時候報bootstrap

#WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

能夠在hadoop/etc/hadoop/log4j.properties 文件中添加vim

log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERRO

注意:
在 hadoop/etc/hadoop 下記得創建 slave 文件bash

啓動過程:

  • 1) 啓動zookeeper集羣(在主機名hadoop00二、hadoop00三、hadoop008上啓動)app

    $ cd cd /home/hadoop/apps/zookeeper/
    $ bin/zkServer.sh start (逐個啓動)
    #查看狀態:一個leader,兩個follower
    bin//zkServer.sh status
  • 2) 啓動journalnode(分別在在主機名hadoop00二、主機名hadoop00三、主機名hadoop008上執行)
    $ cd $HADOOP_HOME
    $ sbin/hadoop-daemon.sh start journalnode
  • 3) 驗證ssh

    $ jps
    #顯示JouralNode + QuorumpeerMain
  • 4) 格式化namenode(hadoop001)
$ hdfs namenode -format
  • 5) 格式化ZKFC(在hadoop001上執行)
$ hdfs zkfc -formatZK
  • 6) NameNode從hadoop001同步到hadoop007
    1.在hadoop007執行 hdfs namenode bootstrapstandby
    2.驗證 tmp下生成dfs
    3.若是1失敗(在hadoop001執行) ide

    ssh-keygen -f "~/.ssh/known_hosts" -R hadoop007

    4.驗證 tmp下生成dfs
    5.或者直接拷貝 tmp 目錄到 hadoop007oop

  • 7) 啓動NameNode和DataNode
    注意:每次啓動前都要先啓動zookeeper
    $ start-dfs.sh
    #驗證 jps
  • 8) 啓動yarn(在hadoop004執行)

    $ start-yarn.sh
    #驗證: jps
    #顯示ResourceManager + NodeManager
  • 9) 啓動ZookeeperFailoverController(hadoop001和007執行)
    $ hadoop-daemon.sh start zkfc
    #驗證
    jps
    #顯示DFSZKFailoverController

兩臺nomenode在 start-all.sh的時候,50070都是現實standby,在啓動zkfc的時候 nn1 顯示爲active

怎麼設置默認的日誌級別爲WARN呢?

Hadoop使用的是log4j記錄日誌,咱們理所固然會想到去修改${HADOOP_HOME}/etc/hadoop/log4j.properties,可是改完重啓,你會發現然並卵!!!

尼瑪,這是爲啥,認真看了下log4j.properties的配置說明,發現一個關鍵點:

# Define some default values that can be overridden by system properties
hadoop.root.logger=WARN,console

意思就是說,這裏的配置會被系統屬性覆蓋!

因而乎,查了下可能會設置系統屬性的腳本,發現須要修改如下2個文件,才能把默認的日誌級別改掉(我這裏只改的HDFS的,Yarn的自行參考便可):

第一處是${HADOOP_HOME}/etc/hadoop/hadoop-env.sh,把INFO改成WARN便可:

# Command specific options appended to HADOOP_OPTS when specifiedexport HADOOP_NAMENODE_OPTS="-Xmx30720m -Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-WARN,RFAS} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-WARN,NullAppender} $HADOOP_NAMENODE_OPTS"

還有一處藏的比較深,是啓動腳本${HADOOP_HOME}/sbin/hadoop-daemon.sh,也須要這樣改一下:

export HADOOP_ROOT_LOGGER=${HADOOP_ROOT_LOGGER:-"WARN,RFA"}

最後在重啓下NameNode就能夠了。

線上配合Zookeeper作了HA,因此能夠平滑重啓,直接使用如下命令先重啓standby的NameNode,在將standby切換爲active,在重啓另外一臺NameNode就能夠了。

先重啓standbycd ${HADOOP_HOME}/sbin

./hadoop-daemon.sh stop namenode
./hadoop-daemon.sh start namenode

切換active節點,這裏的nn2將被切換爲active節點

hdfs haadmin -failover <nn1> <nn2>

最後重啓nn2就完事了,重啓方式同上

本文來自 QQ羣的大佬 @托馬斯維德 分享的。我就給整理 copy 過來了。謝謝大佬,謝謝你們!

相關文章
相關標籤/搜索