在查詢了很多資料以後,發現國內外沒有一篇關於hadoop2集群環境搭建的詳細步驟的文章。 所以,我想把我知道的分享給大家,方便大家交流。 ...
在查詢了很多資料以後,發現國內外沒有一篇關於hadoop2集群環境搭建的詳細步驟的文章。
所以,我想把我知道的分享給大家,方便大家交流。
以下是本文的大綱:
1. 在windows7 下麵安裝虛擬機
2.在虛擬機上面安裝linux操作系統
3.啟動Linux操作系統
4.修改hostname
4.1.在node1上面修改hostname
4.2.在node2上面修改hostname
4.3.在node3上面修改hostname
4.4.在node4上面修改hostname
4.5.重啟4台機器,hostname會永久生效
5.安裝JDK
6.免密碼登錄
7.Linux功能變數名稱解析配置
8.Windows功能變數名稱解析配置
9.節點分佈方案
10.zookeeper的解壓縮和安裝
11.Hadoop壓縮包安裝
11.1.修改hadoop-evn.sh
11.2.修改hdfs-site.xml
11.3.修改core-site.xml
11.4.配置datanode
12.在node2, node3, node4上安裝hadoop
13.啟動JournalNodes
14.在第一個namenode(node1)上面進行格式化操作並啟動namenode
15.拷貝拷貝元數據文件到第二個namenode
16.停止所有服務
17.格式化zookeeper
18.配置mapreduce
19.啟動所有服務
20.測試是否成功
21.上傳文件測試
若有不正之處,還請多多諒解,並希望批評指正。
請尊重作者勞動成果,轉發請標明blog地址
https://www.cnblogs.com/hongten/p/hongten_hadoop.html
正所謂磨刀不費砍材功,下麵的工具大家可以先下載備用。
環境及工具:
Windows 7 (64位)下麵的虛擬機(64位):VMware-workstation-full-14.0.0-6661328.exe
Linux操作系統:CentOS-6.5-x86_64-bin-DVD1.iso
Xshell:Xshell-6.0.0101p.exe
WinSCP:從windows上面上傳文件到Linux
zookeeper:zookeeper-3.4.6.tar.gz
hadoop:hadoop-2.5.1_x64.tar.gz
鏈接:https://pan.baidu.com/s/1hvdbGUh488Gl1EF2v44BIw
提取碼:ncdd
在做好準備工作後,我們就可以來手動搭建hadoop集群
1. 在windows7 下麵安裝虛擬機
安裝說明已經激活碼請點擊上面虛擬機鏈接。
*註:上述鏈接提供的安裝包僅支持Windows 7及以上操作系統的64位版,已經不支持32位版的操作系統!
激活碼:FF31K-AHZD1-H8ETZ-8WWEZ-WUUVA
2.在虛擬機上面安裝linux操作系統
這裡我把RedHat,Ubuntu,CentOS都安裝過了,最後感覺CentOS好用一點(個人覺得,哈哈哈)
CentOS-6.5-x86_64-bin-DVD1.iso After the installation is complete, please run "yum update" in order to update your system.
安裝好Linux後,需要運行 'yum update' 命令。這裡是需要花一點時間的,(我花了大概十多分鐘的樣子來執行yum update)。
在虛擬機裡面,我安裝了4台相同配置的CentOS。
3.啟動Linux操作系統
在虛擬機裡面啟動4台機器。然後都以root賬號進行登錄。
啟動完以後,我們要記錄各個node(節點)ip地址(下麵是我機器上面的ip地址情況)
//四台Linux的ip地址 192.168.79.133 node1 192.168.79.134 node2 192.168.79.135 node3 192.168.79.136 node4
*註:在Linux裡面查看ip的命令是ifconfig
//在node4上面的ip地址情況 [root@node4 ~]# ifconfig eth0 Link encap:Ethernet HWaddr 00:0C:29:80:01:39 inet addr:192.168.79.136 Bcast:192.168.79.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe80:139/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:201532 errors:0 dropped:0 overruns:0 frame:0 TX packets:27023 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:275203684 (262.4 MiB) TX bytes:4283436 (4.0 MiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:18 errors:0 dropped:0 overruns:0 frame:0 TX packets:18 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1064 (1.0 KiB) TX bytes:1064 (1.0 KiB) You have new mail in /var/spool/mail/root
4.修改hostname
剛開始的時候,我們在4台機器上看到的都是如下的hostname
[root@localhost ~]
我們現在要把他們修改為
[root@node1 ~] [root@node2 ~] [root@node3 ~] [root@node4 ~]
我們為什麼要修改hostname呢?
因為我們要在下麵的配置文件裡面添加這些節點名稱,如node1,node2,node3, node4.
那麼我們應該怎樣做呢?下麵給出了方法。
4.1.在node1上面修改hostname
--http://www.cnblogs.com/kerrycode/p/3595724.html(深入理解Linux修改hostname) --在node1上面運行 vi /etc/sysconfig/network --設置hostname=node1 :qw --再運行 sysctl kernel.hostname=node1
4.2.在node2上面修改hostname
--http://www.cnblogs.com/kerrycode/p/3595724.html(深入理解Linux修改hostname) --在node2上面運行 vi /etc/sysconfig/network --設置hostname=node2 :qw --再運行 sysctl kernel.hostname=node2
4.3.在node3上面修改hostname
--http://www.cnblogs.com/kerrycode/p/3595724.html(深入理解Linux修改hostname) --在node3上面運行 vi /etc/sysconfig/network --設置hostname=node3 :qw --再運行 sysctl kernel.hostname=node3
4.4.在node4上面修改hostname
--http://www.cnblogs.com/kerrycode/p/3595724.html(深入理解Linux修改hostname) --在node4上面運行 vi /etc/sysconfig/network --設置hostname=node4 :qw --再運行 sysctl kernel.hostname=node4
4.5.重啟4台機器,hostname會永久生效
*註:在Linux裡面查看ip情況,看看是否有變化。如果有變化,則調整相應的ip所對應的節點。
--我虛擬機裡面的ip情況 192.168.79.133 node1 192.168.79.134 node2 192.168.79.135 node3 192.168.79.136 node4
5.安裝JDK
把我們下載好的jdk-7u67-linux-x64.rpm通過WinSCP上傳到4台機器的根目錄上。
--在node1, node2, node3, node4上面安裝jdk --install JDK -- http://blog.51cto.com/vvxyz/1642258(LInux安裝jdk的三種方法) --解壓安裝 rpm -ivh your-package.rpm --修改環境變數 vi /etc/profile JAVA_HOME=/usr/java/jdk1.7.0_67 JRE_HOME=/usr/java/jdk1.7.0_67/jre CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin export JAVA_HOME JRE_HOME CLASS_PATH PATH :wq --使配置有效 source /etc/profile
*註:在4個節點上都要安裝JDK。
6.免密碼登錄
--免密碼登錄 --分別在node1, node2, node3, node4,上面運行 ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 0600 ~/.ssh/authorized_keys --在node1上面運行,拷貝node1的公鑰到node2,node3,node4上面的根目錄裡面去 scp id_rsa.pub root@node2:~ scp id_rsa.pub root@node3:~ scp id_rsa.pub root@node4:~ --分別進入node2, node3, node4運行,把node1的公鑰追加到~/.ssh/authorized_keys文件裡面 cat ~/id_rsa.pub >> ~/.ssh/authorized_keys --測試 --在node1上面運行下麵命令,應該都能夠免密碼登錄,即成功。
ssh node1 ssh node2 ssh node3 ssh node4
*註:我在這裡遇到很多坑,最後還是搞定了。
7.Linux功能變數名稱解析配置
--修改功能變數名稱解析conf hosts --在node1上面運行下麵命令 vi /etc/hosts --根據自己機器上面的ip進行配置 192.168.79.134 node1 192.168.79.135 node2 192.168.79.133 node3 192.168.79.136 node4 :wq --copy hosts file to node2, node3, node4 scp /etc/hosts root@node2:/etc/ scp /etc/hosts root@node3:/etc/ scp /etc/hosts root@node4:/etc/
8.Windows功能變數名稱解析配置
--windows 功能變數名稱解析 --打開C:/WINDOWS/system32/drivers/etc/hosts文件 --把下麵的信息複製到文件最後尾 -- 根據自己機器ip進行配置 192.168.79.134 node1 192.168.79.135 node2 192.168.79.133 node3 192.168.79.136 node4
為什麼要做這個呢?
因為下麵我們會在瀏覽器裡面輸入http:node1:50070進行測試,就會用到這個配置了。
9.節點分佈方案
*註:打鉤的表示在該節點上有相對應的服務。
10.zookeeper的解壓縮和安裝
--解壓zookeeper壓縮包並安裝 tar -zxvf zookeeper-3.4.6.tar.gz --創建zookeeper的軟鏈 ln -sf /root/zookeeper-3.4.6 /home/zk --配置zookeeper cd /home/zk/conf/ --把下麵的zoo_sample.cfg文件重新命名 cp zoo_sample.cfg zoo.cfg --修改zoo.cfg配置文件 vi zoo.cfg --設置zookeeper的文件存放目錄 --找到dataDir=/tmp/zookeeper,並設置為下麵值 dataDir=/opt/zookeeper --設置zookeeper集群 server.1=node1:2888:3888 server.2=node2:2888:3888 server.3=node3:2888:3888 :wq --創建/opt/zookeeper目錄 mkdir /opt/zookeeper --進入/opt/zookeeper目錄 cd /opt/zookeeper --創建一個文件myid vi myid --輸入1 1 :wq --以此類推,在node2,node3,值分別是2, 3 --拷貝zookeeper目錄到node2, node3的/opt/目錄下麵 cd .. scp -r zookeeper/ root@node2:/opt/ scp -r zookeeper/ root@node3:/opt/ --分別進入到node2, node3裡面,修改/opt/zookeeper/myid,值分別是2, 3 --作為以上配置,把node1裡面的zookeeper拷貝到node2, node3上面。 scp -r zookeeper-3.4.6 root@node2:~/ scp -r zookeeper-3.4.6 root@node3:~/ --分別進入到node2, node3裡面,創建軟鏈 ln -sf /root/zookeeper-3.4.6/ /home/zk --配置zookeeper環境變數 cd /home/zk/bin --修改/etc/profile文件,把zookeeper的bin目錄路徑添加進去 vi /etc/profile PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:/home/zk/bin --讓配置文件生效 source /etc/profile --分別進入到node2, node3裡面,修改/etc/profile文件,把zookeeper的bin目錄路徑添加進去 --作為環境變數配置,就可以啟動zookeeper了。 --分別在node1, node2, node3上面啟動zookeeper zkServer.sh start --測試是否啟動成功 jps --觀察是否有QuorumPeerMain進程
11.Hadoop壓縮包安裝
--解壓Hadoop壓縮包安裝 --在node1上面安裝 tar -zxvf hadoop-2.5.1_x64.tar.gz --解壓完,創建一個軟鏈到home目錄下麵 ln -sf /root/hadoop-2.5.1 /home/hadoop-2.5 --進入hadoop中進行文件配置 cd /home/hadoop-2.5/etc/hadoop/
11.1.修改hadoop-evn.sh
--1.修改hadoop-evn.sh --修改JAVA_HOME配置 vi hadoop-env.sh --The java implementation to use. 根據上面JDK的配置信息 export JAVA_HOME=/usr/java/jdk1.7.0_67
:wq
11.2.修改hdfs-site.xml
--2.修改hdfs-site.xml vi hdfs-site.xml --2.1.配置dfs.nameservices - the logical name for this new nameservice --服務名稱 <property> <name>dfs.nameservices</name> <value>mycluster</value> </property> --2.2.配置namenode節點名稱。這裡的名稱是namenode的名稱,不是主機名(hostname)。 <property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2</value> </property> --2.3.配置RPC協議和埠 --有多少namenode,就需要配置多少次。 <property> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <value>node1:8020</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>node2:8020</value> </property> --2.4.配置HTTP協議和主機 --這裡也是針對上面的namenode --有多少namenode,就需要配置多少次。 <property> <name>dfs.namenode.http-address.mycluster.nn1</name> <value>node1:50070</value> </property> <property> <name>dfs.namenode.http-address.mycluster.nn2</name> <value>node2:50070</value> </property> --2.5.配置dfs.namenode.shared.edits.dir --the URI which identifies the group of JNs(JournalNodes) where the NameNodes will write/read edits <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://node2:8485;node3:8485;node4:8485/mycluster</value> </property> --2.6.配置客戶端使用的一個類,固定配置 --作用:客戶端使用該類去找到active namenode <property> <name>dfs.client.failover.proxy.provider.mycluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> --2.7.配置sshfence --這裡配置的私鑰路徑,是根據上面免密登錄設置的路徑 --ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> </property> --2.8.配置JournalNodes的工作目錄 <property> <name>dfs.journalnode.edits.dir</name> <value>/opt/jn/data</value> </property> -------- --以上基本配置完成 --下麵進行自動切換配置 --2.9.配置自動切換 --自動切換配置好了以後,可以允許手動切換 <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> :wq
下麵是完整的配置信息(hdfs-site.xml配置)
<configuration> <property> <name>dfs.nameservices</name> <value>mycluster</value> </property> <property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2</value> </property> <property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <value>node1:8020</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>node2:8020</value> </property> <property> <name>dfs.namenode.http-address.mycluster.nn1</name> <value>node1:50070</value> </property> <property> <name>dfs.namenode.http-address.mycluster.nn2</name> <value>node2:50070</value> </property> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://node2:8485;node3:8485;node4:8485/mycluster</value> </property> <property> <name>dfs.client.failover.proxy.provider.mycluster</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>/root/.ssh/id_rsa</value> </property> <property> <name>dfs.journalnode.edits.dir</name> <value>/opt/jn/data</value> </property> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> </configuration>
11.3.修改core-site.xml
--修改core-site.xml vi core-site.xml --3.1.配置namenode入口 <property> <name>fs.defaultFS</name> <value>hdfs://mycluster</value> </property> --3.2.配置ZooKeeper集群 <property> <name>ha.zookeeper.quorum</name> <value>node1:2181,node2:2181,node3:2181</value> </property> --3.3.修改hadoop的臨時目錄 <property> <name>hadoop.tmp.dir</name> <value>/opt/hadoop2</value> </property> :wq
下麵是完整的配置信息(core-site.xml配置)
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://mycluster</value> </property> <property> <name>ha.zookeeper.quorum</name> <value>node1:2181,node2:2181,node3:2181</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/opt/hadoop2</value> </property> </configuration>
11.4.配置datanode
cd /home/hadoop-2.5/etc/hadoop/ vi slaves --輸入 node2 node3 node4 :wq
*註:以上為hadoop的配置
12.在node2, node3, node4上安裝hadnoop
--拷貝hadoop到node2, node3, node4上去 scp hadoop-2.5.1_x64.tar.gz root@node2:~/ scp hadoop-2.5.1_x64.tar.gz root@node3:~/ scp hadoop-2.5.1_x64.tar.gz root@node4:~/ --然後分別進入到node2,node3, node4上面去解壓縮文件,分別創建軟鏈 cd ~ tar -zxvf hadoop-2.5.1_x64.tar.gz ln -sf /root/hadoop-2.5.1 /home/hadoop-2.5 --回到node1, 進入到/home/hadoop-2.5/etc/hadoop/目錄 cd /home/hadoop-2.5/etc/hadoop/ --把所有配置文件拷貝到node2,node3, node4上面的/home/hadoop-2.5/etc/hadoop/目錄下麵 --這樣做的目的是保證,所有機器上面的配置文件都一樣 scp ./* root@node2:/home/hadoop-2.5/etc/hadoop/ scp ./* root@node3:/home/hadoop-2.5/etc/hadoop/ scp ./* root@node4:/home/hadoop-2.5/etc/hadoop/
13.啟動JournalNodes
--做完這些後,就可以啟動JournalNodes --去到node2, node3, node4 cd /home/hadoop-2.5/sbin/ ./hadoop-daemon.sh start journalnode --檢查是否啟動成功: jps --檢查是否有:JournalNode
14.在第一個namenode(node1)上面進行格式化操作並啟動namenode
--在第一個namenode上面進行格式化操作 --進入node1 cd /home/hadoop-2.5/bin ./hdfs namenode -format --格式化成功後,會在/opt/hadoop2/dfs/name/current/目錄下麵生成元數據文件 cd /opt/hadoop2/dfs/name/current --需要把元數據文件拷貝到第二個namenode上面去。 --在拷貝之前,需要啟動剛剛格式化後的namenode(node1) cd /home/hadoop-2.5/sbin/ ./hadoop-daemon.sh start namenode --查看是否啟動成功 jps --檢查是否包含:NameNode
15.拷貝拷貝元數據文件到第二個namenode
--然後去到node2上去。要保證第一個(即格式化後的namenode(node1)要先啟動--運行著的狀態) --執行拷貝元數據文件命令 cd /home/hadoop-2.5/bin/ ./hdfs namenode -bootstrapStandby --檢查是否拷貝成功: cd /opt/hadoop2/dfs/name/current/ --查看是否有元數據
ls
16.停止所有服務
--