(一):虛擬機新建五個centos7系統(複製文件夾的方式)
(二):角色分配
html
(三)按照角色分配表配置
(1)更改主機ip(自行查找),若是隻是我的搭建玩一玩,可選擇安裝centos7圖形界面操做比較簡單
(2)更改主機名方法, vim /etc/hostname文件,修改爲對應的主機名,保存(好比在192.168.254.2這臺主機上,就修改爲master)。再執行hostname 主機名,進行設置。
(3)在五個虛擬機系統中修改/etc/hosts文件,添加以下內容java
192.168.254.2 master 192.168.254.3 master2 192.168.254.4 slave01 192.168.254.5 slave02 192.168.254.6 slave03
(四)關閉五臺虛擬機系統上的防火牆firwall(或者iptable),樓主的仍是firewallnode
關閉: systemctl stop firewalld 開機禁用 : systemctl disable firewalld
(五)配置完成後,五臺主機相互ping 主機名(好比ping slave01),看是否可ping通,若是不能檢查虛擬機的網絡適配器模式(方式多種),樓主選擇的是nat方式可參考以下:
(1)進入本機的虛擬網卡8,而後設置其網關爲192.168.254.254(和虛擬機裏面配置的ip的網關同樣,並且虛擬機系統的ip要和本地網卡8的ip在同一個網段)
(六)建立專門的用戶linux
useradd hadoop (建立用戶) passwd hadoop (設置密碼,5臺機器上的hadoop密碼最好設置成同樣(容易記),好比hadoop123) 建議將hadoop加入root用戶組,操做方法: 先以root身份登陸,而後輸入 usermod -g root hadoop ,執行完後hadoop即歸屬於root組了,能夠再輸入 id hadoop 查看輸出驗證一下,若是看到相似下面的輸出: uid=502(hadoop) gid=0(root) 組=0(root) 就表示OK了
(七)配置ssh,免密登陸(由於各個主機之間會進行自主通信,因此必須配置)
(1)首先配置master,
①在master上,生成公鑰、私鑰對。web
以hadoop身份登陸到系統 cd (進入我的主目錄,默認爲/home/hadoop) ssh-keygen -t rsa -P '' (注:最後是二個單引號)
即:以rsa算法,生成公鑰、私鑰對,-P ''表示空密碼。該命令運行完後,會在我的主目錄下生成.ssh目錄,裏面會有二個文件id_rsa(私鑰) ,id_rsa.pub(公鑰)算法
②導入公鑰apache
cat .ssh/id_rsa.pub >> .ssh/authorized_keys chmod 600 .ssh/authorized_keys 執行完之後,能夠在本機上測試下,用ssh鏈接本身,即:ssh master。若是不須要輸入密碼,就鏈接成功,表示ok,一臺機器已經搞定了。
(2)配置其餘四臺系統,按照以下
①在其餘四臺上生成公鑰、私鑰對。bootstrap
以hadoop身份登陸到系統 cd (進入我的主目錄,默認爲/home/hadoop) ssh-keygen -t rsa -P '' (注:最後是二個單引號)
即:以rsa算法,生成公鑰、私鑰對,-P ''表示空密碼。該命令運行完後,會在我的主目錄下生成.ssh目錄,裏面會有二個文件id_rsa(私鑰) ,id_rsa.pub(公鑰)vim
②而後用scp命令,把公鑰文件發放給master(即:已經配置完成的那臺機器)centos
master2上: scp .ssh/id_rsa.pub hadoop@master:/home/hadoop/id_rsa_01.pub slave01上: scp .ssh/id_rsa.pub hadoop@master:/home/hadoop/id_rsa_02.pub slave02上: scp .ssh/id_rsa.pub hadoop@master:/home/hadoop/id_rsa_03.pub slave03上 scp .ssh/id_rsa.pub hadoop@master:/home/hadoop/id_rsa_04.pub
這四臺行執行完後,回到master中,查看下/home/hadoop目錄,會有四個新文件id_rsa_01.pub、id_rsa_02.pub,id_rsa_03.pub,id_rsa_04.pub 而後在master上,導入這四個公鑰
cat id_rsa_01.pub >> .ssh/authorized_keys cat id_rsa_02.pub >> .ssh/authorized_keys cat id_rsa_03.pub >> .ssh/authorized_keys cat id_rsa_04.pub >> .ssh/authorized_keys
這樣,master這臺機器上,就有全部5臺機器的公鑰了。
③在master上使用scp把authorized_keys發送給其餘四臺機器,執行命令以下:
scp .ssh/authorized_keys hadoop@master2:/home/hadoop/.ssh/authorized_keys scp .ssh/authorized_keys hadoop@slave01:/home/hadoop/.ssh/authorized_keys scp .ssh/authorized_keys hadoop@slave02:/home/hadoop/.ssh/authorized_keys scp .ssh/authorized_keys hadoop@slave03:/home/hadoop/.ssh/authorized_keys
④修改其它機器上authorized_keys文件的權限
在其餘四臺系統上,均執行命令 chmod 600 .ssh/authorized_keys
⑤驗證
在每一個虛擬機上,均用 ssh 其它機器的hostname 驗證下(如在master上ssh slave01),若是能正常無密碼鏈接成功,表示ok
至此基礎的環境配置完成,接下來安裝須要軟件
可自行百度如何安裝jdk1.8 也能夠參考linux下安裝oracle jdk
若是我的搭建測試(使用虛擬機文件夾複製的方式來建立多臺主機的可不用同步),若是不是安裝ntpdate進行時間的同步
(1)下載zookeeper3.4.5, 下載鏈接
(2)上傳zookeeper-3.4.5.tar.gz至slave01的/home/hadoop/目錄下,登錄到slave01上,切換hadoop用戶
(3)解壓壓縮包 tar -zvxf zookeeper-3.4.5.tar.gz
(4)解壓後進入該目錄,並cd conf 將 zoo_sample.cfg 修改成zoo.cfg,執行命令,mv zoo_sample.cfg zoo.cfg
(5)修改zoo.cfg,執行vim zoo.cfg以下後保存
tickTime=2000 initLimit=5 syncLimit=2 dataDir=/home/hadoop/storage/zookeeper/data dataLogDir=/home/hadoop/storage/zookeeper/logs clientPort=2181 server.1=slave01:2888:3888 server.2=slave02:2888:3888 server.3=slave03:2888:3888
(6)建立目錄/home/hadoop/storage/zookeeper/data和/home/hadoop/storage/zookeeper/logs目錄,mkdir .....
(7)將配置好的zookeeper-3.4.5目錄發送到slave02,slave03上
在slave01上執行 scp -r /home/hadoop/zookeeper-3.4.5 hadoop@slave02:/home/hadoop/ scp -r /home/hadoop/zookeeper-3.4.5 hadoop@slave03:/home/hadoop/
(8)寫入id
在slave01上執行 echo '1' > /home/hadoop/storage/zookeeper/data/myid (這邊的1對應的是上面配置的server.1) 在slave02上執行 echo '2' > /home/hadoop/storage/zookeeper/data/myid (這邊的2對應的是上面配置的server.2) 在slave03上執行 echo '3' > /home/hadoop/storage/zookeeper/data/myid (這邊的3對應的是上面配置的server.3)
(9)驗證(分別登陸slave01,slave02,slave03啓動zookeeper)
①進入/home/hadoop/zookeeper-3.4.5/bin/目錄執行 zkServer.sh start
②分別進入三個系統輸入jps,查看是否存在QuorumPeerMain進程,若是存在則表示成功(若是jps沒有找到命令,則檢查java的安裝是否成功)
(一)首先到master系統上,要切換到hadoop用戶
①從網上下載hadoop2.6.0 並上傳至master虛擬機/home/hadoop/目錄下(若是安裝的虛擬機系統是圖形界面,能夠直接黏貼,複製)
②執行tar -zxvf hadoop-2.6.0.tar.gz 解壓hadoop壓縮包
(二)修改hadoop配置的五個文件
/home/hadoop/hadoop-2.6.0/hadoop/etc/hadoop/core-site.xml /home/hadoop/hadoop-2.6.0/hadoop/etc/hadoop/hdfs-site.xml /home/hadoop/hadoop-2.6.0/hadoop/etc/hadoop/mapred-site.xml(若是沒有這個文件,將該目錄下名稱爲mapred-site.xml.template更名爲mapred-site.xml) /home/hadoop/hadoop-2.6.0/hadoop/etc/hadoop/yarn-site.xml /home/hadoop/hadoop-2.6.0/hadoop/etc/hadoop/slaves
①vim /home/hadoop/hadoop-2.6.0/hadoop/etc/hadoop/core-site.xml
<!-- hdfs://master中的master能夠隨便取名,可是要和後面的配置一致 --> <property> <name>fs.defaultFS</name> <value>hdfs://master</value> </property> <property> <name>io.file.buffer.size</name> <value>131072</value> </property> <!-- 指定hadoop臨時目錄 --> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/storage/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> <!--指定能夠在任何IP訪問--> <property> <name>hadoop.proxyuser.hduser.hosts</name> <value>*</value> </property> <!--指定全部用戶能夠訪問--> <property> <name>hadoop.proxyuser.hduser.groups</name> <value>*</value> </property> <!-- 指定zookeeper地址 --> <property> <name>ha.zookeeper.quorum</name> <value>slave01:2181,slave02:2181,slave03:2181</value> </property>
②vi /home/hadoop/hadoop/etc/hadoop/hdfs-site.xml
<!--指定hdfs的block大小64M --> <property> <name>dfs.block.size</name> <value>67108864</value> </property> <!--指定hdfs的nameservice爲master,須要和core-site.xml中的保持一致 --> <property> <name>dfs.nameservices</name> <value>master</value> </property> <!-- master下面有兩個NameNode,分別是nn1,nn2 --> <property> <name>dfs.ha.namenodes.master</name> <value>nn1,nn2</value> </property> <!-- nn1的RPC通訊地址 --> <property> <name>dfs.namenode.rpc-address.master.nn1</name> <value>master:9000</value> </property> <!-- nn1的http通訊地址 --> <property> <name>dfs.namenode.http-address.master.nn1</name> <value>master:50070</value> </property> <!-- nn2的RPC通訊地址 --> <property> <name>dfs.namenode.rpc-address.master.nn2</name> <value>master2:9000</value> </property> <!-- nn2的http通訊地址 --> <property> <name>dfs.namenode.http-address.master.nn2</name> <value>master2:50070</value> </property> <!-- 指定NameNode的元數據在JournalNode上的存放位置 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://slave01:8485;slave02:8485;slave03:8485/master</value> </property> <!-- 配置失敗自動切換實現方式 --> <property> <name>dfs.client.failover.proxy.provider.master</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 配置隔離機制 --> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property> <!-- 使用隔離機制時須要ssh免密碼登錄 --> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/home/hadoop/.ssh/id_rsa</value> </property> <!-- 指定NameNode的元數據在JournalNode上的存放位置 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/home/hadoop/storage/hadoop/journal</value> </property> <!--指定支持高可用自動切換機制--> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!--指定namenode名稱空間的存儲地址--> <property> <name>dfs.namenode.name.dir</name> <value>/home/hadoop/storage/hadoop/name</value> </property> <!--指定datanode數據存儲地址--> <property> <name>dfs.datanode.data.dir</name> <value>file:/home/hadoop/storage/hadoop/data</value> </property> <!--指定數據冗餘份數--> <property> <name>dfs.replication</name> <value>3</value> </property> <!--指定能夠經過web訪問hdfs目錄--> <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>slave01:2181,slave02:2181,slave03:2181</value> </property>
③vi /home/hadoop/hadoop/etc/hadoop/mapred-site.xml
<configuration> <!-- 配置MapReduce運行於yarn中 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!-- 配置 MapReduce JobHistory Server 地址 ,默認端口10020 --> <property> <name>mapreduce.jobhistory.address</name> <value>0.0.0.0:10020</value> </property> <!-- 配置 MapReduce JobHistory Server web ui 地址, 默認端口19888 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>0.0.0.0:19888</value> </property> </configuration>
④vi /home/hadoop/hadoop/etc/hadoop/yarn-site.xml
<!--日誌聚合功能--> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!--在HDFS上聚合的日誌最長保留多少秒。3天--> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>259200</value> </property> <!--rm失聯後從新連接的時間--> <property> <name>yarn.resourcemanager.connect.retry-interval.ms</name> <value>2000</value> </property> <!--開啓resource manager HA,默認爲false--> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <!--配置resource manager --> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <property> <name>ha.zookeeper.quorum</name> <value>slave01:2181,slave02:2181,slave03:2181</value> </property> <!--開啓故障自動切換--> <property> <name>yarn.resourcemanager.ha.automatic-failover.enabled</name> <value>true</value> </property> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>master</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>master2</value> </property> <!--在namenode1上配置rm1,在namenode2上配置rm2,注意:通常都喜歡把配置好的文件遠程複製到其它機器上,但這個在YARN的另外一個機器上必定要修改--> <property> <name>yarn.resourcemanager.ha.id</name> <value>rm1</value> <description>If we want to launch more than one RM in single node, we need this configuration</description> </property> <!--開啓自動恢復功能--> <property> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property> <!--配置與zookeeper的鏈接地址--> <property> <name>yarn.resourcemanager.zk-state-store.address</name> <value>slave01:2181,slave02:2181,slave03: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>slave01:2181,slave02:2181,slave03:2181</value> </property> <property> <name>yarn.resourcemanager.cluster-id</name> <value>master-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>master:8132</value> </property> <property> <name>yarn.resourcemanager.scheduler.address.rm1</name> <value>master:8130</value> </property> <property> <name>yarn.resourcemanager.webapp.address.rm1</name> <value>master:8188</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address.rm1</name> <value>master:8131</value> </property> <property> <name>yarn.resourcemanager.admin.address.rm1</name> <value>master:8033</value> </property> <property> <name>yarn.resourcemanager.ha.admin.address.rm1</name> <value>master:23142</value> </property> <!--配置rm2--> <property> <name>yarn.resourcemanager.address.rm2</name> <value>master2:8132</value> </property> <property> <name>yarn.resourcemanager.scheduler.address.rm2</name> <value>master2:8130</value> </property> <property> <name>yarn.resourcemanager.webapp.address.rm2</name> <value>master2:8188</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address.rm2</name> <value>master2:8131</value> </property> <property> <name>yarn.resourcemanager.admin.address.rm2</name> <value>master2:8033</value> </property> <property> <name>yarn.resourcemanager.ha.admin.address.rm2</name> <value>master2: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> <property> <name>yarn.nodemanager.local-dirs</name> <value>/home/hadoop/storage/yarn/local</value> </property> <property> <name>yarn.nodemanager.log-dirs</name> <value>/home/hadoop/storage/yarn/logs</value> </property> <property> <name>mapreduce.shuffle.port</name> <value>23080</value> </property> <!--故障處理類--> <property> <name>yarn.client.failover-proxy-provider</name> <value>org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider</value> </property> <property> <name>yarn.resourcemanager.ha.automatic-failover.zk-base-path</name> <value>/yarn-leader-election</value> <description>Optional setting. The default value is /yarn-leader-election</description> </property>
⑤配置datenode vi /home/hadoop/hadoop/etc/hadoop/slaves
slave01 slave02 slave03
(三)同步hadoop文件夾到其餘的四臺機器(master2,slave01,slave02,slave03)
再master節點上執行 scp -r /home/hadoop/hadoop-2.6.0 hadoop@master2:/home/hadoop/ scp -r /home/hadoop/hadoop-2.6.0 hadoop@slave01:/home/hadoop/ scp -r /home/hadoop/hadoop-2.6.0 hadoop@slave02:/home/hadoop/ scp -r /home/hadoop/hadoop-2.6.0 hadoop@slave03:/home/hadoop/
(四)修改nn2(master2)配置文件yarn-site.xml
<property> <name>yarn.resourcemanager.ha.id</name> <value>rm2</value> <description>If we want to launch more than one RM in single node, we need this configuration</description> </property>
(一)把各個zookeeper起來(slave01,slave02,slave03)
在三臺機器上執行 /home/hadoop/zookeeper-3.4.5/bin/zkServer.sh start /home/hadoop/zookeeper-3.4.5/bin/zkServer.sh status (1個leader, 2個follower) 輸入jps,會顯示啓動進程:QuorumPeerMain
(二)在主namenode節點(master)執行以下命令,建立命名空間
/home/hadoop/hadoop-2.6.0/bin/hdfs zkfc -formatZK
(三)在slave01,slave02,slave03節點用以下命令啓日誌程序
/home/hadoop/hadoop-2.6.0/sbin/hadoop-daemon.sh start journalnode
(四)在主namenode節點用./bin/hadoop namenode -format格式化namenode和journalnode目錄
/home/hadoop/hadoop-2.6.0/bin/hadoop namenode -format
(五)在任意一個zookeeper節點(salve01,slave02,slave03)執行
/home/hadoop/zookeeper-3.4.5/bin/zkCli.sh [zk: localhost:2181(CONNECTED) 0] ls / [hadoop-ha, zookeeper] [zk: localhost:2181(CONNECTED) 1] ls /hadoop-ha [master] [zk: localhost:2181(CONNECTED) 2] quit
(六)在主namenode節點啓動namenode進程
/home/hadoop/hadoop-2.6.0/sbin/hadoop-daemon.sh start namenode
(七)在備namenode節點(master2)執行第一行命令,把備namenode節點的目錄格式化並把元數據從主namenode節點copy過來,而且這個命令不會把journalnode目錄再格式化了!而後用第二個命令啓動備namenode進程!
/home/hadoop/hadoop-2.6.0/bin/hdfs namenode -bootstrapStandby /home/hadoop/hadoop-2.6.0/sbin/hadoop-daemon.sh start namenode
(八)在兩個namenode節點都執行如下命令
/home/hadoop/hadoop-2.6.0/sbin/hadoop-daemon.sh start zkfc
(九)啓動datanode
方法①:在slave01上執行如下命令,slave02,salve03的datanode也會啓動,若是某個幾點上執行jps沒有看到datanode進程則在該節點也執行如下命令,或者使用方法② /home/hadoop/hadoop-2.6.0/sbin/hadoop-daemons.sh start datanode 方法②:直接在主NameNode(master)上執行以下命令一次性啓動全部datanode /home/hadoop/hadoop-2.6.0/sbin/hadoop-daemons.sh start datanode
(十) 啓動YARN(在master和master2上執行)
/home/hadoop/hadoop-2.6.0/sbin/start-yarn.sh 注:在namenode2(master2)上執行此命令時會提示NodeManager已存在等信息不用管這些,主要是啓動namenode2上的resourceManager完成與namenode1的互備做用,可忽略
(十一)查看狀態
啓動完成以後能夠在瀏覽器中輸入http://master:50070和http://master2:50070查看namenode分別爲Standby和Active。 在namenode1(master)上執行${HADOOP_HOME}/bin/yarn rmadmin -getServiceState rm1查看rm1和rm2分別爲active和standby狀態,也能夠經過瀏覽器訪問http://master:8188查看狀態
查看到正確信息表示安裝成功!!