系统环境
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_rsa
和 id_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 -ivh 包名
-i (install 安装软件包 )
-v (view 可视化)
-h ( hour 方便自己记忆 显示安装进度)
找到安装包位置执行rpm
命令进行安装
rpm -ivh /opt/jdk-8u271-linux-x64.rpm
压缩包安装
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
全局变量、局部变量、环境变量解释
以下配置为全局变量,通过 vi
对 profile
文件进行配置
vi /etc/profile
打开文件后在文件末尾键入Java
变量信息,JAVA_HOME
为Java
安装位置
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
命令将 Java
和 profile
文件同步至其他节点
同步过去的 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
命令将 Zookeeper
和 profile
文件同步至其他节点
同步过去的 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.sh
和 yarn-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-services
为 mapreduce_shuffle
注意:官方DOCS 搭建中发现的问题
问题解决在通过官方配置配置时发现文中提供的 hadoop.zk.address
在2.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
评论 (0)