最具影响力的数字化技术在线社区

168大数据

 找回密码
 立即注册

QQ登录

只需一步,快速开始

1 2 3 4 5
打印 上一主题 下一主题
开启左侧

[综合] 超详细Hadoop HA高可用集群搭建及常见问题处理

[复制链接]
跳转到指定楼层
楼主
发表于 2019-3-30 15:02:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
最近研究了下公司的hadoop集群并模仿搭建了一个在本地测试使用的hadoop集群。本文介绍下详细的搭建过程以及各种常见问题的处理解决。


1 ,  前期准备


    1.0  ,  准备Linux环境。


        安装vmware linux虚拟机,因为Centos 7 和Centos 6版本部分命令差别还挺多了,所以我本次用的Centos 6版本,用什么你随意,高兴就好。 集群中虚拟机需要几步必须的配置(本次集群的搭建我搞了7台虚拟机,原因下面有介绍),这里我们先配置好一台虚拟机的公共配置,然后其余的克隆出来即可,配置如下 :


              配置虚拟机网络环境


              打开你的vmware, 点击编辑->虚拟网络编辑器 -> VMnet8 ,注意ip地址以及网关和你windows本地vmnet8 的映射关系,网关保持一直,并且ip地址要在统一网段内,实在不懂的模仿这如下截图来就行,具体原因文章底部有详细讲解,如图我本地配置截图。





                合理设置每台虚拟机内存,处理器,硬盘等信息


                如下是我电脑配置截图。根据自己电脑配置酌情设置每台的硬件信息。


               


  1.2 , 修改虚拟机IP地址(最好使用第一种配置,简单且不容易出错)


        注意,修改之前建议使用 root 管理员权限登陆,这样会避免特别多问题,等集群搭建好之后在用普通用户登陆。


        7 台虚拟机ip地址最好整个连号,比如我本地是 192.168.2.201 到 192.168.2.207


        第一种:通过Linux图形界面进行修改。
进入Linux图形界面 -> 右键点击右上方的两个小电脑 -> 点击Edit connections -> 选中当前网络System eth0 -> 点击edit按钮 -> 选择IPv4 -> method选择为manual -> 点击add按钮 -> 添加IP:192.168.2.201 子网掩码:255.255.255.0 网关:192.168.2.1 -> apply
第二种:修改配置文件方式
vi /etc/sysconfig/network-scripts/ifcfg-eth0





1.3  ,  修改主机名和ip的映射关系

           


            保存退出 (键盘 Shift + :  , 输入小写 wq ,然后 enter )


            关闭防火墙 service iptables stop  


            关闭开机自启 chkconfig iptables off


   1.4 ,  完成上述配置操作后重启虚拟机


                reboot


    注 : 将另外6台虚拟机复制出来需注意的问题


           1 ,IP地址配置问题。


                我们第一台虚拟机配置好后用的是 eth0 网卡,但是克隆出来的的其他虚拟机会自动多处自己的新网卡(eth1,eth2....),实际起作用的是eth1,eth0是从之前克隆过来的,eth1才是我们需要的。克隆系统会重新生成一个mac地址,因此系统会在eth0加1变成eth1, 这里我们需要将每台虚拟机网卡都配置成使用eth0, 这样一会会避免一些可能发生的网络问题。


                vi /etc/udev/rules.d/70-persistent-net.rules


        将该文件中第一个etho注掉, 并将第二个eth1 改为 ehto , 复制他的mac地址(ATTR{address})。        



        修改完成后保存退出。


        输入命令 进入这个文件,将其中的HWADDR 改为刚才复制的mac地址。   


        vi /etc/sysconfig/network-scripts/ifcfg-eth0


           


        保存退出。


        最后重启网络服务 service network restart


        查看etho 网卡信息 ifconfig


        执行 ping www.baidu.com , 如果可以ping通的话,标识配置成功。



2 ,  集群规划


主机名 IP 安装的软件 运行的进程
weekend01 192.168.2.201     jdk hadoop NameNode、DFSZKFailoverController(zkfc)
weekend02 192.168.2.202     jdk hadoop NameNode、DFSZKFailoverController(zkfc)
weekend03 192.168.2.203 jdk hadoop ResourceManager
weekend04 192.168.2.204 jdk hadoop ResourceManager
weekend05 192.168.2.205 jdk hadoop zookeeperDataNode、NodeManager、JournalNode、QuorumPeerMain
weekend06 192.168.2.206 jdk hadoop zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain


weekend07 192.168.2.207 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain





