hadoop(高可用)在linux部署以及集群笔记

本文详细介绍如何在三节点集群中搭建Hadoop高可用环境,包括网络配置、SSH免密码登录配置、Zookeeper安装配置、Hadoop核心配置文件调整及各组件启动流程。通过具体步骤与参数设置,确保集群稳定高效运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、配置登录,网络相关

VM虚拟机,克隆后修改ip 

cd /etc/sysconfig/network-scripts

vim ifcfg-ens33

*  大家自己看看自己的vm的编辑->虚拟网络编辑器->观察 NAT模式的地址 
	vi /etc/sysconfig/network-scripts/ifcfg-eth0
		DEVICE=eth0
		#HWADDR=00:0C:29:42:15:C2
		TYPE=Ethernet
		ONBOOT=yes
		NM_CONTROLLED=yes
		BOOTPROTO=static
		IPADDR=192.168.100.3
		NETMASK=255.255.255.0
		GATEWAY=192.168.100.2
		DNS1=223.5.5.5
		DNS2=114.114.114.114

重启

关闭防火墙

yum install iptables-services

查看防护墙状态
service iptables status
关闭
service iptables stop
查看防火墙开机启动状态
chkconfig iptables --list
关闭开机启动
chkconfig iptables off

1.设置主机名

设置主机名
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=node01

2.配置主机名以及解析

vi /etc/hosts


192.168.100.5 node1
192.168.100.6 node2
192.168.100.7 node3

3.关闭 selinux(安全相关与防火墙类似)

vi /etc/selinux/config

SELINUX=disabled

4.时间同步(时间差距大无法备份)

yum install ntp  -y
vi /etc/ntp.conf
server ntp1.aliyun.com
service ntpd start
chkconfig ntpd on

2.配置服务器间ssh免密码登录

高可用模式下,hadoop的故障切换需要通过ssh登录到其他机器,进行主备切换

//生成密钥对
ssh-keygen -t rsa
//连续三次回车,本地生成公钥和私钥,默认存储在~/.ssh目录下


//用ssh-copy-id拷贝公钥到远程机器--注意这里每个电脑全部执行,需要自己登陆自己的
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.100.5
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.100.6
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.100.7


//测试
ssh -p 22 root@192.168.100.5
ssh -p 22 root@192.168.100.6
ssh -p 22 root@192.168.100.7

二、Zookeeper安装

    1. 解压

tar -zxvf zookeeper-3.5.8.tar.gz -C /usr/local/HPEU/

    2.配置

cd /usr/local/HPEU/apache-zookeeper-3.5.8/conf

//这里面只有zoo_sample.cfg文件,需要将这个文件更名为zoo.cfg,并修改其中的一些配置
cp zoo_sample.cfg zoo.cfg


dataDir=/usr/local/HPEU/apache-zookeeper-3.5.8/zookeeper
dataLogDir=/usr/local/HPEU/apache-zookeeper-3.5.8/zookeeper/logs
server.1=node01:2888:3888
server.2=node02:2888:3888
server.3=node03:2888:3888

     3.环境变量

vim /etc/profile
//加入这两个
export ZOOKEEPER_HOME=/usr/local/HPEU/apache-zookeeper-3.5.8
export PATH=$PATH:$ZOOKEEPER_HOME/bin

source /etc/profile

     4.创建myid

vim /usr/local/HPEU/apache-zookeeper-3.5.8/zookeeper

vim myid
1
值与server对应的一值
比如node01就写1

server.1=node01:2888:3888
server.2=node02:2888:3888
server.3=node03:2888:3888

    5.复制到其他2个节点

scp -r /usr/local/HPEU root@node02:/usr/local/HPEU
scp -r /usr/local/HPEU root@node03:/usr/local/HPEU

   6. 启动

zkServer.sh start


查看节点状态
zkServer.sh status

发现
[root@node02 HPEU]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/HPEU/apache-zookeeper-3.5.8/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader


[root@node01 conf]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/HPEU/apache-zookeeper-3.5.8/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower


[root@node03 local]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/HPEU/apache-zookeeper-3.5.8/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower

则成功

