Hadoop 2.7.7 HA 高可用搭建

2022-12-28T15:33:00

系统环境

  centos 7(Linux version 3.10.0-862.el7.x86_64)
  zookeeper-3.4.5
  jdk-8u161-linux-x64
  hadoop-2.6.0

前置配置

hadoop文档-单节点集群 | hadoop文档-集群设置 | hadoop文档-HDFS HA QJM | hadoop文档-HDFS HA NFS
Hadoop 高可用搭建视频教程 | 安装问题

本文HDFS HA采用的是QJM(QJM&NFS简介)

配置主机名

根据实际配置主机名称

hostnamectl set-hostname 主机名

# 例
hostnamectl set-hostname master
hostnamectl set-hostname slave1
hostnamectl set-hostname slave2

关闭防火墙

集群机器都要关掉防火墙
注意:每个节点都需要配置

systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld

网卡配置

将集群IP地址改为静态以方便管理
注意:每个节点都需要配置

/etc/sysconfig/network-scripts/

默认静态配置  | 网卡命名规则

# 例
vi /etc/sysconfig/network-scripts/ifcfg-en33
#设备类型
TYPE=Ethernet
#地址分配模式
BOOTPROTO=static
#网卡名称
NAME=ens160
#是否启动
ONBOOT=yes
#IP地址
IPADDR=192.168.10.20
#子网掩码
NETMASK=255.255.255.0
#网关地址
GATEWAY=192.168.10.1
#DNS地址
DNS1=192.168.10.1

集群HOSTS配置

在集群hosts文件配置每个子节点的IP和主机名
每个节点都需要配置

# 结构
IP 主机名

# 例
192.168.37.100 master
192.168.37.101 slave1
192.168.37.102 slave2

SSH免密通讯

每个节点都需要配置
通过su命令切换用户

su - hadoop

通过 ssh-keygen 命令生成 RSA 秘钥和公钥

ssh-keygen -t rsa

键入命令后回车即可

RSA 生成好后 .ssh/ 目录下会生成 id_rsaid_rsa.pub 两个文件,可通过命令 ssh-copy-id 将公钥发送给其他节点

ssh-copy-id -i .ssh/id_rsa.pub 用户名@主机

# 例
ssh-copy-id -i .ssh/id_rsa.pub hadoop@slave1

或者使用以下命令来一次发给多个主机

for i in 主机名;do ssh-copy-id -i .ssh/id_rsa.pub hadoop@$i;done

# 例
for i in master slave1 slave2;do ssh-copy-id -i .ssh/id_rsa.pub hadoop@$i;done

传输过程会  Are you sure you want to continue connecting(yes/no)? 填入yes后回车,输入节点密码即可

给每台主机配置完成后执行 ssh 命令来检验是否配置成功

ssh 用户名@主机名

# 例
ssh hadoop@slave1

或者使用以下命令来一次发给多个主机

for i in 主机名 ;do ssh hadoop@$i 'ls -al';done  

# 例
for i in node1.hadoop.learn node2.hadoop.learn node3.hadoop.learn ;do ssh hadoop@$i 'ls -al';done

JDK安装

rpm 包安装

rpm命令解释

rpm -ivh 包名
 -i (install   安装软件包 ) 
 -v (view  可视化)
 -h ( hour 方便自己记忆 显示安装进度)

找到安装包位置执行rpm命令进行安装

rpm -ivh /opt/jdk-8u271-linux-x64.rpm

压缩包安装

tar命令解释

tar -zxvf 压缩包位置 -C 解压位置

找到安装包位置执行 tar 命令进行解压安装

tar -zxvf /opt/jdk-8u161-linux-x64.tar.gz -C /opt/software/

解压完成后通过 mv 命令给文件夹重命名

mv 源文件/文件夹 目的文件/文件夹
# 例
mv /opt/software/jdk1.8.0_161 /opt/software/java

JDK环境配置

安装完成后 配置 Java系统变量,根据实际情况配置

# 全局变量配置
/etc/profile
# 局部变量配置
~/.bashrc

全局变量、局部变量、环境变量解释
以下配置为全局变量,通过 viprofile 文件进行配置

vi /etc/profile

打开文件后在文件末尾键入Java变量信息,JAVA_HOMEJava安装位置

export JAVA_HOME=/usr/java/latest
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin

