Hadoop HA搭建
前提需要
准备三台虚拟机
创建三台虚拟机,主机名分别更改为hadoop01,hadoop02,hadoop03
Hadoop部署如下
主机名 |
主机IP |
hadoop01 |
192.168.197.101 |
hadoop02 |
192.168.197.102 |
hadoop03 |
192.168.197.103 |
以下更改主机名,配置网络,关闭防火墙,关闭selinux,时间同步,主机映射和免密登录三台虚拟机都要进行,不同的是主机名和IP地址,其余配置信息都相同
更改主机名
为了便于集群管理,需要更改主机名
永久修改主机名命令为:hostnamectl set-hostname 主机名
刷新命令:bash
例:hostnamectl set-hostname hadoop01
配置网络
为了便于使用和管理,需要配置静态IP
步骤如下
1.打开”虚拟网络编辑器”
2.查看网关
进入网络配置文件,进行修改,命令如下:
sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
需要将原本的BOOTPROTO="dhcp"改为BOOTPROTO="static"
再添加IP地址,自行设置,前面的部分要与网关一致,最后一位的主机号可随意,建议三台主机分别设置为101,102,103
再添加网关,即前面查看到的网关
再添加子网掩码,一般都为255.255.255.0
最后添加DNS域名解析,可设为8.8.8.8或8.8.4.4或114.114.114.114
注意ONBOOT是否等于yes,将它设置为yes开机自启
保存退出
重启网络
重启网络命令:systemctl restart network.service
可以用ping命令是否能够ping通
可以分别ping 主机IP
ping www.baidu.com
如果能够ping通,即完成网络配置
如下情况
关闭防火墙
为了三台服务器能够互相通信,需要关闭防火墙
命令:systemctl status firewalld.service
可以看到防火墙开启状态
命令: systemctl stop firewalld.service
设置为开机关闭防火墙
systemctl disable firewalld.service
systemctl status firewalld.service
可以看到我们的防火墙已经关闭了
关闭selinux
为了避免安装过程出现各种错误,建议关闭
selinux有两种状态,一个是Enforcing,为开启状态,一个是Permissive,为关闭状态
命令:getenforce
如下图可以看到当前状态是开启的
命令:sudo setenforce 0
再次执行getenforce可以看到状态已经改成Permissive关闭状态了
3.永久关闭(建议)
修改配置文件selinux
命令:sudo vim /etc/selinux/config
或:sudo vim /etc/sysconfig/selinux
修改之后如下:
时间同步
为了防止服务器之间因时间的不同而导致出现问题,建议同步网络时间
查看是否安装命令:rpm -q ntp ntpdate
如果没有安装,则执行以下命令
命令:yum install ntpdate ntp
再次查看:rpm -q ntp ntpdate
命令:cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
命令:ntpdate cn.pool.ntp.org
4.集群时间同步
命令:ntpdate hadoop01
都与hadoop01同步时间
命令:crontab -l
主机IP映射
为了便于集群管理,需要将三台服务器的主机名和IP做映射关系
首先进入所在文件目录,进行编辑,命令如下:
sudo vim /etc/hosts
将主机ip和主机名一一对应写入进去
设置如下
免密登录
为了便于集群之间的互联通信,需要进行免密登录的操作,可以减少输入密码次数,避免重复输入密码
1.输入命令:ssh-keygen -t rsa
2.然后连续按四下回车,出现如下就ok了
cd ~/.ssh
然后ls或ll查看,可以发现有两个文件
5.拷贝公钥
复制ssh生成的本地公钥至远程服务器,命令如下:
cp id_rsa.pub authorized_keys
扩展:id_rsa为私钥,id_rsa.pub为公钥
命令:ssh localhost
如果不需要输入密码说明已经完成好免密设置
安装以下组件,需要下载jdk,hadoop,zookeeper安装包至Downloads目录
cd Downloads进入下载目录
ll命令可以看到如下安装包
Java安装
先查看系统自带的jdk,命令:rpm -qa|grep jdk
可以看到有三个jdk,需要全部卸载
执行sudo yum remove 要卸载的jdk软件包名即可卸载
sudo yum remove java-1.8.0-openjdk-headless.x86_64 copy-jdk-configs.noarch java-1.8.0-openjdk*
再次查看就会发现已经卸载完了
命令:tar -zxvf jdk* -C /usr/local/
tar -zxvf 安装包名 -C 指定安装目录
这里我将Java安装在/usr/local下,如果不加-C和后面的目录参数,则默认安装在当前目录
cd /usr/local 进入到java的安装目录
mv jdk* java进行重命名
执行命令:vim ~/.bashrc
写下如下内容,将Java的安装目录添加进去
保存退出
source ~/.bashrc 使其配置生效
java -version命令就可以查看到安装好的Java版本了
Hadoop安装
1.同Java,先mv重命名为hadoop
之后配置hadoop环境变量,如下
source ~/.bashrc刷新使其配置生效
2.执行hadoop version查看hadoop版本
3.配置Hadoop配置文件
slaves文件
core-site.xml
fs.defaultFS
hdfs://mycluster
hadoop.tmp.dir
/usr/local/hadoop/tmp
ha.zookeeper.quorum
hadoop01:2181,hadoop02:2181,hadoop03:2181
ha.zookeeper.session-timeout.ms
30000
fs.trash.interval
1440
hdfs-dfs.xml
dfs.permissions.enabled
false
dfs.replication
2
dfs.nameservices
mycluster
dfs.ha.namenodes.mycluster
hadoop01,hadoop02
dfs.namenode.rpc-address.mycluster.hadoop01
hadoop01:9000
dfs.namenode.rpc-address.mycluster.hadoop02
hadoop02:9000
dfs.namenode.http-address.mycluster.hadoop01
hadoop01:50070
dfs.namenode.http-address.mycluster.hadoop02
hadoop02:50070
dfs.namenode.shared.edits.dir
qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/mycluster
dfs.ha.automatic-failover.enabled
true
dfs.client.failover.proxy.provider.mycluster org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.ha.fencing.methods
sshfence
shell(/bin/true)
dfs.ha.fencing.ssh.private-key-files
/home/miemiemie/.ssh/id_rsa
dfs.ha.fencing.ssh.connect-timeout
30000
dfs.journalnode.edits.dir
/usr/local/hadoop/tmp/dfs/journal
dfs.qjournal.start-segment.timeout.ms
60000
mapred.site-xml
mapreduce.framework.name
yarn
mapreduce.jobhistory.address
hadoop01:10020
mapreduce.jobhistory.webapp.address
hadoop01:19888
yarn-site.xml
yarn.resourcemanager.ha.enabled
true
yarn.resourcemanager.cluster-id
yrc
yarn.resourcemanager.ha.rm-ids
rm1,rm2
yarn.resourcemanager.hostname.rm1
hadoop01
yarn.resourcemanager.hostname.rm2
hadoop02
yarn.resourcemanager.zk-address
hadoop01:2181,hadoop02:2181,hadoop03:2181
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.log-aggregation-enable
true
yarn.log-aggregation.retain-seconds
86400
yarn.resourcemanager.recovery.enabled
true
yarn.resourcemanager.store.class org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore
Zookeeper安装
1.同Java和Hadoop安装,重命名之后配置环境变量,之后source生效
2.进入zookeeper目录
进入zookeeper下的conf目录,拷贝zoo_sample.cfg并改名为zoo.cfg
修改如下
server.X = hadoop0N:2888:3888中,节点N所对应的数字X。因此hadoop01、hadoop02、hadoop03中myid文件内容分别是数字1,2,3
回到zookeeper目录,创建zkData目录,命令:mkdir zkData
之后echo 1> myid
将1写入myid文件,如下
5.节点分发
上述配置可以在一台节点机器上配置完成,然后通过scp命令远程传输到另外两台数据节点机器上,只需修改myid文件里的对应的数字即可,同时将/etc/hosts和java,hadoop以及~/.bashrc的环境变量配置文件也分发过去。例如我在hadoop01上配置完成的,传输至hadoop02,hadoop03
sudo scp -r /usr/local/zookeeper root@hadoop02:/usr/local/
sudo scp -r /usr/local/zookeeper root@hadoop03:/usr/local/
sudo scp -r /usr/local/java root@hadoop02:/usr/local/
sudo scp -r /usr/local/java root@hadoop03:/usr/local/
sudo scp -r /usr/local/hadoop root@hadoop02:/usr/local/
sudo scp -r /usr/local/hadoop root@hadoop03:/usr/local/
sudo scp /etc/hosts root@hadoop02:/etc/
sudo scp /etc/hosts root@hadoop03:/etc/
sudo scp ~/.bashrc miemiemie@hadoop02:/home/miemiemie/
sudo scp ~/.bashrc miemiemie@hadoop03:/home/miemiemie/
以上Java和zookeeper的是分发到root用户下的,所以要分别进入两台虚拟机将所有权限改为使用的用户的,比如我的用户是miemiemie,这里我将hadoop02和hadoop03使用sudo chown -R miemiemie:miemiemie java和sudo chown -R miemiemie:miemiemie zookeeper和sudo chown -R miemiemie:miemiemie hadoop命令
分别进入zookeeper下的zkData目录,将myid分别改为2和3
即:
节点 |
myid |
用户权限 |
hadoop01 |
1 |
miemiemie |
hadoop02 |
2 |
miemiemie |
hadoop01 |
3 |
miemiemie |
格式化hadoop
hdfs namenode -format
格式化zookeeper
hdfs zkfc -formatZK
启动zookeeper
zkServer.sh start或hadoop-daemon.sh start zkfc
启动hdfs
start-dfs.sh
启动journalnode
hdfs --daemon start journalnode
启动yarn
start-yarn.sh
启动jobhistory
mr-jobhistory-daemon.sh history start
获取一个namenode节点的HA状态
hdfs haadmin -getServiceState hadoop01
查看hdfs的各节点状态信息
hdfs dfsadmin -report
查看进程jps
进入hdfs或yarn的web页面
HDFS web页面 192.168.197.101:50070或192.168.197.102:50070
YARN web页面 192.168.197.101:8088
至此,Hadoop的HA高可用版已经搭建完成
问题:
在编辑文件的时候出现”只读”,没有权限且加了sudo出现
“不在 sudoers 文件中。此事将被报告。”问题
解决:
将当前用户添加到sudoers文件中
在大概100行左右,找到root ALL=(ALL) ALL这个位置,
将自己的用户添加进去,格式与root一致,如下设置
之后保存退出,再切换回自己的用户即可