2.4 Apache版本Hadoop集群搭建
Apache版本的所有需要安装的软件全部放在/usr/app目录下。
1. Zookeeper安装
以下是ZooKeeper的安装步骤:
(1)上传zk安装包。
(2)解压。
tar –zxvf zookeeper-3.4.6.tar.gz /usr/app/
(3)配置(先在一台节点上配置)。
添加一个zoo.cfg配置文件:
cd zookeeper-3.4.6/conf/ cp -r zoo_sample.cfg zoo.cfg
修改配置文件(zoo.cfg):
mkdir /usr/app/zookeeper-3.4.6/data dataDir=/usr/app/zookeeper-3.4.6/data(the directory where the snapshot is stored.)
在最后一行添加:
server.1=hadoop11:2888:3888 server.2=hadoop12:2888:3888 server.3=hadoop13:2888:3888
在(dataDir=/usr/app/zookeeper-3.4.5/data)创建一个myid文件,里面内容是server.N中的N(server.2里面内容为2)。
echo "1" >myid
将配置好的zk复制到其他节点。
scp -r /usr/app/zookeeper-3.4.6/ root@hadoop12:/usr/app scp -r /usr/app/zookeeper-3.4.6/ root@hadoop13:/usr/app
注意:在其他节点上一定要修改myid的内容。
在hadoop12应该把myid的内容改为2(echo "2" >myid)。
在hadoop13应该把myid的内容改为3(echo "3" >myid)。
(4)启动ZooKeeper集群。
三台机器上面分别启动ZooKeeper,启动和关闭命令如下:
/usr/app/zookeeper-3.4.6/bin/./zkServer.sh start /usr/app/zookeeper-3.4.6/bin/./zkServer.sh stop
每台机器分别启动zk,如图2-24所示。
图2-24 每台机器分别启动zk
./zkServer.sh start
(5)查看启动状态。
/usr/app/zookeeper-3.4.6/bin/./zkServer.sh status
每台ZooKeeper会选出leader或者follower。ZooKeeper的follwer状态如图2-25所示,ZooKeeper的leader状态如图2-26所示。
图2-25 ZooKeeper的follwer状态
图2-26 ZooKeeper的leader状态
2.安装Hadoop
下载hadoop-2.6.0.tar.gz压缩包。
(1)解压hadoop-2.6.0.tar.gz压缩包。
tar -xzvf hadoop-2.6.0.tar.gz
(2)配置环境变量:vi /etc/profile。
export JAVA_HOME=/usr/app/jdk1.7 export HADOOP_HOME=/usr/app/hadoop-2.6.0 export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
(3)配置hadoop-env.sh文件,修改JAVA_HOME。
/usr/app/hadoop-2.6.0/etc/hadoop
# The java implementation to use. export JAVA_HOME=/usr/app/jdk1.7
(4)配置slaves文件,增加slave节点。
/usr/app/hadoop-2.6.0/etc/hadoop
hadoop11 hadoop12 hadoop13
(5)配置core-site.xml文件
core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://ns1</value> </property> 【这里的值指的是默认的HDFS路径。当有多个HDFS集群同时工作时,集群名称在这里指 定!该值来自于hdfs-site.xml中的配置】 @@@ <property> <name>hadoop.tmp.dir</name> <value>/usr/app/hadoop-2.6.0/tmp</value> </property> 【这里的路径默认是NameNode、DataNode、JournalNode等存放数据的公共目录。用户 也可以自己单独指定这三类节点的目录。】 @@@ <property> <name>ha.zookeeper.quorum</name> <value>hadoop11:2181, hadoop12:2181, hadoop13:2181</value> </property> 【这里是ZooKeeper集群的地址和端口。注意,数量一定是奇数,且不少于三个节点】 </configuration>
(6)配置hdfs-site.xml文件
hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>3</value> </property> 【指定DataNode存储block的副本数量。默认值是3个,我们现在有4个DataNode,该值 不大于4即可。】 @@@ <property> <name>dfs.nameservices</name> <value>ns1</value> </property> 【使用federation时,HDFS集群别名。名字可以随便起,多个集群时相互不重复即可】 @@@ <property> <name>dfs.ha.namenodes.ns1</name> <value>nn1, nn2</value> </property> 【指定该集群的namenode的机器】 <property> <name>dfs.namenode.rpc-address.ns1.nn1</name> <value>hadoop11:9000</value> </property> 【指定hadoop100的RPC地址】 @@@ <property> <name>dfs.namenode.http-address.ns1.nn1</name> <value>hadoop11:50070</value> </property> 【指定hadoop100的http地址】 @@@ <property> <name>dfs.namenode.rpc-address.ns1.nn2</name> <value>hadoop12:9000</value> </property> 【指定hadoop101的RPC地址】 @@@ <property> <name>dfs.namenode.http-address.ns1.nn2</name> <value>hadoop12:50070</value> </property> 【指定hadoop101的http地址】 @@@ <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://hadoop11:8485; hadoop12:8485; hadoop13:8485/ns1 </value> </property> 【指定该集群的两个NameNode共享edits文件目录时,使用的JournalNode集群信息】 @@@ <property> <name>dfs.journalnode.edits.dir</name> <value>/usr/app/hadoop-2.6.0/journaldata</value> </property> 【指定该集群是否启动自动故障恢复,即当NameNode出故障时,是否自动切换到另一台 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.Configured FailoverProxyProvider</value> </property> 【client的failover代理配置】 @@@ <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property> 【一旦需要NameNode切换,使用ssh方式进行操作】 @@@ <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> </property> 【如果使用ssh进行故障切换,使用ssh通信时用的密钥存储的位置】 @@@ <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>30000</value> </property> 【connect-timeout连接超时】 </configuration>
(7)配置mapred-site.xml文件
mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> 【指定运行mapreduce的环境是yarn,与hadoop1截然不同的地方】 </configuration>
(8)配置yarn-site.xml文件
yarn-site.xml
<configuration> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> 【启动HA高可用性】 @@@ <property> <name>yarn.resourcemanager.cluster-id</name> <value>yrc</value> </property> 【指定resourcemanager的名字】 @@@ <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1, rm2</value> </property> 【使用了2个resourcemanager,分别指定Resourcemanager的地址】 @@@ <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>hadoop11</value> </property> 【自定ResourceManager1的地址】 @@@ <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>hadoop12</value> </property> 【自定ResourceManager2的地址】 @@@ <property> <name>yarn.resourcemanager.zk-address</name> <value>hadoop11:2181, hadoop12:2181, hadoop13:2181</value> </property> 【制定ZooKeeper机器】 @@@ <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> 【默认】 </configuration>
(9)将配置好的Hadoop文件复制到另一台slave机器上。
[root@hadoop11 app]# scp -r hadoop-2.6.0 root@hadoop13:/usr/app
(10)启动journalnode(分别在hadoop11、hadoop12、hadoop13上执行)。
cd /usr/app/hadoop-2.6 sbin/hadoop-daemon.sh start journalnode
运行jps命令检验,hadoop11、hadoop12、hadoop13上多了JournalNode进程。
(11)格式化HDFS。
在hadoop11的/usr/app/hadoop-2.6.0/bin执行命令:
hdfs namenode -format
格式化后会根据core-site.xml中的hadoop.tmp.dir配置生成文件,这里作者配置的是/usr/app/hadoop-2.6/tmp,然后将/hadoop-2.6/tmp复制到hadoop12的/hadoop-2.4.1/下。
scp -r /usr/app/hadoop-2.6/tmp/ hadoop12:/usr/app/hadoop-2.6/
也可以这样,在hadoop12上执行命令:
hdfs namenode -bootstrap Standby
HDFS格式化成功,如图2-27所示。
图2-27 HDFS格式化成功
(12)格式化ZKFC(在hadoop11上执行即可)
ZooKeeper格式化命令:hdfs zkfc -formatZK。ZooKeeper格式化成功,如图2-28所示。
图2-28 ZooKeeper格式化成功
(13)启动HDFS(在hadoop11上执行)。
启动HDFS命令:sbin/start-dfs.sh。HDFS目录界面如图2-29所示
图2-29 HDFS目录界面
(14)启动YARN。注意:是在hadoop11上执行start-yarn.sh,把namenode和resourcemanager分开是因为性能问题,因为他们都要占用大量资源,所以就要分别在不同的机器上启动。
启动YARN的命令:sbin/start-yarn.sh。YARN界面如图2-30所示。
图2-30 YARN界面
(15)验证HDFS HA
查看HDFS:http://hadoop11:50070/。
查看RM:http://hadoop11:8088/。
首先向HDFS上传一个文件。
hadoop fs -put /etc/profile / hadoop fs -ls /
然后再kill掉active的NameNode。
kill -9 <pid of NN>
通过浏览器访问:http://192.168.200.12:50070。
NameNode hadoop12:9000' (active)这个时候hadoop12上的NameNode变成了active。
执行命令:
hadoop fs -ls / -rw-r--r-- 3 root supergroup 19262017-02-06 15:36 /profile
刚才上传的文件依然存在!! !
手动启动那个挂掉的NameNode。
sbin/hadoop-daemon.sh start namenode
通过浏览器访问:http://192.168.200.11:50070。
NameNode hadoop12:9000' (standby)
(16)验证YARN:
运行一下hadoop提供的demo中的WordCount程序:
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples- 2.4.1.jar wordcount /profile /out
OK,大功告成!! !