Hadoop HA高可用搭建

Hadoop HA高可用搭建

原理说明

这个步骤不用做,目前大数据虚拟机已经配置好了!

sh 复制代码
echo 'DNS1=8.8.8.8' >> /etc/sysconfig/network-scripts/ifcfg-ens33 
systemctl restart network

ping www.baidu.com

安装软件

node1/node2/node3:

sh 复制代码
yum install psmisc -y  # 增加kill命令 => kill -9 进程id,可以杀死所有相关进程 => 还可以使用killall命令

备份hadoop安装信息

node1/node2/node3:

sh 复制代码
cd
stop-all.sh
tar -cvf hadoop.tar /export/server/hadoop-3.3.0

-cvf :打包(没有压缩),添加了-z压缩
-c:打包
-vf:显示执行进度

删除原有数据文件(搭建服务时执行)

node1/node2/node3:

sh 复制代码
rm -rf /export/data/hadoop-3.3.0

修改配置文件(重点)

以下配置只需要在node1上完成,完成后拷贝到node2/node3:

cd /export/server/hadoop-3.3.0/etc/hadoop

sh 复制代码
# 在文件最后添加下面两行
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root
  • 修改core-site.xml
xml 复制代码
<configuration>
	<!-- HA集群名称,该值要和hdfs-site.xml中的配置保持一致 -->
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://cluster1</value>
	</property>

	<!-- hadoop本地磁盘存放数据的公共目录 -->
	<property>
		<name>hadoop.tmp.dir</name>
		<value>/export/data/ha-hadoop</value>
	</property>

	<!-- ZooKeeper集群的地址和端口-->
	<property>
		<name>ha.zookeeper.quorum</name>
		<value>node1:2181,node2:2181,node3:2181</value>
	</property>
</configuration>

注意:在一个XML文件中,只能有一个

  • 修改hdfs-site.xml
xml 复制代码
<configuration>
	<!--指定hdfs的nameservice为cluster1,需要和core-site.xml中的保持一致 -->
	<property>
		<name>dfs.nameservices</name>
		<value>cluster1</value>
	</property>
	
	<!-- cluster1下面有两个NameNode,分别是nn1,nn2 -->
	<property>
		<name>dfs.ha.namenodes.cluster1</name>
		<value>nn1,nn2</value>
	</property>

	<!-- nn1的RPC通信地址 -->
	<property>
		<name>dfs.namenode.rpc-address.cluster1.nn1</name>
		<value>node1:8020</value>
	</property>

	<!-- nn1的http通信地址 -->
	<property>
		<name>dfs.namenode.http-address.cluster1.nn1</name>
		<value>node1:9870</value>
	</property>

	<!-- nn2的RPC通信地址 -->
	<property>
		<name>dfs.namenode.rpc-address.cluster1.nn2</name>
		<value>node2:8020</value>
	</property>
	
	<!-- nn2的http通信地址 -->
	<property>
		<name>dfs.namenode.http-address.cluster1.nn2</name>
		<value>node2:9870</value>
	</property>

	<!-- 指定NameNode的edits元数据在JournalNode上的存放位置 -->
	<property>
		<name>dfs.namenode.shared.edits.dir</name>
		<value>qjournal://node1:8485;node2:8485;node3:8485/cluster1</value>
	</property>
	
	<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
	<property>
		<name>dfs.journalnode.edits.dir</name>
		<value>/export/data/journaldata</value>
	</property>

	<!-- 开启NameNode故障自动切换 -->
	<property>
		<name>dfs.ha.automatic-failover.enabled</name>
		<value>true</value>
	</property>

	<!-- 指定该集群出故障时,哪个实现类负责执行故障切换 -->
	<property>
		<name>dfs.client.failover.proxy.provider.cluster1</name>
		<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
	</property>

	<!-- 配置隔离机制方法-->
	<property>
		<name>dfs.ha.fencing.methods</name>
		<value>sshfence</value>
	</property>
	
	<!-- 使用sshfence隔离机制时需要ssh免登陆 -->
	<property>
		<name>dfs.ha.fencing.ssh.private-key-files</name>
		<value>/root/.ssh/id_rsa</value>
	</property>
	
	<!-- 配置sshfence隔离机制超时时间 -->
	<property>
		<name>dfs.ha.fencing.ssh.connect-timeout</name>
		<value>30000</value>
	</property>
