当前位置:   article > 正文

HADOOP 高可用搭建_hadoop高可用集群搭建

hadoop高可用集群搭建

首先先说一下大概的步骤,就用四台为例,简单适合新手操作。

流程是:创建虚拟机,配置好;搭建linux系统;安装jdk(因为后面好多都依赖jkd);免密登录ssh;安装zookeeper;最后就是搭建高可用了。不熟练的小伙伴可以先试试单机模式。

这是我的四台机子加一个单机模式 。

1.创建虚拟机就不多说了,一直下一步下一步,重复四次创建4个。当然有疑问的可以私聊我,我帮你解决。创建好后就是修改配置

首先输入vi /etc/sysconfig/network-scripts/ifcfg-ens33,回撤

 修改的几个部分我都写出来了。把dhcp(动态分配IP)改成static,最后一次添加IPADDR=192.168.153.135;
 网关 GATEWAY=192.168.153.2;
 子网掩码  NETMASK=255.255.255.0;
 域名解析器 DNS1=8.8.8.8;esc ,  :wq 保存并退出

hostnamectl set-hostname + 名字 可以修改hostname

2.用linux系统安装数据库

1.下载mysql源安装包

$ wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm

如果运行错误。先运行

yum  install -y wget   ,然后在运行安装包

2.安装mysql源

$ yum localinstall mysql57-community-release-el7-8.noarch.rpm 

3.检查mysql源是否安装成功

$ yum repolist enabled | grep "mysql.*-community.*"

4.安装MySQL 

这一步才是真正安装mysql

$ yum install mysql-community-server

5.启动MySQL服务并设置开机启动

$ systemctl start mysqld

$ systemctl enable mysqld

$ systemctl daemon-reload

6.端口开放

$ firewall-cmd --zone=public --add-port=3306/tcp --permanent

$ firewall-cmd --reload

7.修改root本地登录密码

 1)查看mysql密码

 grep 'temporary password' /var/log/mysqld.log

localhost:是初始密码;

mysql -uroot -p  登录;

set password for 'root'@'localhost'=password('password');修改密码

set global validate_password_policy=0;  设置密码的等级

set global validate_password_length=1;  设置密码的长度

grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;

给权限就登录成功了

3 安装jdk

我写了一个脚本,放在一个文件中,给权限,执行就自动安装了,非常方便

  1. #!/bin/bash
  2. jdk=true
  3. installdir=/opt/soft
  4. if [ ! -d "$installdir" ]
  5. then mkdir $installdir
  6. fi
  7. if [ "$jdk" = true ]
  8. then echo " ---------安装java JDK------------"
  9. tar -zxf /opt/install/jdk-8u111-linux-x64.tar.gz -C /opt/soft/
  10. mv /opt/soft/jdk1.8.0_111 /opt/soft/jdk180
  11. echo "#jdk" >> /etc/profile
  12. echo 'export JAVA_HOME=/opt/soft/jdk180' >> /etc/profile
  13. echo 'export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar' >> /etc/profile
  14. echo 'export PATH=$PATH:$JAVA_HOME/bin' >> /etc/profile
  15. fi

运行完后,要source /etc/profile 更新一下

java -version ; javac 检查安装是否成功

4.ssh免密登录 注意的是每次只能生成一次,连接其他机器,断了就要重新生成

1 ssh-keygen -t rsa -P "" 

根据RSA算法生成私钥和公钥

可以用 cd .ssh/

2 拷贝公钥给目标服务器
ssh-copy-id -i .ssh/id_rsa.pub -p22 root@192.168.153.135

3免密登录 ssh -p22 root@192.168.153.***

另外三台,也这么操作,本机也要自连接

5 安装zookeeper集群

1解压zookeeper
tar -zxvf zookeeper-3.4.5-cdh5.14.2.tar.gz -C /opt/soft
改名 mv zookeeper-3.4.5-cdh5.14.2.tar.gz ./ zookeeper345

2修改配置环境
vi  /etc/profile
export ZOOKEEPER_HOME=/opt/soft/zookeeper345
export PATH=$PATH:$ZOOKEEPER_HOME/bin
source /etc/profile

3修改 zoo.cfg
dataDir=/opt/soft/zookeeper345/datatmp  //新建datatmp
clientPort=2181
server.1=192.168.153.150:2888:3888
server.2=192.168.153.160:2888:3888     //一般写三个
server.3=192.168.153.170:2888:3888

