首页 / HADOOP / Hadoop集群(高可用)
Hadoop集群(高可用)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Hadoop集群(高可用),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5621字,纯文字阅读大概需要9分钟。
内容图文
![Hadoop集群(高可用)](/upload/InfoBanner/zyjiaocheng/1077/aefa4e0827584909ba7d61f1d4b86450.jpg)
分布式搭建入口:https://www.cnblogs.com/Hephaestus/p/12213719.html
集群规划:
namenode | datanode | journalnode | |
---|---|---|---|
hadoop100 | 是(nn2) | ||
hadoop101 | 是(nn1) | 是 | 是 |
hadoop102 | 是 | 是 | |
hadoop103 | 是 | 是 |
1. 简介
高可用程序的类型
主从方式(冷备)
两个相同的应用程序,一个对外提供服务,成为主程序,另一个平时不运行为备程序,就是一个主程序的备份,一旦主程序出现问题,备份提供恢复操作
双主互备(热备)
两个相同的应用程序,同时对外提供服务(两个程序相互为对方备份的存在,双主热备),当启动一个出现问题时,另一个可以对外提供服务,不会造成服务器宕机
2. 配置(在之前搭建分布式集群的基础上)
修改配置文件
- 修改核心配置文件:
vim etc/hadoop/core-site.xml
加入
<configuration>
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<!--hdfs://hadoop101:9000-->
<value>hdfs://mycluster</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/soft/module/hadoop-2.9.2/data/tmp</value>
</property>
</configuration>
- 修改hdfs配置文件:
vim etc/hadoop/hdfs-site.xml
加入
<configuration>
<!--HA高可用配置-->
<!--集群起名-->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<!--指定mycluster的有哪些namenode,nn1,nn2 自己去的名-->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<!--nn1 RPC端口 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>hadoop101:9000</value>
</property>
<!--nn1 HTTP端口 -->
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>hadoop101:50070</value>
</property>
<!--nn2 RPC端口 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>hadoop100:9000</value>
</property>
<!--nn2 HTTP端口 -->
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>hadoop100:50070</value>
</property>
<!--HA故障切换 -->
<!-- 当namnode故障,是否自动启动另一个namenode(默认值为false)-->
<property>
<name>dfs.ha.automatic-failover.enabled </name>
<value>false</value>
</property>
<!-- journalnode 配置 -->
<!-- mycluster的两个namenode共享editsa文件目录时,使用journalnode集群信息-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop101:8485;hadoop102:8485;hadoop103:8485/mycluster</value>
</property>
<!--当mycluster故障时,哪个实现类负责故障切换-->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop101:8485;hadoop102:8485;hadoop103:8485/mycluster</value>
</property>
<!--当mycluster故障时,哪个实现类负责故障切换-->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--发生failover时,Standby的节点要执行一系列方法把原来那个Active节点中不健康的NameNode服务给杀掉,
这个叫做fence过程。sshfence会通过ssh远程调用fuser命令去找到Active节点的NameNode服务并杀死它-->
<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!--SSH私钥 使用sshfence隔离机制时需要ssh免登陆-->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name><!--免密登录密钥位置-->
<!--<value>/home/hadoop/.ssh/id_rsa</value>-->
<value>/home/banana/.ssh/id_rsa</value>
</property>
<!--SSH超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<!--Journal Node文件存储地址 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/soft/module/hadoop-2.9.2/data/tmp/journal</value>
</property>
</configuration>
- 修改从机配置文件:
vim etc/hadoop/slaves
hadoop101
hadoop102
hadoop103
- 分发配置文件
xsync.sh etc/hadoop/
3. 启动集群
- 启动journalnode集群
将journalnode部署在DataNode节点上 在DataNode节点执行./sbin/hadoop-daemon.sh start journalnode
- 格式化namenode(一定要在journalnode集群启动后再进行格式化)
(1) 先删除所有节点上的tmp dfs/name dfs/data logs
等目录
(2) 在nn1(namenode1)上执行hdfs namenode –format
(3) 在hadoop101(nn1上)启动namenodehadoop-daemon.sh start namenode
- namenode2同步namenode1上格式化后的信息(先启动nn1的namenode)
在nn2(namenode2)上执行hdfs namenode -bootstrapStandby
- 在namenode1启动集群
sbin/start-dfs.sh
4. 激活namenode
- 执行完前面的步骤后 此时namenode1和namenode2都是standby状态(通过web服务查看),还不能正常提供服务,需要将将其中一个节点切换到active状态。
- 将namenode1切换为active状态
在namennode1执行./bin/hdfs haadmin -failover --forceactive nn2 nn1
(这里nn2, nn1表示namenode的服务名,需要与hdfs-sit.xml中的配置保持一致。)然后查看namenode1和namenode2的状态
5. HA手动切换
- 在active状态的namenode执行
kill -9 xxx(进程id)
- 切换namenode
在namenode2上切换为active./bin/hdfs haadmin -failover --forceactive nn1 nn2
(执行后日志会报错,是因为jar包版本的原因,不影响切换状态。)
附:自己出的小问题
8.8.8.101:8485: Call From hadoop101/8.8.8.101 to hadoop101:8485 failed on connection exception: java.net.ConnectException: 拒绝连接; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
问题:未启动journal集群(./sbin/hadoop-daemon.sh start journalnode)
Unable to fetch namespace information from active NN at hadoop101/8.8.8.101:9000: Call From hadoop100/8.8.8.100 to hadoop101:9000 failed on connection exception: java.net.ConnectException: 拒绝连接; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
问题:未启启动主机器的namenode:(./hadoop-daemon.sh start namenode)
对于拒绝连接问题:如果你的所有配置都是正确的,那么这个问题只能是host,network,firewall(当然还有你输命令的问题)
原文:https://www.cnblogs.com/Hephaestus/p/12420370.html
内容总结
以上是互联网集市为您收集整理的Hadoop集群(高可用)全部内容,希望文章能够帮你解决Hadoop集群(高可用)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。