3 ,  安装集群所需要的各个软件


  2.1 安装JDK (在第weekend01上安装)


        上传jdk压缩包,我用的是jdk7 ,


        创建文件夹 mkdir /usr/app


        解压 tar -zxvf jdk-7u55-linux-i586.tar.gz -C /usr/app


       添加环境变量


        vi /etc/profile


        在文件最后添加
export JAVA_HOME=/usr/app/jdk-7u_65-i585


export PATH=$PATHJAVA_HOME/bin


        刷新配置


source /etc/profile


    2.2 安装配置 zookeeper (在第weekend05上安装)


        上传zookeeper压缩包并解压到 /usr/app文件夹下


       修改配置
        cd /usr/app/zookeeper-3.4.5/conf/
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
修改:dataDir=/usr/app/zookeeper-3.4.5/tmp
在最后添加:
server.1=weekend05:2888:3888
server.2=weekend06:2888:3888
server.3=weekend07:2888:3888
保存退出
创建一个tmp文件夹
mkdir /usr/app/zookeeper-3.4.5/tmp
再创建一个空文件
touch /usr/app/zookeeper-3.4.5/tmp/myid
最后向该文件写入ID


echo 1 > /usr/app/zookeeper-3.4.5/tmp/myid


    配置好的zookeeper拷贝到其他节点(首先分别在weekend06、weekend07根目录下创建一个目录:mkdir /usr/app)
scp -r /usr/app/zookeeper-3.4.5/ weekend06:/usr/app/
scp -r /usr/app/zookeeper-3.4.5/ weekend07:/usr/app/
注意:修改weekend06、weekend07对应/usr/app/zookeeper-3.4.5/tmp/myid内容
weekend06:
echo 2 > /usr/app/zookeeper-3.4.5/tmp/myid
        weekend07:
echo 3 > /usr/app/zookeeper-3.4.5/tmp/myid





  2.3 安装hadoop (在第weekend01上安装)


        上传hadoop压缩包,我用的是2.4版本   


        同样解压到 /usr/app文件夹下面


        将hadoop添加到环境变量中
vi /etc/profile
export JAVA_HOME=/usr/app/jdk-7u_65-i585
export HADOOP_HOME=/usr/app/hadoop-2.4.1


export PATH=$PATHJAVA_HOME/binHADOOP_HOME/bin


        配置修改 /usr/app/hadoop-2.4.1/etc/hadoop 路径下如下5个文件


        hadoo-env.sh ,core-site.xml,hdfs-site.xml,mapred-site.xml,yarn-site.xml


        点击此处跳转至详细配置文档





2.4 修改slaves


(slaves是指定子节点的位置,因为要在weekend01上启动HDFS、在weekend03启动yarn,所以weekend01上的slaves文件指定的是datanode的位置,weekend03上的slaves文件指定的是nodemanager的位置)


分别修改 weekend01 和 weekend03上的配置文件


  vi  /usr/app/hadoop-2.4.1/etc/hadoop


    将slavles中信息改为如下所示


   


2.5 配置免密码登陆 (点击此处跳转详细配置方法文档)


配置weekend01到weekend02、weekend03、weekend04、weekend05、weekend06、weekend07的免密码登陆


配置weekend03到weekend04、weekend05、weekend06、weekend07的免密码登陆


两个namenode之间要配置ssh免密码登陆,别忘了配置weekend02到weekend01的免登陆











2.6 将配置好的hadoop及zookeeper拷贝到其他节点


在weekend01上执行 如下 :


scp -r /usr/app/hadoop-2.4.1/ weekend01:/usr/app
scp -r /usr/app/hadoop-2.4.1/ weekend02:/usr/app
........
scp -r /usr/app/hadoop-2.4.1/ weekend07:/usr/app


在weekend05上执行如下 :


scp -r /usr/app/zookeeper-3.4.5/ weekend06:/usr/app


scp -r /usr/app/zookeeper-3.4.5/ weekend07:/usr/app


按照下面的步骤启动集群
2.7 启动zookeeper集群(分别在weekend05、weekend06、weekend07上启动zk)
cd /usr/app/zookeeper-3.4.5/bin/
./zkServer.sh start
#查看状态:一个leader,两个follower
./zkServer.sh status




2.8启动journalnode(分别在在weekend05、weekend06、weekend07上执行)最下方有关系图解