4 在zookeeper345/ 下新建:datatmp,再建一个myid  写server对应的数字

6.高可用搭建

1 解压 tar -zxvf hadoop-2.6.0-cdh5.14.2.tar.gz -C ../soft  

改名 mv  -zxvf hadoop-2.6.0-cdh5.14.2.tar ./ hadoop260

2 到/hadoop260/etc/hadoop    ls查询目录

配置 hadoop.env.sh  mapred.env.sh yarn.env.sh  三个环境 
修改 JAVA_HOME= /opt/soft/jdk180 (jdk的安装路径)

3修改 core-site.xml   hdfs-site.xml   mapred-site.xml  yarn-site.xml 和slaves 重中之重

  1. core-site.xml
  2. <!-- 指定hdfs的nameservice 为 mycluster -->
  3. <property>
  4. <name>fs.defaultFS</name>
  5. <value>hdfs://mycluster/</value>
  6. </property>
  7. <!-- 指定hadoop工作目录 -->
  8. <property>
  9. <name>hadoop.tmp.dir</name>
  10. <value>/opt/soft/hadoop260/hadooptmp/</value>
  11. </property>
  12. <!-- 指定zookeeper集群访问地址 -->
  13. <property>
  14. <name>ha.zookeeper.quorum</name>
  15. <value>yy150:2181,yy160:2181,yy170:2181</value>
  16. </property>
  17. <!-- 配置为了解决以后其他组件连接HDFS集群 -->
  18. <property>
  19. <name>hadoop.proxyuser.bigdata.hosts</name>
  20. <value>*</value>
  21. </property>
  22. <property>
  23. <name>hadoop.proxyuser.bigdata.groups</name>
  24. <value>*</value>
  25. </property>
  1. hdfs-site.xml
  2. <!-- 指定HDFS的nameservices为mycluster,需要跟core-site.xml中保持一致 -->
  3. <property>
  4. <name>dfs.nameservices</name>
  5. <value>mycluster</value>
  6. </property>
  7. <!-- 设置mycluster集群有两个namenode, 分别为nn1,nn2 -->
  8. <property>
  9. <name>dfs.ha.namenodes.mycluster</name>
  10. <value>nn1,nn2</value>
  11. </property>
  12. <!-- 配置nn1 的RPC通信地址 -->
  13. <property>
  14. <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  15. <value>yy150:9000</value>
  16. </property>
  17. <!-- 配置nn1的http通信地址 -->
  18. <property>
  19. <name>dfs.namenode.http-address.mycluster.nn1</name>
  20. <value>yy150:50070</value>
  21. </property>
  22. <!-- 配置nn2 的RPC通信地址 -->
  23. <property>
  24. <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  25. <value>yy160:9000</value>
  26. </property>
  27. <!-- 配置nn2的http通信地址 -->
  28. <property>
  29. <name>dfs.namenode.http-address.mycluster.nn2</name>
  30. <value>yy160:50070</value>
  31. </property>
  32. <!-- 指定JournalNode 在本地磁盘存放数据的位置 -->
  33. <property>
  34. <name>dfs.journalnode.edits.dir</name>
  35. <value>/opt/soft/hadoop260/journaldata</value>
  36. </property>
  37. <!-- 指定NameNode的edits元数据在journalNode上的服务器 -->
  38. <property>
  39. <name>dfs.namenode.shared.edits.dir</name>
  40. <value>qjournal://yy150:8485;yy160:8485;yy170:8485/mycluster</value>
  41. </property>
  42. <!-- 开启NameNode 自动切换 -->
  43. <property>
  44. <name>dfs.ha.automatic-failover.enabled</name>
  45. <value>true</value>
  46. </property>
  47. <!-- 配置nameNode失败自动切换的实现方式 -->
  48. <property>
  49. <name>dfs.client.failover.proxy.provider.mycluster</name>
  50. <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  51. </property>
  52. <!-- 配置隔离机制方法 -->
  53. <property>
  54. <name>dfs.ha.fencing.methods</name>
  55. <value>
  56. sshfence
  57. shell(/bin/true)
  58. </value>
  59. </property>
  60. <!-- 使用sshfence隔离机制时需要ssh免密登陆 -->
  61. <property>
  62. <name>dfs.ha.fencing.ssh.private-key-files</name>
  63. <value>/root/.ssh/id_rsa</value>
  64. </property>
  65. <!-- 配置sshfence隔离机制超时时间 -->
  66. <property>
  67. <name>dfs.ha.fencing.ssh.connect-timeout</name>
  68. <value>30000</value>
  69. </property>
  70. <property>
  71. <name>dfs.webhdfs.enabled</name>
  72. <value>true</value>
  73. </property>
  1. mapred-site.xml
  2. <!-- 指定mapreduce运算时资源调度为 yarn 模式 -->
  3. <property>
  4. <name>mapreduce.framework.name</name>
  5. <value>yarn</value>
  6. </property>
  7. <!-- 配置mapreduce历史服务器地址 端口号 -->
  8. <property>
  9. <name>mapreduce.jobhistory.address</name>
  10. <value>yy180:10020</value>
  11. </property>
  12. <!-- 配置mapreduce历史服务器WEB访问地址 -->
  13. <property>
  14. <name>mapreduce.jobhistory.webapp.address</name>
  15. <value>yy180:19888</value>
  16. </property>
  1. yarn-site.xml
  2. <!-- Site specific YARN configuration properties -->
  3. <!-- 开启高可用 -->
  4. <property>
  5. <name>yarn.resourcemanager.ha.enabled</name>
  6. <value>true</value>
  7. </property>
  8. <!-- 指定ResourceManager的标识:yrc -->
  9. <property>
  10. <name>yarn.resourcemanager.cluster-id</name>
  11. <value>yrc</value>
  12. </property>
  13. <!-- 指定RM的名字-->
  14. <property>
  15. <name>yarn.resourcemanager.ha.rm-ids</name>
  16. <value>rm1,rm2</value>
  17. </property>
  18. <!-- 指定rm1服务器 -->
  19. <property>
  20. <name>yarn.resourcemanager.hostname.rm1</name>
  21. <value>yy150</value>
  22. </property>
  23. <!-- 指定rm2服务器 -->
  24. <property>
  25. <name>yarn.resourcemanager.hostname.rm2</name>
  26. <value>yy160</value>
  27. </property>
  28. <!-- 指定rm 被管理的zk 地址 -->
  29. <property>
  30. <name>yarn.resourcemanager.zk-address</name>
  31. <value>yy150:2181,yy160:2181,yy170:2181</value>
  32. </property>
  33. <!-- 运行mapreduce任务需要使用的服务 -->
  34. <property>
  35. <name>yarn.nodemanager.aux-services</name>
  36. <value>mapreduce_shuffle</value>
  37. </property>
  38. <!-- 开启yarn集群的日志聚合功能 -->
  39. <property>
  40. <name>yarn.log-aggregation-enable</name>
  41. <value>true</value>
  42. </property>
  43. <!-- 设置日志保存时间 -->
  44. <property>
  45. <name>yarn.log-aggregation.retain-seconds</name>
  46. <value>86400</value>
  47. </property>
  48. <!-- 启动rm自动恢复功能 -->
  49. <property>
  50. <name>yarn.resourcemanager.recovery.enabled</name>
  51. <value>true</value>
  52. </property>
  53. <!-- 制定rm 状态信息存储在zookeeper集群上 -->
  54. <property>
  55. <name>yarn.resourcemanager.store.class</name>
  56. <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
  57. </property>

vi ./slaves

yy150  yy160  yy170 yy180  写入的是你四个虚拟机的hostname。

5  配置环境 vi /etc/profile

#hadoop
export HADOOP_HOME=/opt/soft/hadoop260
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

source /etc/profile

6 同步另外三台
xsync  /hadoop260
配置环境,在更新

切记 如果在格式化namenode不成功的时候,要先启动dfs  start-dfs.sh 

7 hadoop namenode -format 格式化namenode
将本机格式化后的hadooptmp文件同步到另一台备用的namenode里
scp -r ./hadooptmp  root@yy160:/opt/soft/hadoop260

8初始化zookeeper(方便两个namenode交替使用)
hdfs zkfc -formatZK

总结:这样就搭建完成了。其实挺简单的,第一搭建就成功了,后面出了一点问题,找bug难死我了,可以和大家分享一下,就是Hadoop配置完成后,格式化namenode的时候一直失败,搞了好久才发现是要先启动start-dfs.sh ,在格式化就成功了,我还以为我写错了呢。有什么问题都可以私聊我,大家一起学习进步

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/421855
推荐阅读
相关标签
  

闽ICP备14008679号