硬件:硬盤單節點50GB,1G內存,單核。
操作系統:CentOS6.4 64bit
Hadoop:2.20 64bit(已編譯)
JDK:jdk1.7
磁盤分區:
/ | 5GB |
/boot | 100MB |
/usr | 5GB |
/tmp | 500MB |
swap | 2GB |
/var | 1GB |
/home | 剩余空間 |
無桌面(Minimal)
Base SystemàBase, Compatibility libraries, Performance Tools, Perl Support
Developmentà Development Tools
LanguagesàChinese Support
創建Hadoop用戶Useradd Hadoop
Passwd Hadoop
網絡配置修改ipvim /etc/sysconfig/network-scripts/ifcfg-eth0
保存并重啟網絡service network restart
修改主機名Vim /etc/sysconfig/network
Vim /etc/host
查看狀態service iptables status
關閉防火墻service iptables stop
查看防火墻開機啟動狀態 chkconfig iptables –list
關閉防火墻開機啟動 chkconfig iptables off
關閉SELinux
Vim /etc/sysconfig/selinux
Setenforce 0
Getenforce
SSH免登陸設置使用hadoop用戶生成公鑰和私鑰:ssh-keygen –t rsa
將授權發送給Slave1..5:ssh-copy –i Slave1
同樣,也將Slave1…5對Master進行免密登錄
為了保證S1到Master通信,同樣配置S1到Master免登陸
安裝JDK將jdk1.7解壓縮到/usr/local/目錄下,并改名為jdk
修改/etc/PRofile文件
主機名 | IP | 安裝的軟件 | 運行的進程 |
Master | 172.20.52.151 | jdk、hadoop | NameNode、DFSZKFailoverController |
Slave1 | 172.20.52.171 | jdk、hadoop | ResourceManager |
Slave2 | 172.20.52.21 | jdk、hadoop、 | NameNode、DFSZKFailoverController |
Slave3 | 172.20.53.37 | jdk、hadoop、zookeeper | DataNode、NodeManager、JournalNode、QuorumPeerMain |
Slave4 | 172.20.53.174 | jdk、hadoop、zookeeper | DataNode、NodeManager、JournalNode、QuorumPeerMain |
Slave5 | 172.20.53.177 | jdk、hadoop、zookeeper | DataNode、NodeManager、JournalNode、QuorumPeerMain |
JournalNode負責數據同步,QuorumPeerMain是zk的進程。
namenode節點上/usr/hadoop/tmp/dfs/name/current/ 目錄下存放了fsimage文件,塊位置信息不會保存在fsimage中,塊位置信息并不是由namenode來維護的,而是以塊列表的形式放在datanode上。
而datanode節點上/usr/hadoop/tmp/dfs/data/current/ 目錄下存放了文件塊
Zookeeper的安裝zk用于協調管理數據節點,可以進行master選舉,負載均衡,分布式鎖等。
在S3,S4,S5節點上安裝zookeeper:
tar -zxvf zookeeper-3.4.5.tar.gz -C /usr/local/
mv zoo_sample.cfg zoo.cfg,用來zookeeper啟動時讀取
服務器ID:server.1
Zookeeper運行的主機:Slave3..5
通信端口:2888
選舉端口:3888
scp –r /usr/local/ zookeeper-3.4.5/ root@Slave4: /usr/local/ zookeeper-3.4.5/
scp –r /usr/local/ zookeeper-3.4.5/ root@Slave5: /usr/local/ zookeeper-3.4.5/
別忘了修改myid文件中的服務器號
調用bin目錄下的zkServer.sh腳本命令:./ zkServer.sh start
三個節點只有一個為leader,其余為follower
安裝hadoop將編譯好的hadoop-2.2.0.tar.gz上傳至Master,用root用戶解壓到/usr目錄下,改名為hadoop
mkdir tmp
chown –R Hadoop:hadoop Hadoop
其余幾個節點也如此配置。
配置hadoopexport java_HOME=/usr/local/jdk
export HADOOP_HOME=/usr/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
修改/usr/Hadoop/etc/Hadoop/目錄下的配置文件Hadoop.tmp.dir參數雖然稱為臨時目錄,其實保存的是以后hdfs的數據,nameservice指定了該HDFS集群的名稱為ns1
<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>Master:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>Master:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>Slave1:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>Slave1:50070</value>
</property>
<!-- 指定NameNode的元數據在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://Slave3:8485;Slave4:8485;Slave5:8485/ns1</value>
</property>
<!-- 指定JournalNode在本地磁盤存放數據的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/hadoop/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</value>
</property>
<!-- 使用隔離機制時需要ssh免登陸 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
</configuration>
說明MR框架運行在yarn之上
DN為S3,S4,S5
scp –r /usr/Hadoop/ Slave1:/usr/Hadoop/
復制后應修改權限:chown –R Hadoop:hadoop Hadoop
啟動hadoopbin/ zkServer.sh start
cd /usr/hadoop
sbin/hadoop-daemons.sh start journalnode 通過ssh協議同時啟動多個進程
(運行jps命令檢驗,多了JournalNode進程)
在Master上執行命令:hadoop namenode –format
此時將Master中tmp目錄拷貝到Slave1的/usr/Hadoop/下:
scp –r /usr/Hadoop/tmp Slave1:/usr/Hadoop/ 這里面存放了fsimage和edits文件
此時,在S3..S5節點上的zk的bin目錄下執行./zkCli.sh命令,可以發現多出hadoop-ha的目錄用于保存數據。
sbin/start-dfs.sh
如果一個NameNode掛掉,重新啟動要使用命令sbin/Hadoop-deamon.sh start namenode,要保證兩個NameNode要ssh免密碼登錄。
注:
關于修改虛擬機網卡刪除掉 關于 eth0 的信息。修改 第二條 eth1 的網卡的名字為 eth0.
新聞熱點
疑難解答