当前位置:   article > 正文

Hadoop的HA模式搭建

Hadoop的HA模式搭建

准备三台虚拟机 bigdata007bigdata008bigdata009

1.前置工作

1.修改虚拟机的IP地址和hostname

 

2.配置集群中的ip映射(/etc/hosts)

  1. 192.168.111.57 bigdata007
  2. 192.168.111.58 bigdata008
  3. 192.168.111.59 bigdata009

3.关闭虚拟机的防火墙

4.集群间实现免密登录

  1. ssh root@bigdata007
  2. ssh-keygen -t rsa
  3. ssh-copy-id bigdat007
  4. ssh-copy-id bigdat008
  5. ssh-copy-id bigdat009

每台虚拟机都执行类似操作

2.安装zookeeper

导入安装包,解压到/opt/softs目录

tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz  -C /opt/softs/

修改包名 mv apache-zookeeper-3.5.7-bin/ zookeeper3.5.7
cd ../

在/zookeeper3.5.7目录下创建zkData目录,

里面创建文件myid写入id

 

配置文件

进入/opt/softs/zookeeper3.5.7/conf 目录

删除log4j.properties

 上传新的

  1. # 定义日志输出路径
  2. log4j.appender.file.File=/opt/softs/zookeeper3.5.7/logs/zookeeper.log
  3. # 定义日志轮循策略,按天轮循
  4. log4j.appender.file.DatePattern='.'yyyy-MM-dd
  5. log4j.appender.file.append=true
  6. log4j.appender.file.layout=org.apache.log4j.PatternLayout
  7. log4j.appender.file.layout.ConversionPattern=%d{ISO8601} [%t] %-5p %c{1}:%L - %m%n

重要路径


/opt/softs/zookeeper3.5.7 目录下
创建logs目录

修改文件名

zoo_sample.cfg 为 zoo.cfg
 

 

 修改zoo.cfg

添加 

 分发给其他两台虚拟机

scp -r zookeeper3.5.7/ root@bigdata008:/opt/softs/

修改各个虚拟机上的myid

配置环境变量 /etc/profile
  1. #JAVA_HOME
  2. export JAVA_HOME=/opt/softs/jdk1.8.0
  3. export PATH=$PATH:$JAVA_HOME/bin
  4. #ZK_HOME
  5. export ZK_HOME=/opt/softs/zookeeper3.5.7
  6. export PATH=$PATH:$ZK_HOME/bin

 

记得source一下  source /etc/profile
,直接分发

​​​​​​​scp /etc/profile root@bigdata008:/etc/

添加启动脚本

创建目录 /opt/shell

导入脚本

  1. #!/bin/bash
  2. # 在调用shell脚本时,需要传入一个参数,用于标识执行开启或者关闭zk集群的开启关闭和查询状态
  3. #判断调用shell脚本时 是否正常的传入参数
  4. #参数小于1
  5. if [ $# -lt 1 ]
  6. then
  7. echo "调用该脚本时需要传入一个参数"
  8. exit ;
  9. fi
  10. #传入的第一个参数 有三种情况
  11. case $1 in
  12. "start")
  13. echo "----------启动zk集群----------"
  14. for hostname in bigdata007 bigdata008 bigdata009
  15. do
  16. echo "-------------$hostname------------"
  17. ssh $hostname "/opt/softs/zookeeper3.5.7/bin/zkServer.sh start"
  18. done
  19. ;;
  20. "stop")
  21. echo "----------关闭hadoop集群----------"
  22. for hostname in bigdata007 bigdata008 bigdata009
  23. do
  24. echo "-------------$hostname------------"
  25. ssh $hostname "/opt/softs/zookeeper3.5.7/bin/zkServer.sh stop"
  26. done
  27. ;;
  28. "status")
  29. echo "----------查询zk集群状态-------------"
  30. for hostname in bigdata007 bigdata008 bigdata009
  31. do
  32. echo "-------------$hostname------------"
  33. ssh $hostname "/opt/softs/zookeeper3.5.7/bin/zkServer.sh status"
  34. done
  35. ;;
  36. *)
  37. echo "输入的参数不符合脚本运行的规则,请输入start或者stop,status"
  38. ;;
  39. esac

将JAVA_HOME=/opt/softs/jdk1.8.0  

写入zkServer.sh

​​​​​​​ 分发给其他虚拟机

scp zkServer.sh root@bigdata008:/opt/softs/zookeeper3.5.7/bin/
 

运行sh /opt/shell/my_zk.sh start 检查脚本是否成功

2.进行集群规划

bigdata007bigdata008bigdata009
hdfsNameNode DataNodeNameNode DataNode DataNode
zk
yarnNodeManagerNodeManager,ResourceManagerNodeManager,ResourceManager

 

 3.上传hadoop安装包

