ZOOKEEPER + HADOOP HA 集群的搭建
1,首先我们了解下Hadoop是什么?
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
2, Hadoop的作用?
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。 —— [ 百度百科 ]
3,好了话不多说,直接上流程!!!!!!
3.1 环境需要:
1,zookeeper-3.4.10
2,hadoop-2.8.2
4 ,安装 Zookeeper
4.1首先我们上传安装包
4.2 上传完毕后,命令行输入:ll -a 查看安装包是否存在
4.3 检查无误后,开始解压:tar -zxvf zookeeper-3.4.10.tar.gz -C /usr/hadoop/
为了安装包便于管理我这里已经创建好了安装的目录:在根目录下创建 /usr/hadoop 把解压后的文件夹放到hadoop文件夹里
4.4 打开配置文件复制一份配置文件:
cd /usr/hadoop/zookeeper-3.4.10/conf
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
4.5 创建数据目录和日志目录
mkdir -p /usr/hadoop/zookeeper-3.4.10/zkData/data
mkdir -p /usr/hadoop/zookeeper-3.4.10/zkData/logs
4.6 数据目录下创建节点编号
/usr/hadoop/zookeeper-3.4.10/zkData/data/myid
在node01中myid文件中写入1即可
4.7 修改zk配置项
// 这里的路径是上面穿件的myid的绝对路径
dataDir=/usr/hadoop/zookeeper-3.4.10/zkData/data
在最后添加:
server.1=node01:2888:3888
server.2=node02:2888:3888
server.3=node03:2888:3888
注意:node03 是每台服务器名字,2888,是内部通讯端口号,3888是外部通讯端口号
4.8 分发修改后的安装文件 scp
4.9 修改其它机器的myid值
4.9.1 在所有机器配置环境变量:
set zk env
#zookeeper
export ZOOKEEPER_HOME=/usr/hadoop/zookeeper-3.4.10
export PATH=$PATH:$ZOOKEEPER_HOME/bin
4.9.2 让配置文件生效:
source /etc/profile
4.9.3 启动zk集群:
依次在不同节点输入 zkServers.sh start
4.9.4 检查各个个点是否正常,Zookeeper集群采用半数投票机制,我们是三台机器,节点服务依次为:两个follower(跟随者状态),一个leader(领导者状态)
到此,zookeeper搭建启动完毕!!!
5 ,安装 Hadoop
上传,解压缩的步骤跟Zookeeper时候的相同,这里就不多说了!!
6, 配置 Hadoop HA
6.1 机器配置清单(4节点)
![这里写图片描述](https://img-blog.csdn.net/20180806214827992?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9iYW8zMzA2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
6.2 修改core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://cluster1</value>
</property>
【这里的值指的是默认的HDFS路径。当有多个HDFS集群同时工作时,集群名称在这里指定!该值来自于hdfs-site.xml中的配置】
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/hadoop/hadoop-2.8.2/tmp</value>
</property>
【这里的路径默认是NameNode、DataNode、JournalNode等存放数据的公共目录。用户也可以自己单独指定这三类节点的目录。】
<property>
<name>ha.zookeeper.quorum</name>
<value>Centos7Slave00:2181,Centos7Slave01:2181,Centos7Slave02:2181</value>
</property>
【这里是ZooKeeper集群的地址和端口。注意,数量一定是奇数,且不少于三个节点】
</configuration>
6.3 修改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>cluster1</value>
</property>
【使用federation时,HDFS集群别名。名字可以随便起,多个集群时相互不重复即可】
<property>
<name>dfs.ha.namenodes.cluster1</name>
<value>Centos7Slave00,Centos7Slave01</value>
</property>
【指定该集群的namenode的机器】
<property>
<name>dfs.namenode.rpc-address.cluster1.Centos7Slave00</name>
<value>Centos7Slave00:9000</value>
</property>
【指定hadoop100的RPC地址】
<property>
<name>dfs.namenode.http-address.cluster1.Centos7Slave00</name>
<value>Centos7Slave00:50070</value>
</property>
【指定hadoop100的http地址】
<property>
<name>dfs.namenode.rpc-address.cluster1.Centos7Slave01</name>
<value>Centos7Slave01:9000</value>
</property>
【指定hadoop101的RPC地址】
<property>
<name>dfs.namenode.http-address.cluster1.Centos7Slave01</name>
<value>Centos7Slave01:50070</value>
</property>
【指定hadoop101的http地址】
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://Centos7Slave01:8485;Centos7Slave02:8485;Centos7Slave03:8485/cluster1 </value>
</property>
【指定该集群的两个NameNode共享edits文件目录时,使用的JournalNode集群信息】
<property>
<name>dfs.ha.automatic-failover.enabled.cluster1</name>
<value>true</value>
</property>
【指定该集群是否启动自动故障恢复,即当NameNode出故障时,是否自动切换到另一台NameNode】
<property>
<name>dfs.client.failover.proxy.provider.cluster1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider </value>
</property>
【指定该集群出故障时,哪个实现类负责执行故障切换】
<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连接超时】
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
【如果为“true”,则启用HDFS中的权限检查。如果为“false”,则关闭权限检查,但所有其他行为都没有改变。从一个参数值切换到另一个参数值不会改变模式,所有者或文件或目录组】
</configuration>
6.4 修改 mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
【指定运行mapreduce的环境是yarn,与hadoop1截然不同的地方】
</configuration>
6.5 修改 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> hadoop102</value>
</property>
【自定ResourceManager1的地址】
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value> hadoop103</value>
</property>
【自定ResourceManager2的地址】
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop104:2181,hadoop105:2181,hadoop106:2181</value>
</property>
【制定Zookeeper机器】
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
【默认】
</configuration>
6.6 指定DataNode Slaves
修改hadoop slaves 配置文件: vim /usr/hadoop/hadoop-2.8.2/etc/hadoop/slaves
增加你的data的机器名字:
Centos7Slave01
Centos7Slave01
Centos7Slave01
7 启动过程
1,启动zk集群
启动命令: ./zkServer.sh start
#查看zk节点服务状态:./zkServer.sh status
2, 分别启动journalnode
启动命令: sbin/hadoop-daemon.sh start journalnode
#查看节点状态: jsp
#显示节点名称: JournalNode
3, 格式化namenode 第一台服务器执行(Centos7Slave01),
执行命令: hsfs-namenode-format
4, 格式化 ZKFC 第一台服务器执行(Centos7Slave01),
执行命令: hdfs-zkfc-formatZK
5, 把第一台namenode(Centos7Slave00) 文件信息同步到 第二台namenode(Centos7Slave01)
先启动第一台(Centos7Slave00)的namenode:
执行命令: hadoop-daemon.sh start namenode
复制第一台namenode(Centos7Slave00)的tmp整个目录到 第二台namenode(Centos7Slave01)相同的路径下,保证文件同步
5.1 数据同步
执行命令: hdfs namenode bootstrapstandby
6, 启动NameNode 和 DataNode
执行命令: start-dfs.sh
#查看节点状态: jps
#显示节点名称:
Centos7Slave00(namenode),
Centos7Slave01(namenode,datanode),
Centos7Slave00(datanode),
Centos7Slave00(datanode)
7,启动yarn 第一台服务器执行(Centos7Slave00)
执行命令: start-yarn.sh
#查看节点状态: jps
#显示节点名称: ResourceManager + NodeManager
Centos7Slave00(ResourceManager),
Centos7Slave01(NodeManager),
Centos7Slave00(NodeManager),
Centos7Slave00(NodeManager)
8, 启动ZookeeperFailoverController(第一台和第二台执行(Centos7Slave00和Centos7Slave01))
执行命令: hadoop-daemon.sh start zkfc (前两台服务器分别执行)
#查看节点状态: jps
#显示节点状态: DFSZKFailoverController
9, 验证
Hdfs管理控制台
Centos7Slave00:50070 active
Centos7Slave01:50070 standby
Mr管理控制台
Centos7Slave00:8088
到此Zookeeper + Hadoop HA 配置完成!!!!!
需要注意:如果主机访问不到 hadoop或者MR的WEB UI 界面 :
关闭防火墙,
Linux主机名添加到 win的houst 文件中,
有无G掉的节点,
端口是否开放
##