大数据基础平台实施及运维进阶

news2024/9/20 6:41:06

1、完全分布式部署介绍

完全分部式是真正利用多台Linux主机来进行部署Hadoop,对Linux机器集群进行规划,使得Hadoop各个模块分别部署在不同的多台机器上。

2、nameNode  HA+完全分布式部署

2.1、nameNode切换方法

分别处于Active和Standby中

 hadoop可以创建多个副本到各个datanode中实现高可用,但是如果要防止出现问题必须给namenode做一个备用服务器。

HA的意思是High Availability高可用,指当当前工作中的机器宕机后,会自动处理这个异常,并将工作无缝地转移到其他备用机器上去,以来保证服务的高可用。
HA方式安装部署才是最常见的生产环境上的安装部署方式。Hadoop HA是Hadoop 2.x中新添加的特性,包括NameNode HA和 ResourceManager HA因为DataNode和NodeManager本身就是被设计为高可用的,所以不用对他们进行特殊的高可用处理。

服务器失效之后在故障转移域切换。

 ZooKeeper-based election
如果本地NN是健康的,并且zkfc发现没有其他的NN持有那个独占锁。那么他将试图去获取该锁,一旦成功,那么它就需要执行Failover,然后成为active的NN节点。Failover的过程是:第一步,对之前的NN执行fence(栅栏),如果需要的话。第二步,将本地NN转换到active状本

ZooKeeper集群最好是3台及以上的奇数

作为一个ZK集群的客户端,用来监控NN的状态信息。每个运行NN的节点必须要运行一个zkfc。zkfc提供以下功能:


Health monitoring

zkfc定期对本地的NN发起health-check的命令,如果NN正确返回,那么这个NN被认为是OK的。否则被认为是失效节点。

ZooKeeper session management
当本地NN是健康的时候,zkfc将会在zk中持有一个session。如果本地NN又正好是active的,那么zkfc还有持有一个“ephemeral"的节点作为锁,一旦本地NN失效了,那么这个节点将会被自动删除。

2.2、 NameNode+HA数据共享方法

Namenode主要维护两个文件,一个是fsimage,一个是editlog。
fsimage保存了最新的元数据检查点,包含了整个HDFS文件系统的所有目录和文件的信息。对于文件来说包括了数据块描述信息、修改时间、访问时间等,对于目录来说包括修改时间、访问权限控制信息(目录所属用户,所在组)等
editlog主要是在NameNode已经启动情况下对HDFS进行的各种更新操作进行记录,HDFS客户端执行所有的写操作都会被记录到editlog中。

 nameNode之间的数据共享是通过journalNode(保存的是editlog)

在Active Namenode与StandBy Namenode之间的绿色区域就是journalNode(日志节点),当然数量不一定只有1个,作用相当于NFS共享文件系统,Active Namenode往里写editlog数据,StandBy再从里面读取数据进行同步。日志节点其实是运行在各个dataNode中的。

两个NameNode为了数据同步,会通过一组称作journalNodes的独立进程进行相互通信。当active状态的NameNode的命名空间有任何修改时,会告知大部分的journalNodes进程。stardby状态的NameNode有能力读取jNs中的变更信息,并且一直监控edit log的变化,把变化应用于自己的命名空间。standby可以确保在集群出错时,命名空间状态已经完全同步了。
集群启动时,可以同时启动2个NameNode。这些NameNode只有一个是active的,另一个属于standby状态active状态意味着提供服务,standby状态意味着处于休眠状态,只进行数据同步,时刻准备着提供服务。

3、完全分布式部署规划

 6台服务器的静态ip可以scp复制

 

 不想写255.255.255.255可以换成PREFIX=24

如果需要让虚拟机上网,可以配置firewall

 修改主机名        修改hosts          时间同步ntpdate

配置免密登录

 私钥免密

 

用for循环拷贝ssh免密登录文件到其他主机2-6

3.1、jdk部署

 rsync -av 增量传输,保证数据的一致性

 for循环scp复制本地环境变量上传到hd2-6服务器

source /etc/profile

3.2、Zookeeper部署

3.2.1、zookeeper作用

ZooKeeper 是为分布式应用程序提供高性能协调服务的工具集合,译名为“动物园管理员”分布式应用程序可以基于它实现配置维护、命名服务、分布式同步、组服务等。是Hadoop集群管理的一个必不可少的模块,它主要用来解决分布式应用中经常遇到的数据管理问题,如集群管理、统一命名服务、分布式配置管理、分布式消息队列、分布式锁、分布式协调等在ZooKeeper集群当中,集群中的服务器角色有两种Leader和Learner,Learner角色又分为Observer和Follower

 Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。