</configuration>
  • 修改yarn-site.xml
xml 复制代码
<configuration>
    <!-- 开启RM高可用 -->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    <!-- 指定RM的cluster id -->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>yrc</value>
    </property>
    <!-- 指定RM的名字 -->
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
    <!-- 分别指定RM的地址 -->
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>node1</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>node2</value>
    </property>
    <!-- 指定zk集群地址 -->
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>node1:2181,node2:2181,node3:2181</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

注意: 将hadoop配置信息拷贝到node2和node3

注意: 将hadoop配置信息拷贝到node2和node3

注意: 将hadoop配置信息拷贝到node2和node3

powershell 复制代码
cd /export/server/hadoop-3.3.0/etc
scp -r hadoop node2:$PWD
scp -r hadoop node3:$PWD

启动(注意顺序以及启动机器)

  • 启动zk

    zkServer.sh start(配置了环境变量,直接启动,没有配置则进入Zookeeper的bin目录,手工启动)

    node1/node2/node3:

    powershell 复制代码
    cd /export/server/zookeeper
    bin/zkServer.sh start
  • 启动journalnode(node1/node2/node3)

    powershell 复制代码
    hdfs --daemon start journalnode

    注意:journalnode启动完毕后,一定要等待8485端口被java进程所占用然后在执行下方操作!!!

    netstat -naltp |grep 8485

  • 初始化namenode 注意:node1上执行

    powershell 复制代码
    hdfs namenode -format
    • 将数据文件拷贝到node2相同目录(node2上也有namenode节点)
    powershell 复制代码
    cd /export/data
    scp -r ha-hadoop node2:$PWD
  • 初始化zkfc 注意在node1上执行

    powershell 复制代码
    hdfs zkfc -formatZK
  • 启动服务

    powershell 复制代码
    hdfs --daemon stop journalnode     =>   node1/node2/node3
    start-all.sh   =>  node1

常见问题

① 如果node2中namenode角色没有启动

答:手工启动 => hdfs --daemon start namenode

注意:如果手工启动有异常,一定要进入logs目录,查看错误原因

② Web界面无法上传文件

答:修改权限即可# hadoop fs -chmod -R 777 /

③ node1:9870或者node2:9870某台机器无法阅读文件列表

答:不是错误,是因为当前你可能处于了standby备机,切换到另一个节点即可。因为对外提供服务器时,只有一个namenode处于工作状态。

若有错误与不足请指出,关注DPT一起进步吧!!!

相关推荐
TM1Club28 分钟前
AI驱动的预测:新的竞争优势
大数据·人工智能·经验分享·金融·数据分析·自动化
zhang1338308907532 分钟前
CG-09H 超声波风速风向传感器 加热型 ABS材质 重量轻 没有机械部件
大数据·运维·网络·人工智能·自动化
电商API_180079052472 小时前
第三方淘宝商品详情 API 全维度调用指南:从技术对接到生产落地
java·大数据·前端·数据库·人工智能·网络爬虫
龙山云仓2 小时前
No140:AI世间故事-对话康德——先验哲学与AI理性:范畴、道德律与自主性
大数据·人工智能·深度学习·机器学习·全文检索·lucene
躺柒3 小时前
读数字时代的网络风险管理:策略、计划与执行04风险指引体系
大数据·网络·信息安全·数字化·网络管理·网络风险管理
独自归家的兔5 小时前
从 “局部凑活“ 到 “全局最优“:AI 规划能力的技术突破与产业落地实践
大数据·人工智能
海域云-罗鹏5 小时前
国内公司与英国总部数据中心/ERP系统互连,SD-WAN专线实操指南
大数据·数据库·人工智能
策知道6 小时前
依托政府工作报告准备省考【经验贴】
大数据·数据库·人工智能·搜索引擎·政务
Henry-SAP6 小时前
SAP(ERP) 组织结构业务视角解析
大数据·人工智能·sap·erp·sap pp
冷崖7 小时前
消息队列-kafka(一)
分布式·kafka