hadoop-3.2.1+zookeeper+3.6.3+CentOS7 HA安装部署
开始先说注意事项:
1、配置文件中所涉及到的文件目录都根据自己的实际情况来。
2、所有的文件夹或文件都必须属于操作的这个用户,不然不能创建文件或者文件夹会报错。
3、所有的配置文件中都不能有中文,包括注释。
4、我的目录结构,所有东西都放在/home/hadoop/software下的。
5、坑太多,我们砥砺前行,如有什么问题可以评论一起解决哦。
节点设计
节点 | NameNode | DataNode | resourceManager | Journalnode | zookeeper | zkfc |
---|---|---|---|---|---|---|
Master001 | √ | √ | √ | |||
Master002 | √ | √ | ||||
Slave001 | √ | √ | √ | |||
Slave002 | √ | √ | √ | |||
Slave003 | √ | √ | √ |
linux环境配置
一、linux基础信息配置
1)修改主机名
vim /etc/hostname
写入:Master001
vim /etc/sysconfig/network
写入:HOSTNAME=Master001
reboot #重启计算机
2)设置静态IP
vim /etc/sysconfig/network-scripts/ifcfg-ens33
重启有效:ONBOOT=yes
静态分配IP:BOOTPROTO=static
增加:
IP地址:IPADDR=192.168.32.101
子网掩码:NETMASK=255.255.255.0
网关:GATEWAY=192.168.32.2
域名解析:DNS1=180.76.76.76
3)设置hosts
vim /etc/hosts
#hosts文件是linux系统中负责IP地址与域名快速解析的文件。
192.168.32.100 Master001
192.168.32.101 Master002
192.168.32.200 Master001
192.168.32.201 Master002
192.168.32.202 Master003
4)切换yum源为阿里云yum源
4.1)切换目录
cd /etc/yum.repos.d/
4.2)获取阿里云源
wget http://mirrors.aliyun.com/repo/Centos-7.repo
如果wget不生效则,yum -y install wget
4.3)备份原来的云源
备份原来的源文件:mv CentOS-Base.repo CentOS-Base.repo.bak
替换yum源:mv Centos-7.repo CentOS-Base.repo
4.4)使yun源生效
yum clean all #清除缓存
yum makecache #生成新缓存
yum update #更新yum源
4.5)关闭SELinux和防火墙
#不关闭这两个后面会出现拒绝连接的异常
vim /etc/sysconfig/selinux
SELINUX=disabled #关闭SELinux
systemctl stop firewalld
systemctl disable firewalld
systemctl restart network #使配置生效
二、MySql8的安装与用户管理
1、安装
1)卸载本地已经安装的mariadb
rpm -qa | grep mariadb #列出本地安装过的
rpm -e --nodeps mariadb-libs-5.5.65-1.el7.x86_64 #强力卸载
2)下载mysql8的RPM包
yum localinstall https://repo.mysql.com/mysql80-community-release-el7-1.noarch.rpm
3)安装mysql服务
yum install mysql-community-server
4)启动mysql,并检查状态
systemctl start mysqld.service #启动mysql服务,注意有一个d
systemctl status mysqld.service #查看服务状态
5)查看root用户的初始密码
6)使用root初始密码登录mysql
mysql -uroot -p Z:d2de;U+O3R
7)修改root的密码
1)mysql密码策略比较严,要设置简单密码先得修改密码策略。
set global validate_password.policy=0 #总体复杂度降低
set global validate_password.length=6 #设置密码长度
set global validate_password.check_user_name=OFF #检测用户
set global validate_password.number_count=0 #数字位数不要求
set global validate_password.special_char_count=0 #特殊字符不要求
2)修改密码
alter user 'root'@'localhost' identified with mysql_native_password by '新密码'
3)设置开机自启
systemctl enable mysqld.service
2、用户管理
1)创建mysql用户
create user username@hostname identified by 'password';
#username:用户名
#hostname:主机名
#password:密码,注意要有引号哦
2)查看用户的权限
show grants for 用户;
3)授权给某个用户
grants 权限 on *.* to 用户 identified by '密码' with grant option;
grants 权限1,权限2,...,权限n to userName@hostname
all:全部权限
create:创建表的权限
alter:修改表的权限
drop:删除表的权限
insert:插入数据的权限
update:更新数据的权限
4)撤销授权
revoke 权限1,...,on *.* from user_name@hostname;
5)删除用户
drop user userName@hostname;
6)修改用户密码
update mysql.user set password=password('新密码') where User='用户名';
flush privileges; #刷新权限表
三、JDK安装
1)上传解压下载好的jdk包
tar -zxf jdk-8u251-linux-x64.tar.gz
2)配置环境变量
vim /etc/profile
JAVA_HOME=jdk的路径
source /etc/profile #使配置环境生效
四、hadoop安装与配置
1)直接解压,并添加环境变量,注意所有的配置文件中禁止出现中文,包括注释也不行。这坑我陷在里面好几天。
export HADOOP_HOME=/home/hadoop/model/hadoop-3.2.1
#
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
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/native"
export JAVA_LIBRARY=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
2)配置hadoop环境变量
2.1)进入配置文件所在目录
cd /hadoop-3.2.1/etc/hadoop
2.2)修改hadoop-env.sh
vim hadoop-env.sh
export JAVA_HOME=jdk安装目录
export JAVA_HOME=/home/hadoop/software/jdk1.8.0_251/jre
export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native"
export HDFS_NAMENODE_USER="hadoop"
export HDFS_DATANODE_USER="hadoop"
export HDFS_ZKFC_USER="hadoop"
export HDFS_JOURNALNODE_USER="hadoop"
export HDFS_SECONDARYNAMENODE_USER="hadoop"
export HDFS_RESOURCEMANAGER_USER="hadoop"
export YARN_RESOURCEMANAGER_USER="hadoop"
export YARN_NODEMANAGER_USER="hadoop"
2.3)修改core-site.xml
<configuration>
<property>
<name>ha.zookeeper.quorum</name>
<value>Slave001:2181,Slave002:2181,Slave003:2181</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/software/data/tmp</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
</configuration>
2.4)修改hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>Master001:9000</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>Master002:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>Master001:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>Master002:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://Slave001:8485;Slave002:8485;Slave003:8485/mycluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/software/data/QJEditsData</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
2.5)配置mapred-site.xml
<configuration>
<!-- 设置jar程序启动Runner类的main方法运行在yarn集群上,通知框架MR使用yarn-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
2.6)修改workers文件,指定数据节点。
vim workers #去掉localhost
添加:
Slave001
Slave002
Slave003
2.7)配置yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<!-- 设置ResourceManager在哪台结点-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>Master001</value>
</property>
<!-- Reduce取数据的方式是mapreduce_shuffle-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
2.8)复制虚拟机
注意: 复制虚拟机后要选择我已复制,不然MAC地址没有改变会冲突。
如果选了我已移动,解决办法:点编辑虚拟机
五、SSH免密登录
1)检查是否安装ssh
rpm -qa | grep ssh
yum list | grep ssh #查看yum源有哪些ssh
yum install -y ...clients和server
2)生成秘钥
ssh-keygen -t -rsa #一路回车即可
3)分发秘钥
ssh-copy-id 其他节点名,包括自己
ssh 其他节点名,检查是否成功
六、zookeeper安装与启动
1)上传、解压、进入conf目录、复制zoo_sample.cfg为zoo.cfg并编辑
dataDir=/home/hadoop/software/apache-zookeeper-3.6.2-bin/tmp/zookeeper #NameNode的快照存放目录目录根据自己实际来写
#添加
#选举规则配置,规则服务器编号=服务器地址:LF通信端口:选举端口
server.1=Slave001:2888:3888
server.2=Slave002:2888:3888
server.3=Slave003:2888:3888
2)创建配置文件中存放快照的文件夹
mkdir -p /home/hadoop/apache-zookeeper-3.6.2-bin/tmp/zookeeper
3)在快照文件夹下创建myid文件
vim myid
写入结点编号:3
4)把zookeeper目录分发到其他节点(Salave001\002\003),并且在相应节点中修改myid为想想节点的编号。
scp -r apache-zookeeper-3.6.2-bin Slave001:~/software/
5) 把zookeeper添加到环境变量
#ZOOKEEPER
export ZOOKEEPER_HOME=/home/hadoop/software/apache-zookeeper-3.6.2-bin
export PATH=$PATH:$ZOOKEEPER_HOME/bin
6)zookeeper启动命令
zkServer.sh start | stop | status
七、启动集群
1)高可用集群格式化NameNode时需要到Zookeeper每个节点上启动journalnode进程。(保证所有文件夹对hadoop用户有读写权限,否则文件夹创建不了线程就启动不起来。)
hdfs start journalnode #第一次启动必须要在数据节点先启动这个线程
2)在Master001中格式化NameNode。
hdfs namenode -format
3)把生成的tmp目录拷贝到其他每一台节点相应的目录下
4)在Master001中格式化zookeeper
rm -rf /tmp/hsperfdata_* #每台虚拟机都执行删除文件
hdfs zkfc -format #初始化zk
集群搭好后再格式化一下zk
rm -rf /tmp/hsperfdata_* #每台虚拟机都执行删除文件
hdfs zkfc -formatZK
八、配置文件
vim /etc/profile #这个文件
export JAVA_HOME=/home/hadoop/software/jdk1.8.0_251/
export PATH=$JAVA_HOME/bin:$PATH
#HADOOP
export HADOOP_HOME=/home/hadoop/software/hadoop-3.2.1
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
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/native"
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
#ZOOKEEPER
自己把zookeeper的路径加上,Master001、002节点不需要配置