当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Follower完成了和leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和Follower具有相同的系统状态

3.2.2、部署软件包

 每台服务器myid不同,需要分别修改,例如server.1对应的myid内容为1,server.2对应的myid内容为2,server.3对应的myid为3。
2888端口:follower连接到leader机器的端口
3888端口 :leader选举端口

还可以直接配置ip,在zoo.cfg文件末尾

 在conf文件中的示例文件中可以看见tickTime滴答时间=2s        初始化限制时间=10次  20s

数据同步请求限制=5次  10秒

tickTime相当于校对时间参数

 echo "1-3" > /opt/data/myid  三台服务器都必须输入myid内容

3.2.3、启动zookeeper

因为安装包是tar.gz的二进制包,所以启动必须在安装位置中的bin目录下。

可以把安装位置配置到环境变量就不用进入安装目录启动了

 source /etc/profile

其他两台服务器直接scp拷贝环境变量过去即可

最后分别启动三台服务器之后查看状态可以看见Mode有两个跟随者和一个leader

3.3、安装hadoop

scp拷贝二进制hadoop安装包到6台服务器,tar xf解压之后mv 到/opt/hadoop

最后配置一下hadoop的环境变量就行

 3.3.1、修改hadoop配置文件

1、hadoop-env.sh
[root@localhost ~]#vim hadoop-env.sh

export JAVA_HOME=/usr/local/jdk

修hadoop-envsh 25行,mapred-env.sh 16行,yarn-env.sh 23行针对hadoop-2.8.5版本

2、core-site.xml
[root@localhost ~]#vim core-site.xml

<!-- 指定hdfs的nameservice为ns1 -->

<property>


<name>fs .defaultFS</name>
<value>hdfs://nsl</value>

</property>
<!-- 指定hadoop临时目录(元数据) -->

<property>


<name>hadoop.tmp.dir</name>
<value>/opt/data/tmp</value>

</property>
<!-- 指定zookeeper地址 -->

<property>
<name>ha.zookeeper.quorum</name>

<value>hd4:2181,hd5:2181,hd6:2181</value>

</property>

3、hdfs-site.xml

[root@localhost ~]#vim hdfs-site.xml
<!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->

<property>
<name>dfs.nameservices</name>
<value>ns1</value>

</property>
<!-- ns1下面有两个NameNode,分别是nn1,nn2 -->

<property>
<name>dfs .ha.namenodes.ns1</name>

<value>nn1,nn2</value>

</property>
<!-- nn1的RPC通信地址,RPC是机器之间的通信方式 -->

<property>
<name>dfs.namenode.rpc-address.ns1.nn1</name>

<vaue>hd1:9000</value>

</property>

<!-- nn1的RPC通信地址 -->
<property>
<name>dfs .namenode.rpc-address,ns1,nn1</name>

<value>hd1:9000</value>

</property>
<!-- nn1的http通信地址,http是人和机器之间的通信方式 -->

<property>
<name>dfs.namenode.http-address.ns1.nn1</name>

<value>hd1:50070</value>

</property>
<!-- nn2的RPC通信地址 -->

<property>
<name>dfs.namenode.rpc-address .ns1.nn2</name>

<value>hd2:9000</value>
</property>
<!-- nn2的http通信地址 -->

<property>
<name>dfs .namenode.http-address.ns1.nn2</name>

<value>hd2:50070</value>

</property>

<!-- 指定NameNode的元数据在JournalNode上的存放位 -->
<property>

<name>dfs .namenodeshared.edits .dir</name><value>qjournal://hd4:8485;hd5:8485;hd6:8485/ns1</value>

</property>

<!-- 指定JournalNode在本地磁盘存放数据的位号-->
<property>

<name>dfs .journalnode.editsdir</name>

<value>/opt/data/journa1</value>

</property>


<!-- 开启NameNode失败自动切换 -->

<property>
<name>dfs.ha.automatic-failover .enabled</name>

<value>true</value>
</property>
<!-- 配号失败自动切换实现方式 -->
<property>
<name>dfs.client.failover .proxy.provider .ns1</name>
<value>

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

</value>
</property>

<!--配置隔离机制 -->
<property>

<name>dfs .ha,fencing.methods</name>

<value>sshfence/value>

</property>
<!-- 使用隔离机制时需要ssh免登陆 -->

<property>
<name>dfs .ha.fencing.ssh.private-key-files</name>

<value>/root/.ssh/id_rsa</value>

</property>

4、配置datanode节点记录文件 slaves

[root@localhost ~]#vim slaves
hd4
hd5
hd6 

5、mapred-site.xml

[root@localhost ~]#cp /opt/hadoop285/etc/hadoop/mapred-site.xml.template /opt/hadoop285/etc/hadoop/mapred-site.xml

