版权声明:原创作品,谢绝转载!否则将追究法律责任。

  本篇博客的高可用集群是建立在完全分布式基础之上的,详情请参考:https://www.cnblogs.com/yinzhengjie/p/9065191.html。并且需要新增一台Linux服务器,用于Namenode的备份节点。

一.实验环境准备
  需要准备五台Linux操作系统的服务器,配置参数最好一样,由于我的虚拟机是之前完全分布式部署而来的,因此我的环境都一致。

1>.NameNode服务器(s101)

2>.DataNode服务器(s102)

3>.DataNode服务器(s103)

4>.DataNode服务器(s104)

5>.DataNode服务器(s105)

二.在s101上修改配置文件并分发到其它节点

  关于配置hadoop高可用的参数,参考官网链接:http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html

1>.在s101上拷贝配置目录并修改符号链接

  1. [yinzhengjie@s101 ~]$ ll /soft/hadoop/etc/
  2. total 12
  3. drwxr-xr-x. 2 yinzhengjie yinzhengjie 4096 Jun 8 05:36 full
  4. lrwxrwxrwx. 1 yinzhengjie yinzhengjie 21 Jun 8 05:54 hadoop -> /soft/hadoop/etc/full
  5. drwxr-xr-x. 2 yinzhengjie yinzhengjie 4096 May 25 09:15 local
  6. drwxr-xr-x. 2 yinzhengjie yinzhengjie 4096 May 25 20:51 pseudo
  7. [yinzhengjie@s101 ~]$ cp -r /soft/hadoop/etc/full /soft/hadoop/etc/ha
  8. [yinzhengjie@s101 ~]$ ln -sfT /soft/hadoop/etc/ha /soft/hadoop/etc/hadoop
  9. [yinzhengjie@s101 ~]$ ll /soft/hadoop/etc/
  10. total 16
  11. drwxr-xr-x. 2 yinzhengjie yinzhengjie 4096 Jun 8 05:36 full
  12. drwxr-xr-x. 2 yinzhengjie yinzhengjie 4096 Jun 8 05:54 ha
  13. lrwxrwxrwx. 1 yinzhengjie yinzhengjie 19 Jun 8 05:54 hadoop -> /soft/hadoop/etc/ha
  14. drwxr-xr-x. 2 yinzhengjie yinzhengjie 4096 May 25 09:15 local
  15. drwxr-xr-x. 2 yinzhengjie yinzhengjie 4096 May 25 20:51 pseudo
  16. [yinzhengjie@s101 ~]$

2>.配置s105ssh免密登陆

  1. [yinzhengjie@s101 ~]$ ssh-copy-id yinzhengjie@s105
  2. /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
  3. /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
  4. yinzhengjie@s105's password:
  5.  
  6. Number of key(s) added: 1
  7.  
  8. Now try logging into the machine, with: "ssh 'yinzhengjie@s105'"
  9. and check to make sure that only the key(s) you wanted were added.
  10.  
  11. [yinzhengjie@s101 ~]$ who
  12. yinzhengjie pts/0 2018-06-08 05:29 (172.16.30.1)
  13. [yinzhengjie@s101 ~]$
  14. [yinzhengjie@s101 ~]$ ssh s105
  15. Last login: Fri Jun 8 05:37:20 2018 from 172.16.30.1
  16. [yinzhengjie@s105 ~]$
  17. [yinzhengjie@s105 ~]$ who
  18. yinzhengjie pts/0 2018-06-08 05:37 (172.16.30.1)
  19. yinzhengjie pts/1 2018-06-08 05:56 (s101)
  20. [yinzhengjie@s105 ~]$ exit
  21. logout
  22. Connection to s105 closed.
  23. [yinzhengjie@s101 ~]$

