最近负责的项目准备上大数据平台存储,主要还是围绕Hadoop平台来实现,虽然打算上cdh版本的hadoop,但是为了前期方便开发还是先使用原声的hadoop进行开发,后期再准备更好的环境进行扩展。
三台服务器系统环境是建立在Centos7.6基础上。并且是建立在root账户上运行的,如果需要使用其他用户操作,注意权限的问题
在三台新购买的服务器上进行搭建。服务器规划如下
hostname | ip | 说明 |
---|---|---|
tidb1 | 192.168.108.66 | namenode与datanode |
tidb2 | 192.168.108.67 | namenode与datanode |
tidb3 | 192.168.108.68 | namenode与datanode |
搭建大数据集群基础机器配置是三台,真实环境部署建议namenode与datanode进行分开,两台机器专门做namenode节点,其他三台做datanode节点。
每台机器安装内容如下:
tidb1 | tidb2 | tidb3 | |
---|---|---|---|
NameNode | √ | √ | |
DataNode | √ | √ | √ |
ResourceManager | √ | √ | |
NodeManager | √ | √ | √ |
Zookeeper | √ | √ | √ |
journalnode | √ | √ | √ |
zkfc | √ | √ |
在3.0版本以上,我们可以进行安装多个NameNode节点,来保证更高的高可用方案。但是作为基础的测试环境开发这样就是可以了,更多机器扩展也在此进行扩展即可。
三台机器都需要这么做
部署集群之前将集群的防火墙进行关闭,否则部署出现,访问端口访问不到的情景。
centos 系统中存在两种防火墙,firewall 与iptables , 7.0以后默认是firewall 防火墙,但是也在网上看到其他朋友遇见过 7.0系统上存在两种防火墙策略导致布置程序端口一直访问不到的情况。
[root@tidb1 sbin]# firewall-cmd --state
running
systemctl stop firewalld.service
systemctl disbale firewalld.service
执行以上三步之后,程序再开机之后不再出现防火墙的配置问题。
如果是这个防火墙的配置,我们也需要进行防火墙的关闭,如果熟悉的话其实打开对应的端口策略即可。
service iptables status
service iptables stop
Redirecting to /bin/systemctl stop iptables.service
chkconfig iptables off
对于安装在其他系统上的集群环境,按照对应的策略进行关闭防火墙。
三台机器都需要这么做
关于这个增强型Linux,网上很多都建议关闭,在这里搜索下了相关资料,主要是没有人进行专门的维护运营白名单导致的。
测试环境上我们也进行关闭,方便我们集群的搭建。正式上线根据运维的需要进行部署执行。
getenforce
setenforce 0 #将SELinux修改为Permissive状态(遇到违反安全策略的,会采取警告,允许通过)
setenforce 1 #将SELinux状态修改为Enforcing状态(遇到违反安全策略的,不允许通过)
打开文件: /etc/selinux/config 修改 SELINUX = disabled
重启机器后生效,重启机器命令:reboot
三台机器都需要这么做
在企业环境中,如果是真实的服务器,不是利用云服务器,那么我们使用服务器之前需要进行ip的固定,不然服务器出现意外重启,会导致我们ip变动,集群就不能正常启动。
固定ip,两种执行方案:
ls /etc/sysconfig/network-scripts/
vi /etc/sysconfig/network-scripts/ifcfg-enp*
# 启用host-only网卡
cd /etc/sysconfig/network-scripts/
cp ifcfg-enp0s3 ifcfg-enp0s8
service network restart
三台机器都需要这么做
重点注意,配置主节点Namenode的时候,需要将localhost 两行 注释掉,不然会出现找不到hostname的问题。其他节点可以存在
vim /etc/hosts
[root@tidb1 network-scripts]# cat /etc/hosts
#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.108.66 tidb1
192.168.108.67 tidb2
192.168.108.68 tidb3
老生常态,集群之间需要通过ssh,互相通信,那么需要设置免登陆的情况。
步骤如下:
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys`
chmod 0600 ~/.ssh/authorized_keys
ssh-copy-id root@tidb2
ssh-copy-id root@tidb3
ssh tidb2
ssh tidb3
ssh tidb1
在每条机器上,都需要进行操作,实现免登陆,如果存在免登陆失败
目录权限的问题,解决。
sudo chmod 700 ~
sudo chmod 700 ~/.ssh
sudo chmod 600 ~/.ssh/authorized_keys
hadoop HA版本我们需要使用zookeeper来实现,所以需要准备的软件就有这样三个了 hadoop ,zookeeper,jdk1.8版本。
1. 创建三个软件的存储位置
mkdir zookeeper
mkdir hadoop
mkdir java
2. 下载软件
移动到相应的目录下 下载软件
wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-3.1.1/hadoop-3.1.1-src.tar.gz
jdk 去oracle 网站进行下载再上传到我们服务器的目录上。
3. 进行相应的解压
tar -zxvf zookeeper-3.4.13.tar.gz
tar -zxvf hadoop-3.1.1-src.tar.gz
tar -zxvf jdk1.8.tar.gz
以上基础内容都配置好之后,我们就可以开始进行程序的安装了。首先在第一台机器上进行配置好之后在通过rsync 进行同步发送过去
centos 上的安装,每台都需要进行安装
rpm -qa | grep rsync 检查是否安装无哦rsync
yum install -y rsync 使用yum安装rsync
cd /home/bigdata/java/jdk1.8
pwd 找到路径信息
JAVA_HOME=/home/bigdata/java/jdk1.8
JRE_HOME=/home/bigdata/java/jdk1.8/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
tidb2:
rsync -avup /etc/profile root@tidb2:/etc/
tidb3:
rsync -avup /etc/profile root@tidb3:/etc/
三台都执行
source /etc/profile
如果是使用的个人用户需要执行
source ~/.bashrc
cd /home/bigdata/zookeeper/zookeeper-3.4.13
cd /home/bigdata/zookeeper/zookeeper-3.4.13/conf
cp zoo_sample.cfg zoo.cfg
mv zoo_sample.cfg bak_zoo_sample.cfg 备份文件
修改之前 创建dataDir 文件 mkdir -p /home/bigdata/zookeeper/zookeeper-3.4.13/tmp
在原先的基础内容上增加server配置内容与配置dataDir文件内容
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
#修改的dataDir文件路径,配置临时文件路径内容即可,配置的文件路径需要提前创建好
# example sakes.
dataDir=/home/bigdata/zookeeper/zookeeper-3.4.13/tmp
# the port at which the clients will connect
clientPort=2181
# 配置server 几台机器就配置几台即可,注意server的数字,我们在后续需要用到
server.1=tidb1:2888:3888
server.2=tidb2:2888:3888
server.3=tidb3:2888:3888
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purg
上面的基本配置信息内容如下:
clientPort=2181
server.serverid=host:tickpot:electionport 固定写法
server:固定写法
serverid:每个服务器的指定ID(必须处于1-255之间,必须每一台机器不能重复)
host:主机名
tickpot:心跳通信端口
electionport:选举端口
mkdir -p /home/bigdata/zookeeper/zookeeper-3.4.13/tmp
echo 1 > /home/bigdata/zookeeper/zookeeper-3.4.13/tmp/myid
rsync -avup /home/bigdata/zookeeper root@tibd2:/home/bigdata/
rsync -avup /home/bigdata/zookeeper root@tibd3:/home/bigdata/
tidb2:
vim /home/bigdata/zookeeper/zookeeper-3.4.13/tmp/myid 将1改为2
tidb3:
vim /home/bigdata/zookeeper/zookeeper-3.4.13/tmp/myid 将1改为3
JAVA_HOME=/home/bigdata/java/jdk1.8
JRE_HOME=/home/bigdata/java/jdk1.8/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
ZOOKEEPER_HOME=/home/bigdata/zookeeper/zookeeper-3.4.13
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$ZOOKEEPER_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH ZOOKEEPER_HOME
source /etc/profile
小黑板,三台都需要执行
cd /home/bigdata/zookeeper/zookeeper-3.4.13/bin
执行 ./zkServer.sh start
检查是否启动
方式1 :
使用命令jps 检查是否执行成功,jps 不存在的执行下安装 检查是否 有这个配置export PATH=$PATH:/usr/java/jdk1.8/bin
85286 QuorumPeerMain 代表执行成功
方式2:
./zkServer.sh status
[root@tidb1 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/bigdata/zookeeper/zookeeper-3.4.13/bin/../conf/zoo.cfg
Mode: follower 代表是从节点
Mode: Leader 代表的是主节点
安装过程中我们需要一些目录文件进行存储我们的数据,日志文件,数据存储文件都是保存在不同的目录中,需要提前准备好
每台机器上三个硬盘,需要三个目录进行创建
mkdir -p /media/data1/hdfs/data
mkdir -p /media/data2/hdfs/data
mkdir -p /media/data3/hdfs/data
mkdir -p /media/data1/hdfs/hdfsjournal
mkdir -p /media/data1/hdfs/name
编辑 hadoop中的hadoop-env.sh文件
vim /home/bigdata/hadoop/hadoop/etc/hadoop/hadoop-env.sh
配置 jdk环境 ,在这里还可以配置jvm内存大小等内容
export JAVA_HOME=/home/bigdata/java/jdk1.8
#export HADOOP_NAMENODE_OPTS=" -Xms1024m -Xmx1024m -XX:+UseParallelGC"
#export HADOOP_DATANODE_OPTS=" -Xms512m -Xmx512m"
#export HADOOP_LOG_DIR=/opt/data/logs/hadoop 配置日志文件
vim /home/bigdata/hadoop/hadoop/etc/hadoop/core-site.xml
fs.defaultFS
hdfs://cluster
hadoop.tmp.dir
/media/data1/hdfstmp
ha.zookeeper.quorum
tidb1:2181,tidb2:2181,tidb3:2181
vim /home/bigdata/hadoop/hadoop/etc/hadoop/hdfs-site.xml
dfs.nameservices
cluster
dfs.permissions.enabled
false
dfs.ha.namenodes.cluster
nn1,nn2
dfs.namenorsync -avup hadoop-3.1.1 root@tidb2:/home/bigdata/hadoop/de.rpc-address.cluster.nn1
tidb1:9000
dfs.namenode.rpc-address.cluster.nn2
tidb2:9000
dfs.namenode.http-address.cluster.nn1
tidb1:50070
dfs.namenode.http-address.cluster.nn2
tidb2:50070
dfs.client.failover.proxy.provider.cluster
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.ha.fencing.methods
sshfence
hdfs-site.xml
dfs.ha.fencing.ssh.private-key-files
/root/.ssh/id_rsa
dfs.journalnode.edits.dir
/media/data1/hdfs/hdfsjournal
dfs.ha.automatic-failover.enabled
true
dfs.namenode.name.dir
/media/data1/hdfs/name
dfs.namenode.name.dir
/media/data1/hdfs/name
dfs.datanode.data.dir
/media/data1/hdfs/data,
/media/data2/hdfs/data,
/media/data3/hdfs/data
dfs.replication
3
dfs.webhdfs.enabled
true
dfs.journalnode.http-address
0.0.0.0:8480
dfs.journalnode.rpc-address
0.0.0.0:8485
ha.zookeeper.quorum
tidb1:2181,tidb2:2181,tidb3:2181
vim /home/bigdata/hadoop/hadoop/etc/hadoop/mapred-site.xml
mapreduce.framework.name
yarn
mapreduce.jobhistory.address
tidb1:10020
mapreduce.jobhistory.webapp.address
tidb1:19888 rsync -avup hadoop-3.1.1 root@tidb2:/home/bigdata/hadoop/
vim /home/bigdata/hadoop/hadoop/etc/hadoop/yarn-site.xm
yarn.resourcemanager.ha.id
rm1
yarn.nodemanager.aux-services
mapreduce_shuffle rsync -avup hadoop-3.1.1 root@tidb2:/home/bigdata/hadoop/
yarn.resourcemanager.ha.enabled
true
yarn.resourcemanager.cluster-id
rmcluster
yarn.resourcemanager.ha.rm-ids
rm1,rm2
yarn.resourcemanager.hostname.rm1
tidb1
yarn.resourcemanager.hostname.rm2
tidb2
rsync -avup hadoop-3.1.1 root@tidb2:/home/bigdata/hadoop/
yarn.resourcemanager.zk-address
tidb1:2181,tidb2:2181,tidb3:2181
yarn.resourcemanager.recovery.enabled
true
yarn.resourcemanager.store.class
org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore
/home/bigdata/hadoop/hadoop/etc/hadoop/workers
#将数据节点加入到workers里面,如果namenode与datanode 节点是分开的,在这里 namenode的节点就不加入到这里。
#没有分开那么就需要加入
tidb1
tidb2
tidb3
vim /home/bigdata/hadoop/hadoop/sbin/start-dfs.sh vim /home/bigdata/hadoop/hadoop/sbin/stop-dfs.sh
3.0版本以后需要增加以下内容
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
HDFS_JOURNALNODE_USER=root
HDFS_ZKFC_USER=root
vim /home/bigdata/hadoop/hadoop/sbin/start-yarn.sh vim /home/bigdata/hadoop/hadoop/sbin/stop-yarn.sh
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
rsync -avup hadoop-3.1.1 root@tidb2:/home/bigdata/hadoop/
rsync -avup hadoop-3.1.1 root@tidb3:/home/bigdata/hadoop/
同步完之后 如果配置的namenode的编号需要注意以下内容:
修改namenode上的id 编号,datanode 上的编号进行删除,
上面的所有文件准备好之后,我们开始进行启动了。
Zookeeper->JournalNode->格式化NameNode->创建命名空间zkfs->NameNode->Datanode->ResourceManager->NodeManager
每台进入到安装的zookeeper目录下
./zkServer.sh start
进入到hadoop的安装目录下 然后进到sbin 目录下
./hadoop-daemon.sh start journalnode 启动journalnode
hadoop namenode -format
同步的内容:配置hdfs-site.xml文件路径下的内容
dfs.namenode.name.dir
/media/data1/hdfs/name
进行同步
rsync -avup current root@tidb2:/media/data1/hdfs/name/
rsync -avup current root@tidb3:/media/data1/hdfs/name/
小黑板:只能在namenode上进行格式化namdenode1
./hdfs zkfs -formatZK
./hadoop-daemon.sh stop journalnode
hadoop 目录下的sbin目录执行
./start-all.sh 全部启动。
[root@tidb1 bin]# ./hdfs haadmin -getServiceState nn1
standby
[root@tidb1 bin]# ./hdfs haadmin -getServiceState nn2
active
http://192.168.108.66:50070 # 注意这个端口是自定义的,不是默认端口
http://192.168.108.67:50070
```大数据基础Hadoop 3.1.1 的高可用HA安装~踩坑记录大数据基础Hadoop 3.1.1 的高可用HA安装~踩坑记录