解压

4.修改配置文件

进入目录
/opt/softs/hadoop3.1.3/etc/hadoop

在hadoop-env.sh 中添加

core-site.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3. <!-- hdfs地址,ha中是连接到nameservice -->
  4. <property>
  5. <name>fs.defaultFS</name>
  6. <value>hdfs://mycluster</value>
  7. </property>
  8. <!-- 指定hadoop数据的存储目录 -->
  9. <property>
  10. <name>hadoop.tmp.dir</name>
  11. <value>/opt/softs/hadoop3.1.3/data</value>
  12. </property>
  13. <!-- 故障转移 -->
  14. <property>
  15. <name>ha.zookeeper.quorum</name>
  16. <value>bigdata007:2181,bigdata008:2181,bigdata009:2181</value>
  17. </property>
  18. <!-- 解决HDFS web页面上删除、创建文件权限不足的问题 -->
  19. <property>
  20. <name>hadoop.http.staticuser.user</name>
  21. <value>root</value>
  22. </property>
  23. <property>
  24. <name>hadoop.proxyuser.root.hosts</name>
  25. <value>*</value>
  26. </property>
  27. <property>
  28. <name>hadoop.proxyuser.root.groups</name>
  29. <value>*</value>
  30. </property>
  31. </configuration>

hdfs-site.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3. <!-- 为namenode集群定义一个services name -->
  4. <property>
  5. <name>dfs.nameservices</name>
  6. <value>mycluster</value>
  7. </property>
  8. <!-- nameservice包含哪些namenode,为各个namenode起名 -->
  9. <property>
  10. <name>dfs.ha.namenodes.mycluster</name>
  11. <value>nn1,nn2</value>
  12. </property>
  13. <!-- 名称为nn1的namenode的rpc地址和端口号,rpc用来和datanode通讯 -->
  14. <property>
  15. <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  16. <value>bigdata007:8020</value>
  17. </property>
  18. <!-- 名称为nn2的namenode的rpc地址和端口号,rpc用来和datanode通讯 -->
  19. <property>
  20. <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  21. <value>bigdata008:8020</value>
  22. </property>
  23. <!-- 名称为nn1的namenode的http地址和端口号,web客户端 -->
  24. <property>
  25. <name>dfs.namenode.http-address.mycluster.nn1</name>
  26. <value>bigdata007:50070</value>
  27. </property>
  28. <!-- 名称为nn2的namenode的http地址和端口号,web客户端 -->
  29. <property>
  30. <name>dfs.namenode.http-address.mycluster.nn2</name>
  31. <value>bigdata008:50070</value>
  32. </property>
  33. <!-- namenode间用于共享编辑日志的journal节点列表 -->
  34. <property>
  35. <name>dfs.namenode.shared.edits.dir</name>
  36. <value>qjournal://bigdata007:8485;bigdata008:8485;bigdata009:8485/mycluster</value>
  37. </property>
  38. <!-- journalnode 上用于存放edits日志的目录 -->
  39. <property>
  40. <name>dfs.journalnode.edits.dir</name>
  41. <value>/opt/softs/hadoop3.1.3/data/dfs/jn</value>
  42. </property>
  43. <!-- 客户端连接可用状态的NameNode所用的代理类 -->
  44. <property>
  45. <name>dfs.client.failover.proxy.provider.ns1</name>
  46. <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  47. </property>
  48. <!--sshfence:防止namenode脑裂,当脑裂时,会自动通过ssh到old-active将其杀掉,将standby切换为active -->
  49. <property>
  50. <name>dfs.ha.fencing.methods</name>
  51. <value>sshfence</value>
  52. </property>
  53. <!--ssh密钥文件路径-->
  54. <property>
  55. <name>dfs.ha.fencing.ssh.private-key-files</name>
  56. <value>/root/.ssh/id_rsa</value>
  57. </property>
  58. <!-- 故障转移设置为ture -->
  59. <property>
  60. <name>dfs.ha.automatic-failover.enabled</name>
  61. <value>true</value>
  62. </property>
  63. </configuration>

mapred-site.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3. <!--指定mapreduce运行在yarn框架上-->
  4. <property>
  5. <name>mapreduce.framework.name</name>
  6. <value>yarn</value>
  7. </property>
  8. <!--设置mapreduce的历史服务器安装在bigdata007节点上-->
  9. <property>
  10. <name>mapreduce.jobhistory.address</name>
  11. <value>bigdata007:10020</value>
  12. </property>
  13. <!--设置历史服务器的web页面地址和端口号-->
  14. <property>
  15. <name>mapreduce.jobhistory.webapp.address</name>
  16. <value>bigdata007:19888</value>
  17. </property>
  18. </configuration>