3>.编辑core-site.xml配置文件

  1. [yinzhengjie@s101 ~]$ more /soft/hadoop/etc/hadoop/core-site.xml
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <configuration>
  4. <property>
  5. <name>fs.defaultFS</name>
  6. <value>hdfs://mycluster</value>
  7. </property>
  8. <property>
  9. <name>hadoop.tmp.dir</name>
  10. <value>/home/yinzhengjie/ha</value>
  11. </property>
  12. <property>
  13. <name>hadoop.http.staticuser.user</name>
  14. <value>yinzhengjie</value>
  15. </property>
  16. </configuration>
  17.  
  18. <!--
  19.  
  20. core-site.xml配置文件的作用:
  21. 用于定义系统级别的参数,如HDFS URLHadoop的临时
  22. 目录以及用于rack-aware集群中的配置文件的配置等,此中的参
  23. 数定义会覆盖core-default.xml文件中的默认配置。
  24.  
  25. fs.defaultFS 参数的作用:
  26. #fs.defaultFS 客户端连接HDFS时,默认的路径前缀。如果前面配置了nameservice ID的值是mycluster,那么这里可以配置为授权
  27. 信息的一部分
  28.  
  29. hadoop.tmp.dir 参数的作用:
  30. #声明hadoop工作目录的地址。
  31.  
  32. hadoop.http.staticuser.user 参数的作用:
  33. #在网页界面访问数据使用的用户名。
  34.  
  35. -->
  36. [yinzhengjie@s101 ~]$