三、Hadoop部署相关配置

cd /myfiles/hadoop/hadoop-3.2.1/etc/hadoop/core-site.xml


<configuration>
	<!--指定hdfs连接地址,集群模式(高可用)-->
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://cluster</value>
	</property>
	<!-- 这里的路径默认是NameNode、DataNode、JournalNode等存放数据的公共目录 -->
    <property>
      <name>hadoop.tmp.dir</name>
      <value>/myfiles/hadoop/data</value>
    </property>
	<!-- 指定ZooKeeper集群的地址和端口。注意,数量一定是奇数,且不少于三个节点-->
	<property>
  		<name>ha.zookeeper.quorum</name>
  		<value>node01:2181,node02:2181,node03:2181</value>
	</property>
</configuration>
/myfiles/hadoop/hadoop-3.2.1/etc/hadoop/hdfs-site.xml


<configuration>
	<!--指定HDFS副本的数量,不能超过机器节点数-->
	<property>
		<name>dfs.replication</name>
		<value>3</value>
	</property>
	<!-- 为namenode集群定义一个services name -->
	<property>
 		<name>dfs.nameservices</name>
  		<value>cluster</value>
	</property>
	<!-- nameservice 包含哪些namenode,为各个namenode起名 -->
	<property>
  		<name>dfs.ha.namenodes.cluster</name>
  		<value>nn01,nn02</value>
	</property>
 	<!-- 名为nn01的namenode的rpc地址和端口号,rpc用来和datanode通讯 -->
	<property>
  		<name>dfs.namenode.rpc-address.cluster.nn01</name>
  		<value>node01:8020</value>
	</property>
 	<!--名为nn01的namenode的http地址和端口号,用来和web客户端通讯 -->
	<property>
  		<name>dfs.namenode.http-address.cluster.nn01</name>
  		<value>node01:9870</value>
	</property>
 	<!-- 名为nn02的namenode的rpc地址和端口号,rpc用来和datanode通讯 -->
	<property>
  		<name>dfs.namenode.rpc-address.cluster.nn02</name>
  		<value>node02:8020</value>
	</property>
 	<!--名为nn02的namenode的http地址和端口号,用来和web客户端通讯 -->
	<property>
  		<name>dfs.namenode.http-address.cluster.nn02</name>
  		<value>node02:9870</value>
	</property>
  	<!-- namenode间用于共享编辑日志的journal节点列表 -->
	<property>
  		<name>dfs.namenode.shared.edits.dir</name>
  		<value>qjournal://node01:8485;node02:8485;node03:8485/cluster</value>
	</property>
    <!-- journalnode 上用于存放edits日志的目录 -->
	<property>
  		<name>dfs.journalnode.edits.dir</name>
  		<value>/myfiles/hadoop/journaldata</value>
	</property>
  	<!-- 指定该集群出现故障时,是否自动切换到另一台namenode -->
	<property>
  		<name>dfs.ha.automatic-failover.enabled</name>
  		<value>true</value>
	</property>
	<!-- 配置失败自动切换实现方式 -->
	<property>
    		<name>dfs.client.failover.proxy.provider.cluster</name>
 		<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
	</property>
  	<!-- 一旦需要NameNode切换,使用ssh方式进行操作 -->
	<property>
  		<name>dfs.ha.fencing.methods</name>
  		<value>sshfence(root:22)</value>
	</property>
  	<!-- 如果使用ssh进行故障切换,使用ssh通信时用的密钥存储的位置 -->
	<property>
  		<name>dfs.ha.fencing.ssh.private-key-files</name>
  		<value>/root/.ssh/id_rsa</value>
	</property>
	<!-- connect-timeout超时时间 -->
	<property>
    		<name>dfs.ha.fencing.ssh.connect-timeout</name>
    		<value>30000</value>
	</property>
	<property>
   		<name>dfs.name.dir</name>
   		<value>/myfiles/hadoop/tmp/dfs/name</value>
   	</property>
   	<property>
   		<name>dfs.data.dir</name>
   		<value>/myfiles/hadoop/tmp/dfs/data</value>
   	</property>