[root@localhost ~]#vim mapred-site.xml

<!-- 指定mr框架为yarn方式(mapreduce的资源调度方式) -->
<property>
<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

6、yarn-site.xml

[root@localhost ~]#vim yarn-site.xml

<!-- 指定resourcemanager地址 -->

<property>
<name>yarn.resourcemanager .hostname</name>

<value>hd3</value>

</property>
<!-- 指定nodemanager启动时加载server的方式为洗牌shuffle server -->

<property>
<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

3.3.2、复制修改后的hadoop目录到所有集群节点

 上传本地配置好的配置文件到所有集群 节点之后复制配置文件到hadoop目录替换之前的。

 最后用for循环拷贝整个配置好的目录到其他节点

3.3.3、启动整个集群的步骤

在namenode节点启动zookeeper

[root@localhost ~]#zkServer .sh start

启动journalnode(在namenode上操作,例如hd1)

 必须是daemons才可以同时启动整个集群的journalnode,jps在三个节点上验证

可以通过判断是否生成data文件来确认有没有启动journalnode,hd1不是集群的节点所以没有data

格式化hdfs文件系统(在namenode上操作,例如hd1)

[roothd1 ~]# hdfs namenode -format

 拷贝到hd2之后两个节点的元数据信息完全一致

格式化zk(namenode上操作,例如hd1 ),格式化zookeeper的客户端zkfc,监控namenode的
[root@localhost ~]#hdfs zkfc -formatZK

 启动hdfs(namenode上操作,例如hd1)
[root@localhost ~]#start-dfs.sh       

启动yarn (namenode上操作,例如想让hd2成为resourcemanager,需要在hd2)
[root@localhost ~]#start-yarn.sh

启动yarn之后必须输入三次yes

访问
NameNode1:http://hd1:50070 查看NameNode状态

3.3.4、hadoop集群验证

 创建一个测试的txt文件之后放入input文件夹中调用yarn的jar包中的wordcount方法计算输出结果到output中的00文件中

最后可以看到词频统计的结果

 浏览器访问可以直接在linux服务器上的浏览器

 后台启动浏览器的前提是在本地配置域名解析hosts

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/674639.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

操作系统复习笔记4

1、queueType队列类型 队列中的数据也呈线性排列。虽然与栈有些相似&#xff0c;但队列中添加和删除数据的操作分别是在两端进行的。 线性表有顺序存储和链式存储&#xff0c;队列作为一种特殊的线性表&#xff0c;也同样存在这两种存储方式。 1.1 顺序队列 用数组存储队列…

C语言学习(二十五)---指针练习题(一)

在上一节内容中&#xff0c;我们学习了递归与冒泡排序法的有关内容&#xff0c;今天我们将继续往下学习&#xff0c;主要内容为指针练习题&#xff0c;好了&#xff0c;话不多说&#xff0c;开整&#xff01;&#xff01;&#xff01; 在之前的第18—22的内容中&#xff0c;我…

lnmp框架的应用

目录 应用一 nginx访问状态统计 1.先查看http_stub_status有没有安装 2.进入nginx的配置文件改配置 3.nginx-检查配置 重启服务 最后这个20就是显示的状态统计 应用二 给网站加密 1.首先安装http-tools软软件 2.把nginx设置锁也要有执行权限 3.进入nginx配置文件 4. 检查…

【Windows个性化设置篇】StartAllBack更改win11任务栏设置

【Windows个性化设置篇】StartAllBack更改win11任务栏设置 Windows11目前不支持更改任务栏位置固定的修改&#xff0c;因为想把任务栏固定到旁边&#xff0c;从而充分利用电脑屏幕位置。之前试过TranslucentTB可以把任务栏透明化&#xff0c;很漂亮&#xff0c;但在分屏操作时…

【Vue3】Vue3+Vite+TS使用npm包引入百度地图

文章目录 Vue3ViteTS引入百度地图一、注册二、安装依赖包三、参考文档四、全局注册五、局部导入六、断网地图的使用八、项目使用成功图片九、使用卫星图 Vue3ViteTS引入高德地图npm包查找地图依赖包 Vue3ViteTS引入百度地图 一、注册 官网&#x1f449;百度地图开放平台 注册…

python---案例分析(1)

标准库 python自带的 第三方库 其他人做出来的 例1: 实现一个日期计算器 EG: 计算2012年2月14日和2016年2月3日之间的差值 使用datetime 1.根据日期构造出datetime类型的变量 2.把两个变量进行相减,得到的结果即为所求 1) 2) 3) 例2: 实现单词逆序 翻转单词顺序 i am a s…

MySQL数据库表的操作

创建表 语法&#xff1a; CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎; 说明&#xff1a; field 表示列名。 datatype 表示列的类型。 character set 字符集&#xff0c;如果没有指…

hutool包下的BeanUtil工具使用、SQL中的and和OR的优先级

SQL中的and和OR的优先级 首先and的优先级大于or&#xff0c;通俗理解其实or查询其实会把条件分为左右两边来查。 如select * from user where id 1 and status 2 or status 3,本来想查询user表中id为1的状态为2或者3的数据&#xff0c;其实只会这样执行&#xff0c;and比or…

大数据分析案例-基于LightGBM算法构建航空公司满意度预测模型

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

DOD Digital Engineering Vision 数字工程策略与实施

DOD Digital Engineering Vision DOD的数字工程策略与实施&#xff0c;仅供个人学习使用&#xff0c;不代表个人意见和观点&#xff01;&#xff01;&#xff01; Digital Engineering Strategy and Implementation Ms. Philomena Zimmerman Office of the Under Secretary …

day1

在linux内核中&#xff0c;当用户打开设备文件时&#xff0c;内核中的VFS层会调用设备驱动中的sys_open()函数&#xff0c;在sys_open()函数中&#xff0c;内核会根据文件的inode号判断文件是否存在于文件系统中&#xff0c;如果存在&#xff0c;内核会找到这个文件的文件信息结…

Python:使用钉钉dingtalk发送通知消息

通过钉钉的开放API接口&#xff0c;可以很容易的将消息发送到钉钉dingtalk&#xff0c;比起邮件发送更稳定&#xff0c;及时 文档 官网&#xff1a;https://www.dingtalk.com/API Explorer调试 https://open-dev.dingtalk.com/apiExplorer 目录 方式一&#xff1a;webhook方式…

Search space set group switching(一)

欢迎关注同名微信公众号“modem协议笔记”。 根据R17 38.300的描述&#xff0c;UE可以通过PDCCH monitoring adaptation机制实现power saving的目的&#xff0c;这其中就包括PDCCH monitoring skipping和search space set group (SSSG) switching两种机制。PDCCH monitoring s…

dom4j 解析 mybatis mapper xml 文件

01: CarMapper.xml : <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace"car"…

代码随想录 回溯算法 Java

文章目录 组合&#xff08;*中等&#xff09;77. 组合&#xff08;*中等&#xff09;17. 电话号码的字母组合&#xff08;中等&#xff09;39. 组合总和&#xff08;中等&#xff09;40. 组合总和II&#xff08;中等&#xff09;216. 组合总和||| 分割&#xff08;*中等&#x…

【王道操作系统】内存管理

内存管理概念 1.C 2.D 存储保护的作用&#xff1a;保证各道作业在各自的存储空间内运行&#xff0c;互不干扰 实现虚拟内存管理需要请求分页&#xff08;请求分段、请求段页&#xff09;等技术的支持&#xff0c;故需要硬件支持&#xff0c;比如页表机制、中断机构、地址变换…

【五子棋实战】第1章 项目架构与开发思路

【五子棋实战】第1章 项目总览 前言 ## 项目技术栈 ## 项目可配置性 博客目录 项目预览 项目代码获取 项目架构 ## 架构&#xff1a;前端页面 算法接口 ## 前端页面 ## 算法接口 开发思路 前言 五子棋是一种古老而受欢迎的棋类游戏&#xff0c;本博客将介绍如何使用…

Matplotlib-直方图、箱型图

1. 直方图 hist函数来创建一个直方图。下面是对各个参数的解释&#xff1a; x&#xff1a;要绘制直方图的数据序列。bins&#xff1a;指定直方图的边界范围和间隔。这里使用range(40, 110, 6)表示边界从40到110&#xff0c;间隔为6。facecolor&#xff1a;直方图的填充颜色。…

unity UGUI源码分析(4)Text与TextMeshPro

这一篇博客用于分析Text的内容的更新机制&#xff0c;并分析text mesh pro。 首先我们分析Text的文字是如何渲染出来的。 PupulateWithErrors方法会根据字符串生成顶点数据。其实Text会根据所给定的字符串生成相关的图集&#xff0c;然后对图集进行采样就可以渲染出文字了。由…

【五子棋实战】第3章 算法包装成第三方接口

【五子棋实战】第3章 算法包装成第三方接口 使用Flask开放接口 ## 定义接口输入 ## 开放接口、跨域配置、数据解析 数据预处理 ## 数据检查与异常捕获 ## 预处理数据 ## 定义接口输出 开启接口 继续学习下一篇实战&#xff01; 我们在上一章实现了博弈树负值极大alpha…