4>.编辑hdfs-site.xml配置文件

  1. [yinzhengjie@s101 ~]$ more /soft/hadoop/etc/hadoop/hdfs-site.xml
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  4. <configuration>
  5. <property>
  6. <name>dfs.replication</name>
  7. <value>3</value>
  8. </property>
  9. <property>
  10. <name>dfs.namenode.name.dir</name>
  11. <value>/home/yinzhengjie/ha/dfs/name1,/home/yinzhengjie/ha/dfs/name2</value>
  12. </property>
  13. <property>
  14. <name>dfs.datanode.data.dir</name>
  15. <value>/home/yinzhengjie/ha/dfs/data1,/home/yinzhengjie/ha/dfs/data2</value>
  16. </property>
  17.  
  18. <!-- 高可用配置 -->
  19. <property>
  20. <name>dfs.nameservices</name>
  21. <value>mycluster</value>
  22. </property>
  23.  
  24. <property>
  25. <name>dfs.ha.namenodes.mycluster</name>
  26. <value>nn1,nn2</value>
  27. </property>
  28.  
  29. <property>
  30. <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  31. <value>s101:8020</value>
  32. </property>
  33. <property>
  34. <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  35. <value>s105:8020</value>
  36. </property>
  37.  
  38. <property>
  39. <name>dfs.namenode.http-address.mycluster.nn1</name>
  40. <value>s101:50070</value>
  41. </property>
  42. <property>
  43. <name>dfs.namenode.http-address.mycluster.nn2</name>
  44. <value>s105:50070</value>
  45. </property>
  46.  
  47. <property>
  48. <name>dfs.namenode.shared.edits.dir</name>
  49. <value>qjournal://s102:8485;s103:8485;s104:8485/mycluster</value>
  50. </property>
  51.  
  52. <property>
  53. <name>dfs.client.failover.proxy.provider.mycluster</name>
  54. <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  55. </property>
  56.  
  57. <!-- 在容灾发生时,保护活跃的namenode -->
  58. <property>
  59. <name>dfs.ha.fencing.methods</name>
  60. <value>
  61. sshfence
  62. shell(/bin/true)
  63. </value>
  64. </property>
  65.  
  66. <property>
  67. <name>dfs.ha.fencing.ssh.private-key-files</name>
  68. <value>/home/yinzhengjie/.ssh/id_rsa</value>
  69. </property>
  70.  
  71. </configuration>
  72.  
  73. <!--
  74. hdfs-site.xml 配置文件的作用:
  75. #HDFS的相关设定,如文件副本的个数、块大小及是否使用强制权限
  76. 等,此中的参数定义会覆盖hdfs-default.xml文件中的默认配置.
  77.  
  78. dfs.replication 参数的作用:
  79. #为了数据可用性及冗余的目的,HDFS会在多个节点上保存同一个数据
  80. 块的多个副本,其默认为3个。而只有一个节点的伪分布式环境中其仅用
  81. 保存一个副本即可,这可以通过dfs.replication属性进行定义。它是一个
  82. 软件级备份。
  83.  
  84. dfs.namenode.name.dir 参数的作用:
  85. #本地磁盘目录,NN存储fsimage文件的地方。可以是按逗号分隔的目录列表,
  86. fsimage文件会存储在全部目录,冗余安全。这里多个目录设定,最好在多个磁盘,
  87. 另外,如果其中一个磁盘故障,不会导致系统故障,会跳过坏磁盘。由于使用了HA
  88. 建议仅设置一个。如果特别在意安全,可以设置2
  89.  
  90. dfs.datanode.data.dir 参数的作用:
  91. #本地磁盘目录,HDFS数据应该存储Block的地方。可以是逗号分隔的目录列表
  92. (典型的,每个目录在不同的磁盘)。这些目录被轮流使用,一个块存储在这个目录,
  93. 下一个块存储在下一个目录,依次循环。每个块在同一个机器上仅存储一份。不存在
  94. 的目录被忽略。必须创建文件夹,否则被视为不存在。
  95.  
  96. dfs.nameservices 参数的作用:
  97. #nameservices列表。逗号分隔。
  98.  
  99. dfs.ha.namenodes.mycluster 参数的作用:
  100. #dfs.ha.namenodes.[nameservice ID] 命名空间中所有NameNode的唯一标示名称。
  101. 可以配置多个,使用逗号分隔。该名称是可以让DataNode知道每个集群的所有NameNode
  102. 当前,每个集群最多只能配置两个NameNode
  103.  
  104. dfs.namenode.rpc-address.mycluster.nn1 参数的作用:
  105. #dfs.namenode.rpc-address.[nameservice ID].[name node ID] 每个namenode监听的RPC地址。
  106.  
  107. dfs.namenode.http-address.mycluster.nn1 参数的作用:
  108. #dfs.namenode.http-address.[nameservice ID].[name node ID] 每个namenode监听的http地址。
  109.  
  110. dfs.namenode.shared.edits.dir 参数的作用:
  111. #这是NameNode读写JNs组的uri。通过这个uri,NameNodes可以读写edit log内容。URI的格式"qjournal://host1:port1;host2:port
  112. 2;host3:port3/journalId"。这里的host1、host2、host3指的是Journal Node的地址,这里必须是奇数个,至少3个;其中journalId是集群
  113. 的唯一标识符,对于多个联邦命名空间,也使用同一个journalId。
  114.  
  115. dfs.client.failover.proxy.provider.mycluster 参数的作用:
  116. #这里配置HDFS客户端连接到Active NameNode的一个java类
  117.  
  118. dfs.ha.fencing.methods 参数的作用:
  119. #dfs.ha.fencing.methods 配置active namenode出错时的处理类。当active namenode出错时,一般需要关闭该进程。处理方式可以
  120. 是ssh也可以是shell。
  121.  
  122. dfs.ha.fencing.ssh.private-key-files 参数的作用:
  123. #使用sshfence时,SSH的私钥文件。 使用了sshfence,这个必须指定
  124.  
  125. -->
  126. [yinzhengjie@s101 ~]$