yarn-site.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3. <!-- 配置yarn的默认混洗方式,选择为mapreduce的默认混洗算法 -->
  4. <property>
  5. <name>yarn.nodemanager.aux-services</name>
  6. <value>mapreduce_shuffle</value>
  7. </property>
  8. <!-- 是否启用日志聚集功能 -->
  9. <property>
  10. <name>yarn.log-aggregation-enable</name>
  11. <value>true</value>
  12. </property>
  13. <!-- 是配置聚集的日志在HDFS上最多保存多长时间 -->
  14. <property>
  15. <name>yarn.log-aggregation.retain-seconds</name>
  16. <value>106800</value>
  17. </property>
  18. <!-- 启用resourcemanager的ha功能 -->
  19. <property>
  20. <name>yarn.resourcemanager.ha.enabled</name>
  21. <value>true</value>
  22. </property>
  23. <!-- 为resourcemanage ha集群起个id -->
  24. <property>
  25. <name>yarn.resourcemanager.cluster-id</name>
  26. <value>yarn-cluster</value>
  27. </property>
  28. <!-- 指定resourcemanger ha有哪些节点名 -->
  29. <property>
  30. <name>yarn.resourcemanager.ha.rm-ids</name>
  31. <value>rm1,rm2</value>
  32. </property>
  33. <!-- 指定第一个节点的所在节点 -->
  34. <property>
  35. <name>yarn.resourcemanager.hostname.rm1</name>
  36. <value>bigdata008</value>
  37. </property>
  38. <!-- 指定第二个节点所在机器 -->
  39. <property>
  40. <name>yarn.resourcemanager.hostname.rm2</name>
  41. <value>bigdata009</value>
  42. </property>
  43. <!-- 指定resourcemanger ha所用的zookeeper节点 -->
  44. <property>
  45. <name>yarn.resourcemanager.zk-address</name>
  46. <value>bigdata007:2181,bigdata008:2181,bigdata009:2181</value>
  47. </property>
  48. <!-- 开启Recovery后,ResourceManger会将应用的状态等信息保存到yarn.resourcemanager.store.class配置的存储介质中,重启后会load这些信息,并且NodeManger会将还在运行的container信息同步到ResourceManager,整个过程不影响作业的正常运行。 -->
  49. <property>
  50. <name>yarn.resourcemanager.recovery.enabled</name>
  51. <value>true</value>
  52. </property>
  53. <!-- 指定yarn.resourcemanager.store.class的存储介质(HA集群只支持ZKRMStateStore) -->
  54. <property>
  55. <name>yarn.resourcemanager.store.class</name>
  56. <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
  57. </property>
  58. </configuration>

 配置运行hadoop中的works

 

​​​​​​​​​​​​​​

hadoop分发到别的目录

scp -r hadoop3.1.3/ root@bigdata008:/opt/softs/
 

再次/etc/profile 配置文件

 

  1. #HADOOP_HOME
  2. export HADOOP_HOME=/opt/softs/hadoop3.1.3
  3. export PATH=$PATH:$HADOOP_HOME/bin
  4. export PATH=$PATH:$HADOOP_HOME/sbin
  5. export HADOOP_CONF_DIR=/opt/softs/hadoop3.1.3/etc/hadoop
  6. export HADOOP_CLASSPATH=`hadoop classpath`
  7. export HDFS_NAMENODE_USER=root
  8. export HDFS_DATANODE_USER=root
  9. export HDFS_SECONDARYNAMENODE_USER=root
  10. export YARN_RESOURCEMANAGER_USER=root
  11. export YARN_NODEMANAGER_USER=root
  12. export HDFS_JOURNALNODE_USER=root
  13. export HDFS_ZKFC_USER=root

配置完成后,传给其他两台虚拟机上,记得source一下

NameNode初始化

1.在每个节点上启动journalnode

hadoop-daemon.sh start journalnode
 

2.在每个节点上启动zk

zkServer.sh start

3.在某一个NameNode节点(bigdata007)上对NameNode进行初始化 

hdfs namenode -format

启动NameNode并进行同步

1.在bigdata007上执行NameNode的启动

hadoop-daemon.sh start namenode

2.在另外一个NameNode节点(bigdata008)上同步元数据信息,然后再启动NameNode

        --同步元数据

        hdfs namenode -bootstrapStandby

        --启动NameNode

hadoop-daemon.sh start namenode



进行zk的初始化        

在bigdata007上执行zk的初始化

hdfs zkfc -formatZK

启动hdfs和yarn

start-dfs.sh

start-yarn.sh

windows配置文件

 

 

用浏览器访问

http://bigdata007:50070

http://bigdata008:50070

 07是活跃的

 

 

yarn的

http://bigdata008:8088


 

http://bigdata009:8088

有一个处于活跃状态

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号