https://www.cnblogs.com/chaoren399/articles/4749513.html 集羣的概念 計算機集羣是一種計算機系統, 它經過一組鬆散集成的計算機軟件和/或硬件鏈接起來高度緊密地協做完成計算工做。 l 集羣系統中的單個計算機一般稱爲節點,一般經過局域網鏈接。 l 集羣技術的特色: 經過多臺計算機完成同一個工做。達到更高的效率 兩機或多機內容、工做過程等徹底同樣。若是一臺死機,另外一臺能夠起做用。 集羣搭建: 第一部分: linux機器準備工做(3臺) 1.安裝VMWare軟件 2.在VMWare軟件下linux系統 3.配置VMWare虛擬軟件網卡,保證Windows機器能和虛擬機linux正常通訊 Ø 點擊VMware快捷方式,右鍵打開文件所在位置 -> 雙擊vmnetcfg.exe -> VMnet1 host-only ->修改subnet ip 設置網段:192.168.0.0 子網掩碼:255.255.255.0 -> apply -> ok Ø 回到windows --> 打開網絡和共享中心 -> 更改適配器設置 -> 右鍵VMnet1 -> 屬性 -> 雙擊IPv4 -> 設置windows的IP:192.168.0.100 子網掩碼:255.255.255.0 -> 點擊肯定 Ø 在虛擬軟件上 --My Computer -> 選中虛擬機 -> 右鍵 -> settings -> network adapter -> host only -> ok 3.1 修改主機名 vim /etc/sysconfig/network NETWORKING=yes HOSTNAME=zookeeperServer1 ### 3.2 設置linux機器IP Ø 第一種:經過Linux圖形界面進行修改(普通程序員專用) 進入Linux圖形界面 -> 右鍵點擊右上方的兩個小電腦 -> 點擊Edit connections -> 選中當前網絡System eth0 -> 點擊edit按鈕 -> 選擇IPv4 -> method選擇爲manual -> 點擊add按鈕 -> 添加IP:192.168.0.2 子網掩碼:255.255.255.0 網關:192.168.0.1 -> apply 192.168.19.100 Ø 第二種:修改配置文件方式(屌絲程序員專用) vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE="eth0" BOOTPROTO="static" ### HWADDR="00:0C:29:3C:BF:E7" IPV6INIT="yes" NM_CONTROLLED="yes" ONBOOT="yes" TYPE="Ethernet" UUID="ce22eeca-ecde-4536-8cc2-ef0dc36d4a8c" IPADDR="192.168.0.101" ###(注意:是每臺機器對應的地址) NETMASK="255.255.255.0" ### GATEWAY="192.168.0.1" ### 3.3修改主機名和IP的映射關係(注意:這裏是3臺機器對應的映射關係) vim /etc/hosts scp -r hadoop1 192.168.0.101 zookeeperServer1 nameNode1 resourceManager1 hadoop2 192.168.0.102 zookeeperServer2 nameNode2 resourceManager2 hadoop3 192.168.0.103 zookeeperServer3 3.4關閉防火牆 #查看防火牆狀態 service iptables status #關閉防火牆 service iptables stop #查看防火牆開機啓動狀態 chkconfig iptables --list #關閉防火牆開機啓動 chkconfig iptables off 3.4 重啓系統 reboot 3.5 配置免密碼登錄 生成ssh免登錄密鑰 #在hadoop0上生產一對鑰匙 cd ~/.ssh ssh-keygen -t rsa (四個回車) 執行完這個命令後,會生成兩個文件id_rsa(私鑰)、id_rsa.pub(公鑰) #將公鑰拷貝到其餘節點,包括本身 ssh-copy-id nameNode1 每一個節點重複上述兩個操做 4.安裝JDK 上傳 解壓jdk #建立文件夾 mkdir /usr/java #解壓 tar -zxvf jdk-7u79-linux-i586.tar.gz -C /usr/java/ Ø 將java添加到環境變量中 vim /etc/profile #在文件最後添加 JAVA_HOME=/usr/java/jdk1.7.0_79 export PATH=$JAVA_HOME/bin:$PATH #刷新配置 source /etc/profile 第二部分: 搭建Hadoop集羣詳細步驟: 1.安裝配置zooekeeper集羣(在hadoop1上) 1.1解壓 tar -zxvf zookeeper-3.4.6.tar.gz -C /hadoop/ 1.2修改配置 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=hadoop0:2888:3888 server.2=hadoop1:2888:3888 server.3=hadoop2:2888:3888 保存退出 而後建立一個tmp文件夾 mkdir /hadoop/zookeeper-3.4.6/tmp 再建立一個空文件 touch /hadoop/zookeeper-3.4.6/tmp/myid 最後向該文件寫入ID echo 1 > /hadoop/zookeeper-3.4.6/tmp/myid 1.3將配置好的zookeeper拷貝到其餘節點(首先分別在hadoop一、hadoop2 根目錄下建立一個hadoop 目錄:mkdir -p /hadoop/zookeeper-3.4.6) scp -r /hadoop/zookeeper-3.4.6 root@hadoop1:/hadoop/ scp -r /hadoop/zookeeper-3.4.6 root@hadoop2:/hadoop/ 注意:修改hadoop一、hadoop2對應/hadoop/zookeeper-3.4.6/tmp/myid的內容 hadoop1: echo 2 > /hadoop/zookeeper-3.4.6/tmp/myid hadoop2: echo 3 > /hadoop/zookeeper-3.4.6/tmp/myid 2.安裝配置hadoop集羣(在hadoop0 上操做) 2.1解壓 tar -zxvf hadoop-2.6.0.tar.gz -C /hadoop/ 2.2配置HDFS(hadoop2.0全部的配置文件都在$HADOOP_HOME/etc/hadoop目錄下) #將hadoop添加到環境變量中 vim /etc/profile export JAVA_HOME=/usr/java/jdk1.7.0_79 export HADOOP_HOME=/hadoop/hadoop-2.6.0 export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin source /etc/profile #hadoop2.0的配置文件所有在$HADOOP_HOME/etc/hadoop下 cd /hadoop/hadoop-2.6.0/etc/hadoop 2.2.1修改hadoop-env.sh export JAVA_HOME=/usr/java/jdk1.7.0_79 2.2.2修改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>/hadoop/hadoop-2.6.0/tmp</value> </property> <!-- 指定zookeeper地址 --> <property> <name>ha.zookeeper.quorum</name> <value>zookeeperServer1:2181,zookeeperServer2:2181,zookeeperServer3:2181</value> </property> </configuration> 2.2.3修改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>nameNode1:9000</value> </property> <!-- nn1的http通訊地址 --> <property> <name>dfs.namenode.http-address.ns1.nn1</name> <value>nameNode1:50070</value> </property> <!-- nn2的RPC通訊地址 --> <property> <name>dfs.namenode.rpc-address.ns1.nn2</name> <value>nameNode2:9000</value> </property> <!-- nn2的http通訊地址 --> <property> <name>dfs.namenode.http-address.ns1.nn2</name> <value>nameNode2:50070</value> </property> <!-- 指定NameNode的元數據在JournalNode上的存放位置 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://zookeeperServer1:8485;zookeeperServer2:8485;zookeeperServer3:8485/ns1</value> </property> <!-- 指定JournalNode在本地磁盤存放數據的位置 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/hadoop/hadoop-2.6.0/journal</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>/root/.ssh/id_rsa</value> </property> <!-- 配置sshfence隔離機制超時時間 --> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>30000</value> </property> </configuration> 2.2.4修改mapred-site.xml <configuration> <!-- 指定mr框架爲yarn方式 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration> 2.2.5修改yarn-site.xml <configuration> <!-- 開啓RM高可靠 --> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <!-- 指定RM的cluster id --> <property> <name>yarn.resourcemanager.cluster-id</name> <value>yrc</value> </property> <!-- 指定RM的名字 --> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <!-- 分別指定RM的地址 --> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>resourceManager1</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>resourceManager2</value> </property> <!-- 指定zk集羣地址 --> <property> <name>yarn.resourcemanager.zk-address</name> <value>zookeeperServer1:2181,zookeeperServer2:2181,zookeeperServer3:2181</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration> 2.2.6修改slaves(slaves是指定子節點的位置,由於要在nameNode1上啓動HDFS、在resourceManager1啓動yarn,因此nameNode1上的slaves文件指定的是datanode的位置,resourceManager1上的slaves文件指定的是nodemanager的位置) zookeeperServer1 zookeeperServer2 zookeeperServer3 首次啓動與初始化hadoop集羣 ###注意:嚴格按照下面的步驟 先檢查各臺hadoop環境變量是否設置好 2.5啓動zookeeper集羣(分別在hadoop0、hadoop一、hadoop2上啓動zk) ZOOKEEPER_HOME=/hadoop/zookeeper-3.4.5 cd /hadoop/zookeeper-3.4.5/bin/ ./zkServer.sh start #查看狀態:一個leader,兩個follower ./zkServer.sh status 2.6啓動journalnode(分別在在hadoop0、hadoop一、hadoop2上執行) cd /hadoop/hadoop-2.6.0 sbin/hadoop-daemon.sh start journalnode #運行jps命令檢驗,hadoop0、hadoop一、hadoop2上多了JournalNode進程 2.7格式化HDFS #在hadoop0上執行命令: hdfs namenode -format #格式化後會在根據core-site.xml中的hadoop.tmp.dir配置生成個文件,這裏我配置的是/hadoop/hadoop-2.6.0/tmp,而後將/hadoop/hadoop-2.6.0tmp拷貝到hadoop1的/hadoop/hadoop-2.6.0下。 scp -r /hadoop/hadoop-2.6.0/tmp/ root@hadoop1:/hadoop/hadoop-2.6.0/ 2.8格式化ZK(在hadoop1上執行便可) hdfs zkfc -formatZK 2.9啓動HDFS(在hadoop1上執行) sbin/start-dfs.sh 2.10啓動YARN(#####注意#####:是在hadoop0上執行start-yarn.sh,(能夠把namenode和resourcemanager分開是由於性能問題,由於他們都要佔用大量資源,因此把他們分開了,他們分開了就要分別在不一樣的機器上啓動) sbin/start-yarn.sh 3 驗證集羣是否可用 啓動完成後,能夠統計瀏覽器訪問: http://192.168.19.100:50070 Overview 'hadoop0:9000' (active) http://192.168.19.101:50070 Overview 'hadoop1:9000' (standby) (resourcemanager:http://192.168.19.100:8088/cluster) 首先向hdfs上傳一個文件 hadoop fs -put /etc/profile /test hadoop fs -ls / 經過瀏覽器訪問:http://192.168.19.100:50070 運行一下hadoop提供的demo中的WordCount程序: hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount /test/profile /test/out (下載頁面須要從新配置本地電腦的hosts) 之後重複啓動的流程 1. 啓動zookeeper集羣(分別在hadoop0、hadoop一、hadoop2上啓動zk) cd /hadoop/zookeeper-3.4.5/bin/ ./zkServer.sh start #查看狀態:一個leader,兩個follower ./zkServer.sh status 2.啓動journalnode(分別在在hadoop0、hadoop一、hadoop2上執行) cd /hadoop/hadoop-2.6.0 sbin/hadoop-daemon.sh start journalnode #運行jps命令檢驗,hadoop0、hadoop一、hadoop2上多了JournalNode進程 3.啓動HDFS(在hadoop0上執行) sbin/start-dfs.sh (zookeeperServer 上多了datanode) 4.啓動YARN(在hadoop0上執行) sbin/start-yarn.sh 5.最後啓動執備resourcemanager(在hadoop1上執行) yarn-daemon.sh start resourcemanager 一些啓動命令:(***記住***) 啓動/關閉namenode hadoop-daemon.sh start/stop namenode 啓動/關閉datanode hadoop-daemon.sh start/stop datanode 啓動/關閉journalnode hadoop-daemon.sh start/stop journalnode 啓動/關閉resourcemanager yarn-daemon.sh start/stop resourcemanager 啓動zookeeper ./zkServer.sh start 啓動/關閉hdfs start-dfs.sh/stop-dfs.sh 啓動/關閉yarn start-yarn.sh/stop-yarn.sh