2024年最新Hadoop分布式高可用HA集群搭建笔记(含Hive之构建),华为java面试难度

最后

按照上面的过程,4个月的时间刚刚好。当然Java的体系是很庞大的,还有很多更高级的技能需要掌握,但不要着急,这些完全可以放到以后工作中边用别学。

学习编程就是一个由混沌到有序的过程,所以你在学习过程中,如果一时碰到理解不了的知识点,大可不必沮丧,更不要气馁,这都是正常的不能再正常的事情了,不过是“人同此心,心同此理”的暂时而已。

道路是曲折的,前途是光明的!”

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

deploy.conf

masternode,all,namenode,zookeeper,resourcemanager,

slavenode1,all,slave,namenode,zookeeper,resourcemanager,

slavenode2,all,slave,datanode,zookeeper,

deploy.sh

#!/bin/bash

#set -x

if [ $# -lt 3 ]

then

echo “Usage: ./deply.sh srcFile(or Dir) descFile(or Dir) MachineTag”

echo “Usage: ./deply.sh srcFile(or Dir) descFile(or Dir) MachineTag confFile”

exit

fi

src=$1

dest=$2

tag=$3

if [ ‘a’$4’a’ == ‘aa’ ]

then

confFile=/home/hadoop/tools/deploy.conf

else

confFile=$4

fi

if [ -f $confFile ]

then

if [ -f $src ]

then

for server in cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'

do

scp $src s e r v e r " : " server":" server":"{dest}

done

elif [ -d $src ]

then

for server in cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'

do

scp -r $src s e r v e r " : " server":" server":"{dest}

done

else

echo “Error: No source file exist”

fi

else

echo “Error: Please assign config file or run deploy.sh command with deploy.conf in same directory”

fi

runRemoteCmd.sh

#set -x

if [ $# -lt 2 ]

then

echo “Usage: ./runRemoteCmd.sh Command MachineTag”

echo “Usage: ./runRemoteCmd.sh Command MachineTag confFile”

exit

fi

cmd=$1

tag=$2

if [ ‘a’$3’a’ == ‘aa’ ]

then

confFile=/home/hadoop/tools/deploy.conf

else

confFile=$3

fi

if [ -f $confFile ]

then

for server in cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'

do

echo “$server********”

ssh $server “source /etc/profile; $cmd”

done

else

echo “Error: Please assign config file or run deploy.sh command with deploy.conf in same directory”

fi

新建文件夹将其存入,等下会用到,作用等下讲解。

这一步在masternode进行即可。后续所有文件从masternode进行分发。

1.2.6 JDK准备

解压JDK并配置环境变量

tar -zxvf jdk<-version> -C [目标路径]

vim /etc/profile

在这里插入图片描述

source /etc/profile

这一步要在所有节点进行。

1.3 安装Zookeeper


先解压

方式见1.2.6

1.3.1 修改配置文件

进入解压目录下的conf

在这里插入图片描述

zoo.cfg本来是没有的,将zoo_sample.cfg拷贝一份并命名为zoo.cfg。编辑

在这里插入图片描述

以上是该文件需要的全部内容。记得一定要编辑第一二行是zookeeper的日志和数据目录,可以自定义,但一定要自己建立相应的目录并且将其所有者修改为hadoop用户,命令如下

chown hadoop:hadoop -R [目录]

最后三行是节点的myid及主机名及通信端口。

其他参数关系到Hive的正常启动,如果只装hadoop,可以不用配置。

1.3.2 分发

scp -r [zookerper目录] hadoop@slavenode1:[相同路径]

一定要分发到和master相同的路径,这样便于统一调度。

1.3.3 配置环境变量

在这里插入图片描述

加入这些并使环境变量生效,环境变量如何生效

1.3.4 配置ID

三节点同时进行,在数据目录下新建名为myid的文件

在masternode下的该文件中写入"1"

slavenode1为“2”

slavenode2为“3”

在这里插入图片描述

如图,只

1.3.4 启动并查看状态

在masternode上启动三节点的zookeeper服务

这时候需要用到runRemoteCmd.sh文件了,记得先给它一个执行权限

chmod 777 runRemoteCmd.sh

执行

runRemoteCmd.sh “/home/hadoop/app/zookeeper/bin/zkServer.sh start” zookeeper

在这里插入图片描述

三节点的服务已全部开启,但它不会报错,所以我们要自己验证下服务的状态

runRemoteCmd.sh “/home/hadoop/app/zookeeper/bin/zkServer.sh status” zookeeper

在这里插入图片描述

显示masternode、slavenode2为跟随者,slavenode1为领导者。代表成功,领导者只有一个,不一定是slavenode1,它是被选举出来的。所以如果不一样不代表失败。如果失败了,则不会显示mode。

1.3.5 什么是JPS

jps是JDK 1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简单察看当前java进程的一些简单情况。我们使用一下

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

我们发现每个节点上都出先了JPS进程和QuorumPeerMain。

JPS是这条命令本身拉起的进程,QuorumPeerMain则是zookeeper拉起的,那么QuorumPeerMain是什么呢?

在这里插入图片描述

根据官方文档来看,是个入口类。用来加载myid

二、Hadoop三节点搭建

============================================================================

2.1 环境准备


还是需要JDK,这个在1.2.6中已经完成。

2.2 安装Hadoop


2.2.1 修改配置文件

首先还是在主机上进行,首先进入到安装目录下的etc/hadoop目录下去。编辑hadoop-env.sh文件

在这里插入图片描述

JAVA_HOME参数本来不这样,你改成JDK目录即可。等下分发的时候如果不同的机器JDK目录不一致,则自己还是要做相应

然后要编辑相同目录下的core.site.xml文件

在这里插入图片描述

用这一段替换原有的configuration即可。除了hadoop.tmp.dir需要自定义其他可以不用管。这个是hadoop临时目录,上传到hdfs的文件需要在这里暂存,配置完后还得手动建这么个目录然后更改拥有者为hadoop,方式见1.3.1

然后修改hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

dfs.replication

3

dfs.permissions

false

dfs.permissions.enabled

false

dfs.nameservices

cluster1

dfs.ha.namenodes.cluster1

masternode,slavenode1

dfs.namenode.rpc-address.cluster1.masternode

masternode:9000

dfs.namenode.http-address.cluster1.masternode

masternode:50070

dfs.namenode.rpc-address.cluster1.slavenode1

slavenode1:9000

dfs.namenode.http-address.cluster1.slavenode1

slavenode1:50070

dfs.ha.automatic-failover.enabled

true

dfs.namenode.shared.edits.dir

qjournal://masternode:8485;slavenode1:8485;slavenode2:8485/cluster1

dfs.client.failover.proxy.provider.cluster1

org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider

dfs.journalnode.edits.dir

/home/hadoop/data/journaldata/jn

dfs.ha.fencing.methods

shell(/bin/true)

dfs.ha.fencing.ssh.private-key-files

/home/hadoop/.ssh/id_rsa

dfs.ha.fencing.ssh.connect-timeout

10000

dfs.namenode.handler.count

100

将这段覆盖进去即可

编辑slaves文件

在这里插入图片描述

把主机名写入即可。

编辑mapred-site.xml

<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

mapreduce.framework.name

yarn

将这段覆盖进去即可,这表示等下要调用yarn框架。这个配置限于hadoop2.x及以上版本,因为1.x是没有yarn框架的。yarn的作用在于进行mapreduce运行时的资源调度。而1.x的资源调度是由mapreduce本身来进行的。

编辑yarn-site.xml文件

<?xml version="1.0"?>

yarn.resourcemanager.connect.retry-interval.ms

2000

yarn.resourcemanager.ha.enabled

true

yarn.resourcemanager.ha.automatic-failover.enabled

true

yarn.resourcemanager.ha.automatic-failover.embedded

true

yarn.resourcemanager.cluster-id

yarn-rm-cluster

yarn.resourcemanager.ha.rm-ids

rm1,rm2

yarn.resourcemanager.hostname.rm1

masternode

yarn.resourcemanager.hostname.rm2

slavenode1

yarn.resourcemanager.recovery.enabled

true

yarn.resourcemanager.zk.state-store.address

masternode:2181,slavenode1:2181,slavenode2:2181

yarn.resourcemanager.zk-address

masternode:2181,slavenode1:2181,slavenode2:2181

yarn.resourcemanager.address.rm1

masternode:8032

yarn.resourcemanager.scheduler.address.rm1

masternode:8034

yarn.resourcemanager.webapp.address.rm1

masternode:8088

yarn.resourcemanager.address.rm2

slavenode1:8032

yarn.resourcemanager.scheduler.address.rm2

slavenode1:8034

yarn.resourcemanager.webapp.address.rm2

slavenode1:8088

yarn.nodemanager.aux-services

mapreduce_shuffle

yarn.nodemanager.aux-services.mapreduce_shuffle.class

org.apache.hadoop.mapred.ShuffleHandler

将这段覆盖进去即可。这是相关资源调度信息。

2.2.2 分发

见1.3.2的方式

2.2.3 启动journalnode

runRemoteCmd.sh “/home/hadoop/app/hadoop/sbin/hadoop-daemon.sh start journalnode” all

在这里插入图片描述

用于namenade之间的数据共享,它从属于zookeeper。所有namenode可以不是只有一个,如果你配置的只有一个,那么不用管这个,如果有,需要做数据共享。我这版是配置了两个的。

2.2.4 格式化

这时候需要格式化namenode了,什么是namenode?

Namenode是一个中心服务器,负责管理文件系统的名字空间(namespace)以及客户端对文件的访问。

在主节点上

bin/hdfs namenode -format #namenode 格式化

bin/hdfs zkfc -formatZK #格式化高可用

bin/hdfs namenode #启动namenode

接下来要做一个备节点

在备节点上(slavenode1)

bin/hdfs namenode -bootstrapStandby

2.2.5 启动集群

最近我根据上述的技术体系图搜集了几十套腾讯、头条、阿里、美团等公司21年的面试题,把技术点整理成了视频(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

daemon.sh start journalnode" all

在这里插入图片描述

用于namenade之间的数据共享,它从属于zookeeper。所有namenode可以不是只有一个,如果你配置的只有一个,那么不用管这个,如果有,需要做数据共享。我这版是配置了两个的。

2.2.4 格式化

这时候需要格式化namenode了,什么是namenode?

Namenode是一个中心服务器,负责管理文件系统的名字空间(namespace)以及客户端对文件的访问。

在主节点上

bin/hdfs namenode -format #namenode 格式化

bin/hdfs zkfc -formatZK #格式化高可用

bin/hdfs namenode #启动namenode

接下来要做一个备节点

在备节点上(slavenode1)

bin/hdfs namenode -bootstrapStandby

2.2.5 启动集群

[外链图片转存中…(img-mY81dUkk-1715137177316)]

最近我根据上述的技术体系图搜集了几十套腾讯、头条、阿里、美团等公司21年的面试题,把技术点整理成了视频(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分

[外链图片转存中…(img-2gzebc64-1715137177316)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值