配置完成后 ESC :wq 保存退出,每次配置完成后需要执行 source 命令让配置内容生效

source /etc/profile

执行完成后在命令行键入 java -version 来检查配置文件是否生效

java -version


配置完成后可通过 scp 命令将 Javaprofile 文件同步至其他节点
同步过去的 profile 文件需要 source 让其生效

# 例
scp /etc/profile root@slave1:/etc/profile
scp /etc/profile root@slave2:/etc/profile
scp -r /opt/java root@slave1:/opt/
scp -r /opt/java root@slave2:/opt/

Zookeeper 安装

zookeeper解压安装

通过 tar 命令解压 Zookeeper
通过 mv 命令修改 Zookeeper 文件名

tar -zxvf /opt/apache-zookeeper-3.5.9-bin.tar.gz -C /opt

mv /opt/apache-zookeeper-3.5.9-bin /opt/zookeeper

配置目录权限

执行 chown 命令 给 zookeeper 分配用户权限 | chown命令详解

chown -R hadoop:hadoop /opt/zookeeper/

切换到用户组创建logs文件夹

su - hadoop
mkdir -p /opt/zookeeper/data/logs

编辑配置文件

使用 mv 命令将zoo_sample.cfg 改为 zoo.cfg

mv /opt/zookeeper/conf/zoo_sample.cfg /opt/zookeeper/conf/zoo.cfg

配置zoo.cfg文件

vi /opt/zookeeper/conf/zoo.cfg

配置文件中的一下内容即可

dataDir=/opt/zookeeper/data
dataLogDir=/opt/zookeeper/data/logs

#server.名称=主机名:端口:端口
#3888:选举leader使用
#2888:集群内机器通讯使用(Leader监听此端口)

server.1=master:2888:3888 
server.2=slave1:2888:3888 
server.3=slave2:2888:3888

配置完成保存后进入 /安装目录/zookeeper/data/ 下创建一个 myid 的文件

cd /opt/zookeeper/data/
touch myid
vi myid

或者

echo "编号" > 目录

# 例
echo "1" > /opt/zookeeper/data/myid

配置系统环境

配置 profile 文件,在其文件后追加zookeeper配置信息

#ZOOKEEPER
export ZOOKEEPER_HOME=/opt/zookeeper/
export PATH=$PATH:$ZOOKEEPER_HOME/bin

配置完成后执行source生效配置文件

文件下发

可通过 scp 命令将 Zookeeperprofile 文件同步至其他节点
同步过去的 profile 文件需要 source 让其生效

# 例
scp /etc/profile root@slave1:/etc/profile
scp /etc/profile root@slave2:/etc/profile
scp -r /opt/zookeeper root@slave1:/opt/
scp -r /opt/zookeeper root@slave2:/opt/

传输完成后需要到子节点配置zookeeper文件权限,防止运行时出现权限不够导致无法启动
每个节点都需要配置

chown -R hadoop:hadoop /etc/zookeeper

权限设置完成后需要修改每个节点的myid文件 要和 zoo.cfg 文件中的主机一致
每个节点都需要配置

vi /opt/zookeeper/data/myid

开启zookeeper集群

每个节点配置完成后可启动zookeeper服务
zookeeper没有集群开启,需每个节点都需要执行此命令

zkServer.sh start

查看zookeeper 服务状态

zkServer.sh status

zookeeper 需要两个节点及其以上这里才会显示连接,执行完start命令后可以通过jps确定zookeeper服务是否正常启动,如没有启动可在执行命令目录下找到zookeeper.out日志输出文件,来检查未启动原因。

Hadoop 安装

Hadoop 解压安装

通过 tar 命令解压 Hadoop
通过 mv 命令修改 Hadoop 文件名

tar -zxvf /opt/hadoop-2.10.1.tar.gz -C /opt/

mv /opt/hadoop-2.10.1 /opt/hadoop

执行 chown 命令 给 Hadoop 分配用户权限

chown -R hadoop:hadoop /opt/hadoop

配置系统环境

配置 profile 文件,在其文件后追加Hadoop配置信息

#HADOOP
export HADOOP_HOME=/opt/hadoop/
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

配置完成后执行source生效配置文件
修改 Hadoop 配置文件
Hadoop 配置文件目录