5>.分发配置文件

  1. [yinzhengjie@s101 ~]$ more `which xrsync.sh`
  2. #!/bin/bash
  3. #@author :yinzhengjie
  4. #blog:http://www.cnblogs.com/yinzhengjie
  5. #EMAIL:y1053419035@qq.com
  6.  
  7. #判断用户是否传参
  8. if [ $# -lt 1 ];then
  9. echo "请输入参数";
  10. exit
  11. fi
  12.  
  13. #获取文件路径
  14. file=$@
  15.  
  16. #获取子路径
  17. filename=`basename $file`
  18.  
  19. #获取父路径
  20. dirpath=`dirname $file`
  21.  
  22. #获取完整路径
  23. cd $dirpath
  24. fullpath=`pwd -P`
  25.  
  26. #同步文件到DataNode
  27. for (( i=102;i<=105;i++ ))
  28. do
  29. #使终端变绿色
  30. tput setaf 2
  31. echo =========== s$i %file ===========
  32. #使终端变回原来的颜色,即白灰色
  33. tput setaf 7
  34. #远程执行命令
  35. rsync -lr $filename `whoami`@s$i:$fullpath
  36. #判断命令是否执行成功
  37. if [ $? == 0 ];then
  38. echo "命令执行成功"
  39. fi
  40. done
  41. [yinzhengjie@s101 ~]$ xrsync.sh /soft/hadoop/etc/
  42. =========== s102 %file ===========
  43. 命令执行成功
  44. =========== s103 %file ===========
  45. 命令执行成功
  46. =========== s104 %file ===========
  47. 命令执行成功
  48. =========== s105 %file ===========
  49. 命令执行成功
  50. [yinzhengjie@s101 ~]$

三.启动HDFS分布式系统

1>.启动journalnode进程

  1. [yinzhengjie@s101 ~]$ hadoop-daemons.sh start journalnode
  2. s104: starting journalnode, logging to /soft/hadoop-2.7.3/logs/hadoop-yinzhengjie-journalnode-s104.out
  3. s103: starting journalnode, logging to /soft/hadoop-2.7.3/logs/hadoop-yinzhengjie-journalnode-s103.out
  4. s102: starting journalnode, logging to /soft/hadoop-2.7.3/logs/hadoop-yinzhengjie-journalnode-s102.out
  5. [yinzhengjie@s101 ~]$ xcall.sh jps
  6. ============= s101 jps ============
  7. 2855 Jps
  8. 命令执行成功
  9. ============= s102 jps ============
  10. 2568 Jps
  11. 2490 JournalNode
  12. 命令执行成功
  13. ============= s103 jps ============
  14. 2617 Jps
  15. 2539 JournalNode
  16. 命令执行成功
  17. ============= s104 jps ============
  18. 2611 Jps
  19. 2532 JournalNode
  20. 命令执行成功
  21. ============= s105 jps ============
  22. 2798 Jps
  23. 命令执行成功
  24. [yinzhengjie@s101 ~]$ more `which xcall.sh`
  25. #!/bin/bash
  26. #@author :yinzhengjie
  27. #blog:http://www.cnblogs.com/yinzhengjie
  28. #EMAIL:y1053419035@qq.com
  29.  
  30. #判断用户是否传参
  31. if [ $# -lt 1 ];then
  32. echo "请输入参数"
  33. exit
  34. fi
  35.  
  36. #获取用户输入的命令
  37. cmd=$@
  38.  
  39. for (( i=101;i<=105;i++ ))
  40. do
  41. #使终端变绿色
  42. tput setaf 2
  43. echo ============= s$i $cmd ============
  44. #使终端变回原来的颜色,即白灰色
  45. tput setaf 7
  46. #远程执行命令
  47. ssh s$i $cmd
  48. #判断命令是否执行成功
  49. if [ $? == 0 ];then
  50. echo "命令执行成功"
  51. fi
  52. done
  53. [yinzhengjie@s101 ~]$

2>.格式化名称节点

 [yinzhengjie@s101 ~]$ hdfs namenode -format

3>.将s101中的工作目录同步到s105

  1. [yinzhengjie@s101 ~]$ scp -r /home/yinzhengjie/ha yinzhengjie@s105:~
  2. VERSION 100% 205 0.2KB/s 00:00
  3. seen_txid 100% 2 0.0KB/s 00:00
  4. fsimage_0000000000000000000.md5 100% 62 0.1KB/s 00:00
  5. fsimage_0000000000000000000 100% 358 0.4KB/s 00:00
  6. VERSION 100% 205 0.2KB/s 00:00
  7. seen_txid 100% 2 0.0KB/s 00:00
  8. fsimage_0000000000000000000.md5 100% 62 0.1KB/s 00:00
  9. fsimage_0000000000000000000 100% 358 0.4KB/s 00:00
  10. [yinzhengjie@s101 ~]$

4>.启动hdfs进程

  1. [yinzhengjie@s101 ~]$ start-dfs.sh
  2. Starting namenodes on [s101 s105]
  3. s105: starting namenode, logging to /soft/hadoop-2.7.3/logs/hadoop-yinzhengjie-namenode-s105.out
  4. s101: starting namenode, logging to /soft/hadoop-2.7.3/logs/hadoop-yinzhengjie-namenode-s101.out
  5. s104: starting datanode, logging to /soft/hadoop-2.7.3/logs/hadoop-yinzhengjie-datanode-s104.out
  6. s103: starting datanode, logging to /soft/hadoop-2.7.3/logs/hadoop-yinzhengjie-datanode-s103.out
  7. s102: starting datanode, logging to /soft/hadoop-2.7.3/logs/hadoop-yinzhengjie-datanode-s102.out
  8. Starting journal nodes [s102 s103 s104]
  9. s102: journalnode running as process 2490. Stop it first.
  10. s104: journalnode running as process 2532. Stop it first.
  11. s103: journalnode running as process 2539. Stop it first.
  12. [yinzhengjie@s101 ~]$ xcall.sh jps
  13. ============= s101 jps ============
  14. 3377 Jps
  15. 3117 NameNode
  16. 命令执行成功
  17. ============= s102 jps ============
  18. 2649 DataNode
  19. 2490 JournalNode
  20. 2764 Jps
  21. 命令执行成功
  22. ============= s103 jps ============
  23. 2539 JournalNode
  24. 2700 DataNode
  25. 2815 Jps
  26. 命令执行成功
  27. ============= s104 jps ============
  28. 2532 JournalNode
  29. 2693 DataNode
  30. 2809 Jps
  31. 命令执行成功
  32. ============= s105 jps ============
  33. 3171 NameNode
  34. 3254 Jps
  35. 命令执行成功
  36. [yinzhengjie@s101 ~]$

5>.手动将s101转换成激活状态

  1. [yinzhengjie@s101 ~]$ hdfs haadmin -transitionToActive nn1 //手动将s101转换成激活状态
  2. [yinzhengjie@s101 ~]$

  配置到这里基本上高可用就配置好了,但是美中不足的是需要字节手动切换NameNode模式,这就比较麻烦了。索性的是:Hadoop生态圈有专门维护的工具叫做zookeeper工具,我们可以用该工具对集群继续管理就相当方便啦!详情请参考:https://www.cnblogs.com/yinzhengjie/p/9154265.html

当你的才华还撑不起你的野心的时候,你就应该静下心来学习。当你的能力还驾驭不了你的目标的时候,你就应该沉下心来历练。问问自己,想要怎样的人生。 欢迎加入高级自动化运维之路:598432640

Hadoop部署方式-高可用集群部署(High Availability)的更多相关文章

  1. 部署zookeepe高可用集群

                                                                部署zookeepe高可用集群 部署规划 Nno1         192.16 ...

  2. hbase高可用集群部署(cdh)

    一.概要 本文记录hbase高可用集群部署过程,在部署hbase之前需要事先部署好hadoop集群,因为hbase的数据需要存放在hdfs上,hadoop集群的部署后续会有一篇文章记录,本文假设had ...

  3. RocketMQ的高可用集群部署

    RocketMQ的高可用集群部署 标签(空格分隔): 消息队列 部署 1. RocketMQ 集群物理部署结构 Rocket 物理部署结构 Name Server: 单点,供Producer和Cons ...

  4. 部署MYSQL高可用集群

                                                  mysql-day08     部署MYSQL高可用集群 u 集群架构                   ...

  5. rocketmq高可用集群部署(RocketMQ-on-DLedger Group)

    rocketmq高可用集群部署(RocketMQ-on-DLedger Group) rocketmq部署架构 rocketmq部署架构非常多,都是为了解决一些问题,越来越高可用,越来越复杂. 单ma ...

  6. MySQL MHA 高可用集群部署及故障切换

    MySQL MHA 高可用集群部署及故障切换 1.概念 2.搭建MySQL + MHA 1.概念: a)MHA概念 : MHA(MasterHigh Availability)是一套优秀的MySQL高 ...

  7. (十)RabbitMQ消息队列-高可用集群部署实战

    原文:(十)RabbitMQ消息队列-高可用集群部署实战 前几章讲到RabbitMQ单主机模式的搭建和使用,我们在实际生产环境中出于对性能还有可用性的考虑会采用集群的模式来部署RabbitMQ. Ra ...

  8. (六) Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)

    参考并感谢 官方文档 https://hub.docker.com/_/redis GitHub https://github.com/antirez/redis happyJared https:/ ...

  9. RabbitMQ的高可用集群部署

    RabbitMQ的高可用集群部署 标签(空格分隔): 消息队列 部署 1. RabbitMQ部署的三种模式 1.1 单一模式 单机情况下不做集群, 仅仅运行一个RabbitMQ. # docker-c ...