</configuration>
/myfiles/hadoop/hadoop-3.2.1/etc/hadoop/yarn-site.xml
<configuration>
	<!-- 启用Resource Manager HA高可用性 -->
	<property>
		<name>yarn.resourcemanager.ha.enabled</name>
		<value>true</value>
	</property>
	<!-- 指定resourcemanager的名字 -->
	<property>
		<name>yarn.resourcemanager.cluster-id</name>
		<value>yrc</value>
	</property>
	<!-- 使用了2个resourcemanager,分别指定Resourcemanager的地址 -->
	<property>
		<name>yarn.resourcemanager.ha.rm-ids</name>
		<value>rm1,rm2</value>
	</property>
	<!-- 指定rm1的地址 -->
	<property>
		<name>yarn.resourcemanager.hostname.rm1</name>
		<value>node01</value>
	</property>
	<!-- 指定rm2的地址  -->
	<property>
		<name>yarn.resourcemanager.hostname.rm2</name>
		<value>node02</value>
	</property>
	<!-- 指定zookeeper集群机器 -->
	<property>
		<name>yarn.resourcemanager.zk-address</name>
		<value>node01:2181,node02:2181,node03:2181</value>
	</property>
	<!-- NodeManager上运行的附属服务,默认是mapreduce_shuffle -->
	<property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
	</property>
</configuration>
/myfiles/hadoop/hadoop-3.2.1/etc/hadoop/mapred-site.xml

//复制
cp mapred-site.xml.template mapred-site.xml

<configuration>
	<!-- 采用yarn作为mapreduce的资源调度框架 -->
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>
</configuration>

修改workers ,hadoop3.0之后就是workers 之前都是slaves

这里设置的是dataNode,后续dataNode就是node02与node03

node02
node03

修改hadoop-env.sh

vim  /myfiles/hadoop/hadoop-3.2.1/etc/hadoop/hadoop-env.sh

export JAVA_HOME=/myfiles/java/jdk1.8.0_191

# 指定hadoop相关的pid存放位置
export HADOOP_PID_DIR=/myfiles/hadoop/pids

修改mapred-env.sh、yarn-env.sh文件


export JAVA_HOME=/myfiles/java/jdk1.8.0_191

修改/hadoop/sbin路径下start-dfs.sh,stop-dfs.sh

在文件顶部增加
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

start-yarn.sh,stop-yarn.sh顶部也需添加以下

YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

复制到其他2个节点

scp -r /myfiles/hadoop/ root@node02:/myfiles/hadoop/
scp -r /myfiles/hadoop/ root@node03:/myfiles/hadoop/

二、启动hadoop

启动首先需要格式化

(1)启动journalnode,三台机器都要这一步操作(仅第一次启动hadoop时,需要这一步操作,之后不再需要手动启动journalnode)

hdfs --daemon start journalnode

netstat -tunlp
查看端口8485,是否真的启动成功

(2) 在node01上执行格式化操作,格式化namenode

在node01执行
hdfs namenode -format

//注意:该步骤需要在能够访问外网的前提下执行,否则会报错
.QuorumJournalManager: Waited 21004 ms (timeout=60000 ms) for a response for format. No responses 

 IPC Server handler 1 on 8485 caught an exception
java.nio.channels.ClosedChannelException

出现如下图,则成功

目前我们准备node01与node02作为nameNode
node02与node03作为dataNode


node01先启动  hadoop-daemon.sh start namenode

node02执行hdfs namenode -bootstrapStandby

node02执行hdfs namenode -bootstrapStandby

在这里插入图片描述

 (3) 格式化zookeeper节点:node01,node02,node03都执行。hdfs zkfc -formatZK 。

如果是集群一般执行一台即可。如果node03报错,也无妨,只需要看 服务启动的是否足够即可,

如图:

  

 (4) 启动HDFS集群 start-dfs.sh

验证

分别访问两个namenode的web页面,可以查看到一个为active一个为standby

查看datanode信息,共两个节点,正确。

 三台机器分别执行jps命令,查看进程是否与规划的一致

访问:

192.168.100.5:9870

关机后 重启

zkServer.sh start

start-all.sh

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值