Hadoop教程(五)Hadoop分布式集群部署安装
1 Hadoop分布式集群部署安装
在hadoop2.0中通常由两个NameNode组成,一个处于active状态,还有一个处于standby状态。
Active
NameNode对外提供服务,而Standby NameNode则不正确外提供服务,仅同步activenamenode的状态,以便可以在它失败时高速进行切换。
hadoop2.0官方提供了两种HDFS
HA的解决方式。一种是NFS,还有一种是QJM。
这里我们使用简单的QJM。
在该方案中。主备NameNode之间通过一组JournalNode同步元数据信息。一条数据仅仅要成功写入多数JournalNode即觉得写入成功。通常配置奇数个JournalNode
这里还配置了一个zookeeper集群,用于ZKFC(DFSZKFailoverController)故障转移,当ActiveNameNode挂掉了,会自己主动切换Standby
NameNode为standby状态。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
1.1 Hadoop分布式集群工作原理图
1.2 集群规划
主机名 |
IP |
安装软件 |
执行进程 |
Hadoop1 |
192.168.1.121 |
Jdk、Hadoop |
NameNode、DFSZKFailoverController |
Hadoop2 |
192.168.1.122 |
Jdk、Hadoop |
NameNode、DFSZKFailoverController |
Hadoop3 |
192.168.1.123 |
Jdk、Hadoop |
ResourceManager |
Hadoop4 |
192.168.1.124 |
Jdk、Hadoop、Zookeep |
DataNode、NodeManager、JournalNode、QuorumPeerMain |
Hadoop5 |
192.168.1.125 |
Jdk、Hadoop、Zookeep |
DataNode、NodeManager、JournalNode、QuorumPeerMain |
Hadoop6 |
192.168.1.126 |
Jdk、Hadoop、Zookeep |
DataNode、NodeManager、JournalNode、QuorumPeerMain |
1.3 相关下载
1、JDK下载地址:jdk-8u66-linux-x64.tar.gz
Linux安装JDK及环境变量配置,參见:http://blog.csdn.net/yuan_xw/article/details/49948285
2、Hadoop下载:hadoop-2.7.1.tar.gz
3、Zookeeper下载:zookeeper-3.4.5.tar.gz
1.4 配置hosts文件
配置Hadoop1server,运行命令:vi
/etc/hosts
127.0.0.1 localhost
192.168.1.121 Hadoop1
192.168.1.122 Hadoop2
192.168.1.123 Hadoop3
192.168.1.124 Hadoop4
192.168.1.125 Hadoop5
192.168.1.126 Hadoop6
其他服务scp命令进行复制:
scp /etc/hosts192.168.1.122:/etc/
scp /etc/hosts192.168.1.123:/etc/
scp /etc/hosts192.168.1.124:/etc/
scp /etc/hosts 192.168.1.125:/etc/
scp /etc/hosts 192.168.1.126:/etc/
1.5 配置ssh免password登录
产生密钥。运行命令:ssh-keygen-t rsa,按4回车。密钥文件位于~/.ssh文件
在Hadoop1上生产一对钥匙。将公钥复制到其它节点,包含自己,运行命令:
ssh-copy-idHadoop1
ssh-copy-idHadoop2
ssh-copy-idHadoop3
ssh-copy-idHadoop4
ssh-copy-idHadoop5
ssh-copy-idHadoop6
在Hadoop3上生产一对钥匙,配置Hadoop3到Hadoop4、Hadoop5、Hadoop6的免password登陆,运行命令:
产生密钥,运行命令:ssh-keygen-t rsa,按4回车,密钥文件位于~/.ssh文件,将公钥复制到其它节点
ssh-copy-idHadoop4
ssh-copy-idHadoop5
ssh-copy-idHadoop6
在Hadoop2上生产一对钥匙,两个namenode之间要配置ssh免password登陆。运行命令:
产生密钥。运行命令:ssh-keygen-t rsa,按4回车。密钥文件位于~/.ssh文件,将公钥复制到其它节点
ssh-copy-id -iHadoop1
1.6 关闭防火墙
1、关闭防火墙:
安装iptables-services命令:
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
验证:firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)
关闭防火墙自己主动执行:
运行命令:systemctl disable iptables.service
验证:systemctl list-unit-files |grep iptables
用上述相同的方法在Hadoop2、Hadoop3、Hadoop4、Hadoop5、Hadoop6中如法炮制就可以。
1.7 上传server
Hadoop1server创建/usr/local/software/package文件夹后,再进行上传:
解压JDK:
运行命令:tar -zxvfjdk-8u66-linux-x64.tar.gz -C /usr/local/software/
解压:Hadoop:
运行命令:tar -zxvfhadoop-2.7.1.tar.gz
-C /usr/local/software/
重命名:mv hadoop-2.7.1/ hadoop_2.7.1/
Hadoop4server创建/usr/local/software/package文件夹后,再进行上传:
解压Zookeeper:
运行命令:tar -zxvfzookeeper-3.4.5.tar.gz -C /usr/local/software/
重命名:mv zookeeper-3.4.5zookeeper_3.4.5
在server节点(Hadoop2、Hadoop3、Hadoop4、Hadoop5、Hadoop6),创建/usr/local/software文件夹。
解压完后成后,分别在Hadoop1、Hadoop4删除/usr/local/software/package文件夹:
运行命令:rm -rf/usr/local/software/package/
1.8 改动配置文件(Hadoop1):
2、改动hadoop-env.sh配置文件:
运行命令:
vi /usr/local/software/hadoop_2.7.1/etc/hadoop/hadoop-env.sh
改动内容:
export JAVA_HOME=/usr/local/software/jdk1.8.0_66
3、改动core-site.xml配置文件:
运行命令:
vi /usr/local/software/hadoop_2.7.1/etc/hadoop/core-site.xml
改动内容:
<configuration>
<!--指定hdfs的nameService1节点URL地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1</value>
</property>
<!-- Hadoop的执行时文件存放路径,假设不存在此文件夹须要格式化 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/software/hadoop_2.7.1/tmp</value>
</property>
<!-- Zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>Hadoop4:2181,Hadoop5:2181,Hadoop6:2181</value>
</property>
</configuration>
4、改动hdfs-site.xml配置文件:
运行命令:
vi /usr/local/software/hadoop_2.7.1/etc/hadoop/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>Hadoop1:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>Hadoop1:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>Hadoop2:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>Hadoop2:50070</value>
</property>
<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://Hadoop4:8485;Hadoop5:8485;Hadoop6:8485/ns1
</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/itcast/hadoop-2.2.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>
5、改动mapred-site.xml配置文件:
运行命令:
切换文件夹:cd /usr/local/software/hadoop_2.7.1/etc/hadoop/
重命名:mv mapred-site.xml.template mapred-site.xml
改动文件:vi mapred-site.xml
改动内容:
<configuration>
<!-- 指定Hadoop的MapReduce执行在YARN环境 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
6、改动yarn-site.xml配置文件:
运行命令:
vi /usr/local/software/hadoop_2.7.1/etc/hadoop/yarn-site.xml
改动内容:
<configuration>
<!--指定YARN的master节点( ResourceManager) 的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>Hadoop3</value>
</property> <!-- NodeManager获取数据方式:shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
7、改动slaves配置文件:
运行命令:
vi /usr/local/software/hadoop_2.7.1/etc/hadoop/slaves
Hadoop4
Hadoop5
Hadoop6
1.9 环境变量
1、Hadoop1改动profilie文件:运行命令:vi/etc/profile
export JAVA_HOME=/usr/local/software/jdk1.8.0_66
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export HADOOP_HOME=/usr/local/software/hadoop_2.7.1
export PATH=.:$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH
2、Hadoop1拷贝文件到server:Hadoop2、Hadoop3、Hadoop4、Hadoop5、Hadoop6
Hadoop1复制JDK:
scp -r /usr/local/software/Hadoop2:/usr/local/
scp -r /usr/local/software/ Hadoop3:/usr/local/
scp -r /usr/local/software/ Hadoop4:/usr/local/
scp -r /usr/local/software/ Hadoop5:/usr/local/
scp -r /usr/local/software/ Hadoop6:/usr/local/
3、Hadoop1复制环境变量:Hadoop2、Hadoop3
scp /etc/profile Hadoop2:/etc/
scp /etc/profile Hadoop3:/etc/
4、Hadoop4改动profilie文件:运行命令:vi/etc/profile
export JAVA_HOME=/usr/local/software/jdk1.8.0_66
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export HADOOP_HOME=/usr/local/software/hadoop_2.7.1
export ZOOKEEPER_HOME=/usr/local/software/zookeeper_3.4.5
export PATH=.:$JAVA_HOME/bin:$HADOOP_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH
5、Hadoop4拷贝文件到server:Hadoop5、Hadoop6
Hadoop1复制zookeeper:
scp -r zookeeper_3.4.5/Hadoop5:/usr/local/software/zookeeper_3.4.5/
scp -r zookeeper_3.4.5/ Hadoop6:/usr/local/software/zookeeper_3.4.5/
6、Hadoop4复制环境变量:
Hadoop5、Hadoop6
scp /etc/profile Hadoop5:/etc/
scp /etc/profile Hadoop6:/etc/
7、在Hadoop1、Hadoop2、Hadoop3、Hadoop4、Hadoop5、Hadoop6。分别刷新环境变量
运行命令:source /etc/profile 刷新环境变量
1.10 Zookeeper集群配置:
1、改动zoo.cfg文件:
运行命令:
cd /usr/local/software/zookeeper_3.4.5/conf
mv zoo_sample.cfgzoo.cfg
改动内容。运行命令:vi zoo.cfg:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/software/zookeeper_3.4.5/data
clientPort=2181
server.4 = Hadoop4:2888:3888
server.5 = Hadoop5:2888:3888
server.6 = Hadoop6:2888:3888
2、server标识配置
创建目录:mkdir data。
创建文件myid并填写内容为4:vi
myid (内容为server标识:4)。
把Hadoop5、Hadoop6中的myid文件中的值改动为5和6路径(vi
%ZOOKEEPER_HOME%/data/myid)。
依照同样的步骤,为其他机器都配置上zoo.cfg和myid文件。
1.11 启动Zookeeper:
分别在Hadoop4、Hadoop5、Hadoop6server上启动zookeeper:
Hadoop4运行命令:/usr/local/software/zookeeper_3.4.5/bin/zkServer.sh
start #启动zookeeper
Hadoop5运行命令:/usr/local/software/zookeeper_3.4.5/bin/zkServer.sh
start #启动zookeeper
Hadoop6运行命令:/usr/local/software/zookeeper_3.4.5/bin/zkServer.sh
start #启动zookeeper
Hadoop4运行命令:/usr/local/software/zookeeper_3.4.5/bin/zkServer.sh
status #查看启动状态
Hadoop5运行命令:/usr/local/software/zookeeper_3.4.5/bin/zkServer.sh
status #查看启动状态
Hadoop6运行命令:/usr/local/software/zookeeper_3.4.5/bin/zkServer.sh
status #查看启动状态
1.12 启动journalnode:
在Hadoop1上启动全部journalnode。注意:是调用的hadoop-daemon.sh这个脚本:
Hadoop4运行命令:/usr/local/software/hadoop_2.7.1/sbin/hadoop-daemon.shstart
journalnode #启动journalnode
Hadoop5运行命令:/usr/local/software/hadoop_2.7.1/sbin/hadoop-daemon.shstart
journalnode #启动journalnode
Hadoop6运行命令:/usr/local/software/hadoop_2.7.1/sbin/hadoop-daemon.shstart
journalnode #启动journalnode
1.13 格式化文件系统:
在Hadoop1server上进行:HDFS文件系统进行格式化,运行命令:
# hadoop namenode –formate(已过时)
hdfs namenode -format推荐使用
验证:提演示样例如以下信息表示成功:
INFO common.Storage: Storage directory/usr/local/software/hadoop_2.7.1/tmp/dfs/name has been successfully formatted.
Hadoop的执行时文件存放路径为:tmp文件夹,Hadoop2须要和Hadoop1一致,进行拷贝:
运行命令:scp -r/usr/local/software/hadoop_2.7.1/tmp Hadoop2:/usr/local/software/hadoop_2.7.1/
1.14 格式化formatZK:
仅仅须要在Hadoop1上进行运行命名就可以:
运行命令:hdfs zkfc -formatZK
验证:
打开Hadoop4serverzookeeperclient,查看是否存在hadoop-ha节点
运行命令:/usr/local/software/zookeeper_3.4.5/bin/zkCli.sh
查看节点命令:ls
/
1.15 启动HDFS:
1、仅仅须要在Hadoop1上启动HDFS,
运行命令:/usr/local/software/hadoop_2.7.1/sbin/start-dfs.sh
验证启动HDFS:
Jps:JDK提供查看当前java进程的小工具。
NameNode:它是Hadoop中的主server,管理文件系统名称空间和对集群中存储的文件的訪问。
DFSZKFailoverController会定期通过该rpc调用proxy.monitorHealth()来监測NN的健康状况。
1.16 启动YARN:
1、仅仅须要在Hadoop3上启动YARN,
运行命令:/usr/local/software/hadoop_2.7.1/sbin/start-yarn.sh
2、验证启动YARN:
Jps:JDK提供查看当前java进程的小工具。
ResourceManager:接收client任务请求,接收和监控NodeManager(NM)的资源情况汇报,负责资源的分配与调度,启动和监控ApplicationMaster(AM)。
1.17 訪问Hadoop服务页面:
訪问地址验证启动服务。訪问地址:
HDFS管理界面:http://192.168.1.121:50070/
YARN管理界面:http://192.168.1.123:8088/
1.18 验证HDFS - HA主备切换:
1、验证Hadoop1serverNameNode和Hadoop2serverNameNode数据文件能否够共享:
在Hadoop1上传文件hosts文件:
运行命令:hadoop fs-put /etc/hosts /
杀掉Hadoop1 NameNode进程。运行命令:
查看进程:jps
Kill -9 6068
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
验证成功
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
2、启动Hadoop1上的NameNode进程。将Hadoop2server进行强制关机,验证能否够激活Hadoop1:
启动Hadoop1serverNameNode进程:
运行命令:/usr/local/software/hadoop_2.7.1/sbin/hadoop-daemon.shstart namenode
将Hadoop2服务进行关机处理:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
主备切换对照图:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
--以上为《Hadoop教程(五)Hadoop分布式集群部署安装》,如有不当之处请指出。我兴许逐步完好更正。大家共同提高。
谢谢大家对我的关注。
——厚积薄发(yuanxw)