Hadoop安装目录/hadoop/etc/hadoop/

需要配置文件名
在 Hadoop3.0 以上的版本,使用的是 workers 配置文件,而在 Hadoop3.0 以下,使用的是 slaves 配置文件

hadoop-env.sh
yarn-env.sh 
core-site.xml 
hdfs-site.xml 
mapred-site.xml
yarn-site.xml
slaves

Hadoop 配置文件设置

配置hadoop-env.sh 和 yarn-env.sh

hadoop-env.shyarn-env.sh 只需要配置JAVA_HOME即可

配置 core-site.xml

core-site.xml 配置信息

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop20ha</value>
    </property>

    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/data/bigdata/data/hadoopdata</value>
    </property>
    <!-- 指定高可用zookeeper集群访问地址-->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>master:2181,slave1:2181,slave2:2181</value>
    </property>
    <property>
        <name>hadoop.proxyuser.bigdata.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.bigdata.groups</name>
        <value>*</value>
    </property>
</configuration>

配置 hdfs-site.xml

hdfs-site.xml 配置信息
官方DOCS / HDFS HA QJM 配置 基础配置项官方已给出

<!--Hadoop HA hdfs-site.xml -->
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
        <name>dfs.nameservices</name>
        <value>hadoop20ha</value>
    </property>
    <property>
        <name>dfs.ha.namenodes.hadoop20ha</name>
        <value>nm1,nm2</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.hadoop20ha.nm1</name>
        <value>slave1:9000</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.hadoop20ha.nm1</name>
        <value>slave1:50070</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.hadoop20ha.nm2</name>
        <value>slave2:9000</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.hadoop20ha.nm2</name>
        <value>slave2:50070</value>
    </property>
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://master:8485;slave1:8485;slave2:8485/hadoop20ha</value>
    </property>
    <property>
        <name>dfs.client.failover.proxy.provider.hadoop20ha</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfigureFailoverProxyProvider</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>
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/opt/data/bigdata/data/journaldata</value>
    </property>
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
</configuration>

配置 mapred-site.xml

新装Hadoop 配置目录下没有mapred-site.xml文件,需要执行 cp 命令复制目录下 mapred-site.xml.template 为 mapred-site.xml

cp /opt/hadoop/etc/hadoop/mapred-site.xml.template /opt/hadoop/etc/hadoop/mapred-site.xml

mapred-site.xml 配置信息
参数 mapreduce.framework.name 默认是local 需要修改
jobhistory 可以不用配置,根据实际需求自行配置

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>master:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>master:19888</value>
    </property>
</configuration>

配置 yarn-site.xml