注: journalnode为qjournal分布式应用(可用来管理)的管理edit.log文件,依赖于zk管理,所以将三个node节点放到zk上启动。hadoop1.x中还是用secondynode管理edit.log文件,而hadoop2.x使用qjournal管理edit.log文件。
cd /usr/app/hadoop-2.4.1
sbin/hadoop-daemon.sh start journalnode
#运行jps命令检验,weekend05、weekend06、weekend07上多了JournalNode进程




2.9格式化HDFS(仅第一次启动执行)
#在weekend01上执行命令:
hdfs namenode -format
#格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里我配置的是/weekend/hadoop-2.4.1/tmp,然后将/usr/app/hadoop-2.4.1/tmp拷贝到weekend02的/usr/app/hadoop-2.4.1/下。
scp -r tmp/ weekend02:/usr/app/hadoop-2.4.1/
##也可以这样,建议hdfs namenode -bootstrapStandby




3.1格式化ZKFC(在weekend01上执行即可)(仅第一次启动执行)


注:zkfc是用来管理两台namenode切换状态的进程。同样是依赖zk实现。当active namenode状态不正常了,该namenode上的zkfc会制一个状态发动到 zk上,standby namenode上的zkfc会查看到该不正常状态,并向active namenode通过ssh发送一条指令,kill -9 进程号,杀死该进程,并将自己重置成active,放置active假死发生脑裂事件,万一ssh发送失败,也可以启动自定义的.sh脚本文件,强制杀死active namenode进程。


在hadoop2.x中将这也的一对namenode管理关系叫做 federation(联邦)最下方有图解。


并且支持多个federation,  比如配置文件中起名为ns1, 则该ns1中包括 (active namenode)nn1, (standby namenode)nn2 。
hdfs zkfc -formatZK




3.2启动HDFS(在weekend01上执行)
sbin/start-dfs.sh




3.3 启动YARN(在weekend03上执行start-yarn.sh,把namenode和resourcemanager分开是因为性能问题,因为他们都要占用大量资源,所以把他们分开了,他们分开了就要分别在不同的机器上启动)


sbin/start-yarn.sh


weekend04上面的resourcemanager 需要自己手动去启动下,


yarn-daemon.sh start resourcemanager


到这里hadoop HA集群配置完毕,查看各个集群节点上的进程验证是否成功启动


搭建成功情况下 weekend01 , weekend02 含有的进程



weekend03 , weekend04 含有的进程





weekend05 , weekend06,weekend07 含有的进程





可以在网页查看各个服务运行状态 :


HDFS  :  http://weekend01:50070   


ResourceManager :  http://weekend03:8088


下图为常见默认端口号:





附 : 配置虚拟机网络环境配置分析


首先vmware 会产生一个虚拟网关,同时vmware 上面的虚拟机上面也有网关。


而我们的实际windows上有一块实际的网关,同事vmware 也会给我们windows生成一个虚拟网卡,快捷键 win + R 可以看到该网卡,名字叫做 VMware NetWork Adapter VMnet8 ,这个网卡当然就会与vmware 进行连接。 这样的话通过 vmware软件,就把你的centos虚拟机和本地windows主机组成一个虚拟的网络。


这样 vmware虚拟网关为 192.168.2.1 的话,那么centos虚拟机网关为192.168.2.1,网卡ip可以配置为 192.168.2.100(1-->255),而本地vmnet8 虚拟机网关同样为192.168.2.1,网卡ip可以配置为 192.168.2.101(1--255),保证两个网卡不冲突并且在同一个网段即可。












---------------------
作者:Love-花椰菜
来源:CSDN
原文:https://blog.csdn.net/qq_25838777/article/details/80732854  

楼主热帖
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 赞 踩

168大数据 - 论坛版权1.本主题所有言论和图片纯属网友个人见解,与本站立场无关
2.本站所有主题由网友自行投稿发布。若为首发或独家,该帖子作者与168大数据享有帖子相关版权。
3.其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和168大数据的同意,并添加本文出处。
4.本站所收集的部分公开资料来源于网络,转载目的在于传递价值及用于交流学习,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
5.任何通过此网页连接而得到的资讯、产品及服务,本站概不负责,亦不负任何法律责任。
6.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源,若标注有误或遗漏而侵犯到任何版权问题,请尽快告知,本站将及时删除。
7.168大数据管理员和版主有权不事先通知发贴者而删除本文。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

关于我们|小黑屋|Archiver|168大数据 ( 京ICP备14035423号|申请友情链接

GMT+8, 2024-5-4 13:17

Powered by BI168大数据社区

© 2012-2014 168大数据

快速回复 返回顶部 返回列表