随机推荐

  1. SpringBoot集成dubbo实例

    项目总览图: 最下面有项目的pom,具体内容: 项目运行注意事项: 先启动 provider, 将providers.xml中 port 先修改为20187 执行test目录 下的DubboProvi ...

  2. Team Member Introduction and Division of Work

    Team leader Name:宋天舒 Student Number:12061166 Interested In: Information safety. Responsible For: Des ...

  3. 在CANopen网络中通过LSS服务设置节点地址和网络波特率

    CANopen专有个子协议用来描述怎样去通过网络设置节点地址和波特率,就是CiA DSP-305,大伙都叫LSS协议,是Layer Setting Services的缩写,不太好翻译,也许可以翻译成底 ...

  4. vue 中使用better-scroll 遇到的问题

    以下是遇到问题以及解决方法 1.使用v-for 循环循环出来的列表,不能滚动. 原因是没有给wrapper 父层 加高度,当子层的高度大于父层的高度,才能滚动 打印scroll 对象,显示如此 竟然相 ...

  5. systemct管理服务命令

    systemctl管理服务的启动,重启,停止,重载,查看状态的命令 Systcinit命令(红帽RHEL6系统) Systemctl命令(红帽RHEL7系统) 作用 service  foo star ...

  6. excel表格如何限制单元格输入内容

    一天一天实在太快,周六了~~~ 测试任务不太紧的时候就可以着手开始整理本月的测试项目,选择的是excel,清晰明了. 原来excel的功能远比我们想象的强大与好用,今天先介绍如何限制单元格内容: 如下 ...

  7. debug阶段团队贡献分分配

    小组名称:飞天小女警 项目名称:礼物挑选小工具 小组成员:沈柏杉(组长).程媛媛.杨钰宁.谭力铭 debug阶段各组员的贡献分分配如下: 姓名 团队贡献分 程媛媛 5.8 沈柏杉 6.5 谭力铭 3. ...

  8. Jenkins权限控制-Role Strategy Plugin插件使用

    Role Strategy Plugin插件可以对构建的项目进行授权管理,让不同的用户管理不同的项目,将测试和生产环境分开. 具体配置方法如下(操作需要管理员用户权限). Jenkins版本:1.64 ...

  9. python3.6执行AES加密及解密方法

    python版本:3.6.2 首先安装pycryptodome cmd执行命令:pip install pycryptodome 特别简单,代码如下: #!/usr/bin/python # -*- ...

  10. scrapy-yield scrapy.Request()不执行、失效、Filtered offsite request to错误 [转]

    scrapy错误:yield scrapy.Request()不执行.失效.Filtered offsite request to错误.首先我们在Request()方法里面添加这么一个东东: yiel ...