yarn-site.xml 配置信息
官方DOCS / RM HA 配置 基础配置项官方已给出,在此基础上添加官方 Recovering previous active-RM’s state的配置,文档官方也给出简单例子RM Restart,还需要配置 yarn.nodemanager.aux-servicesmapreduce_shuffle
注意:官方DOCS 搭建中发现的问题
问题解决在通过官方配置配置时发现文中提供的 hadoop.zk.address2.7.7版本中无法使用,日志报错:Embedded automatic failover is enabled, but yarn.resourcemanager.zk-address is not set ,需改为 yarn.resourcemanager.zk-address ,官方文档未对此弃用进行标注(issues

2023-02-02 11:58:03,065 FATAL org.apache.hadoop.yarn.server.resourcemanager.ResourceManager: Error starting ResourceManagerorg.apache.hadoop.yarn.exceptions.YarnRuntimeException: Embedded automatic failover is enabled, but yarn.resourcemanager.zk-address is not set        
        at org.apache.hadoop.yarn.server.resourcemanager.EmbeddedElectorService.serviceInit(EmbeddedElectorService.java:70)        
        at org.apache.hadoop.service.AbstractService.init(AbstractService.java:163)              at org.apache.hadoop.service.CompositeService.serviceInit(CompositeService.java:107)
        at org.apache.hadoop.yarn.server.resourcemanager.AdminService.serviceInit(AdminService.java:142)
        at org.apache.hadoop.service.AbstractService.init(AbstractService.java:163)      
        at org.apache.hadoop.service.CompositeService.serviceInit(CompositeService.java:107)
        at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.serviceInit(ResourceManager.java:267)
        at org.apache.hadoop.service.AbstractService.init(AbstractService.java:163)      
        at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.main(ResourceManager.java:1187)
<property>
  <name>hadoop.zk.address</name>
  <value>master:2181,slave1:2181,slave2:2181</value>
</property>

<!--变更-->
<property>
  <name>yarn.resourcemanager.zk-address</name>
  <value>master:2181,slave1:2181,slave2:2181</value>
</property>
<configuration>
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>yrc20</value>
    </property>
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>slave1</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>slave2</value>
    </property>
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>master:2181,slave1:2181,slave2:2181</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>86400</value>
    </property>
    <property>
        <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.resourcemanager.store.class</name>
        <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
    </property>
    <property>
        <!-- 
        Applicationslave1通过该地址向RM申请资源、释放资源,
        本设置是ResourceManager对Applicationslave1暴露的地址 
        -->
        <name>yarn.resourcemanager.scheduler.address.rm1</name>
        <value>slave1:8030</value>
    </property>
    <property>
        <!-- NodeManager通过该地址交换信息 -->
        <name>yarn.resourcemanager.resource-tracker.address.rm1</name>
        <value>slave1:8031</value>
    </property>
    <property>
        <!-- 客户机通过该地址向RM提交对应应用程序操作 -->
        <name>yarn.resourcemanager.address.rm1</name>
        <value>slave1:8032</value>
    </property>
    <property>
        <!-- 管理员通过该地址向RM发送管理命令 -->
        <name>yarn.resourcemanager.admin.address.rm1</name>
        <value>slave1:8033</value>
    </property>
    <property>
        <!-- RM HTTP访问地址,查看集群信息 -->
        <name>yarn.resourcemanager.webapp.address.rm1</name>
        <value>slave1:8088</value>
    </property>
    <property>
        <!-- 同rm1对应内容 -->
        <name>yarn.resourcemanager.scheduler.address.rm2</name>
        <value>slave2:8030</value>
    </property>
    <property>
        <!-- NodeManager通过该地址交换信息 -->
        <name>yarn.resourcemanager.resource-tracker.address.rm2</name>
        <value>slave2:8031</value>
    </property>
    <property>
        <!-- 客户机通过该地址向RM提交对应应用程序操作 -->
        <name>yarn.resourcemanager.address.rm2</name>
        <value>slave2:8032</value>
    </property>
    <property>
        <!-- 管理员通过该地址向RM发送管理命令 -->
        <name>yarn.resourcemanager.admin.address.rm2</name>
        <value>slave2:8033</value>
    </property>
    <property>
        <!-- RM HTTP访问地址,查看集群信息 -->
        <name>yarn.resourcemanager.webapp.address.rm2</name>
        <value>slave2:8088</value>
    </property>
</configuration>

配置 slaves/workers

slaves 配置信息
在 Hadoop3.0 以上的版本,使用的是 workers 配置文件,而在 Hadoop3.0 以下,使用的是 slaves 配置文件

主机名

#例
master
sleave1
sleave2

环境下发

可通过 scp 命令将 hadoop profile 文件同步至其他节点
:同步过去的 profile 文件需要 source 让其生效

# 例
scp /etc/profile root@slave1:/etc/profile
scp /etc/profile root@slave2:/etc/profile
scp -r /opt/hadoop root@slave1:/opt/
scp -r /opt/hadoop root@slave2:/opt/

传输完成后需要变更一下hadoop目录文件权限

chown -R hadoop:hadoop /etc/hadoop

启动Hadoop

journalnode节点启动

需每个节点都需要执行此命令

hadoop-daemon.sh start journalnode

格式化namenode

注意:此命令需要在配置文件中配置的namenode节点下执行,且此命令只能执行一次,core-site.xml 配置文件中的hadoop.tmp.dir目录下内容namenode节点元数据需要同步,不同步会导致除namenode主节点其他namenode节点启动失败。

在执行zkfc的格式化时需要注意的问题:问题汇总

hdfs namenode -format

hdfs zkfc -formatZK

启动全部服务

start-all.sh

备用 resourcemanager 启动

yarn-daemon.sh start resourcemanager

通过执行jps命令检查每个节点启动服务项是否成功

jps

通过web检查每个节点启动服务项是否成功

http://主机名:8088
http://主机名:50070

关闭hadoop服务

stop-all.sh
当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »