Tips
Go
(18条消息) Go语言自学系列 | golang包_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang并发编程之channel的遍历_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang并发编程之select switch_COCOgsta的博客-CSDN博客_golang select switch
(18条消息) Go语言自学系列 | golang并发编程之runtime包_COCOgsta的博客-CSDN博客_golang runtime包
(18条消息) Go语言自学系列 | golang接口值类型接收者和指针类型接收者_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang并发编程之Timer_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang方法_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang并发编程之WaitGroup实现同步_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang构造函数_COCOgsta的博客-CSDN博客_golang 构造函数
(18条消息) Go语言自学系列 | golang方法接收者类型_COCOgsta的博客-CSDN博客_golang 方法接收者
(18条消息) Go语言自学系列 | golang接口_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang接口和类型的关系_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang结构体_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang结构体_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang标准库os模块 - File文件读操作_COCOgsta的博客-CSDN博客_golang os.file
(18条消息) Go语言自学系列 | golang继承_COCOgsta的博客-CSDN博客_golang 继承
(18条消息) Go语言自学系列 | golang嵌套结构体_COCOgsta的博客-CSDN博客_golang 结构体嵌套
(18条消息) Go语言自学系列 | golang并发编程之Mutex互斥锁实现同步_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang并发变成之通道channel_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang并发编程之原子操作详解_COCOgsta的博客-CSDN博客_golang 原子操作
(18条消息) Go语言自学系列 | golang并发编程之原子变量的引入_COCOgsta的博客-CSDN博客_go 原子变量
(18条消息) Go语言自学系列 | golang并发编程之协程_COCOgsta的博客-CSDN博客_golang 协程 并发
(18条消息) Go语言自学系列 | golang接口嵌套_COCOgsta的博客-CSDN博客_golang 接口嵌套
(18条消息) Go语言自学系列 | golang包管理工具go module_COCOgsta的博客-CSDN博客_golang 包管理器
(18条消息) Go语言自学系列 | golang标准库os模块 - File文件写操作_COCOgsta的博客-CSDN博客_go os模块
(18条消息) Go语言自学系列 | golang结构体的初始化_COCOgsta的博客-CSDN博客_golang 结构体初始化
(18条消息) Go语言自学系列 | golang通过接口实现OCP设计原则_COCOgsta的博客-CSDN博客
(18条消息) Go语言自学系列 | golang标准库os包进程相关操作_COCOgsta的博客-CSDN博客_golang os包
(18条消息) Go语言自学系列 | golang标准库ioutil包_COCOgsta的博客-CSDN博客_golang ioutil
(18条消息) Go语言自学系列 | golang标准库os模块 - 文件目录相关_COCOgsta的博客-CSDN博客_go语言os库
Golang技术栈,Golang文章、教程、视频分享!
(18条消息) Go语言自学系列 | golang结构体指针_COCOgsta的博客-CSDN博客_golang 结构体指针
Ansible
太厉害了,终于有人能把Ansible讲的明明白白了,建议收藏_互联网老辛
ansible.cfg配置详解
Docker
Docker部署
linux安装docker和Docker Compose
linux 安装 docker
Docker中安装Docker遇到的问题处理
Docker常用命令
docker常用命令小结
docker 彻底卸载
Docker pull 时报错:Get https://registry-1.docker.io/v2/library/mysql: net/http: TLS handshake timeout
Docker 拉镜像无法访问 registry-x.docker.io 问题(Centos7)
docker 容器内没有权限
Linux中关闭selinux的方法是什么?
docker run 生成 docker-compose
Docker覆盖网络部署
docker pull后台拉取镜像
docker hub
Redis
Redis 集群别乱搭,这才是正确的姿势
linux_离线_redis安装
怎么实现Redis的高可用?(主从、哨兵、集群) - 雨点的名字 - 博客园
redis集群离线安装
always-show-logo yes
Redis集群搭建及原理
[ERR] Node 172.168.63.202:7001 is not empty. Either the nodealready knows other nodes (check with CLUSTER NODES) or contains some - 亲爱的不二999 - 博客园
Redis daemonize介绍
redis 下载地址
Redis的redis.conf配置注释详解(三) - 云+社区 - 腾讯云
Redis的redis.conf配置注释详解(一) - 云+社区 - 腾讯云
Redis的redis.conf配置注释详解(二) - 云+社区 - 腾讯云
Redis的redis.conf配置注释详解(四) - 云+社区 - 腾讯云
Linux
在终端连接ssh的断开关闭退出的方法
漏洞扫描 - 灰信网(软件开发博客聚合)
find 命令的参数详解
vim 编辑器搜索功能
非root安装rpm时,mockbuild does not exist
Using a SSH password instead of a key is not possible because Host Key checking
(9条消息) 安全扫描5353端口mDNS服务漏洞问题_NamiJava的博客-CSDN博客_5353端口
Linux中使用rpm命令安装rpm包
ssh-copy-id非22端口的使用方法
How To Resolve SSH Weak Key Exchange Algorithms on CentOS7 or RHEL7 - infotechys.com
Linux cp 命令
yum 下载全量依赖 rpm 包及离线安装(终极解决方案) - 叨叨软件测试 - 博客园
How To Resolve SSH Weak Key Exchange Algorithms on CentOS7 or RHEL7 - infotechys.com
RPM zlib 下载地址
运维架构网站
欢迎来到 Jinja2
/usr/local/bin/ss-server -uv -c /etc/shadowsocks-libev/config.json -f /var/run/s
ruby 安装Openssl 默认安装位置
Linux 常用命令学习 | 菜鸟教程
linux 重命名文件和文件夹
linux命令快速指南
ipvsadm
Linux 下查找日志中的关键字
Linux 切割大 log 日志
CentOS7 关于网络的设置
rsync 命令_Linux rsync 命令用法详解:远程数据同步工具
linux 可视化界面安装
[问题已处理]-执行yum卡住无响应
GCC/G++升级高版本
ELK
Docker部署ELK
ELK+kafka+filebeat+Prometheus+Grafana - SegmentFault 思否
(9条消息) Elasticsearch设置账号密码_huas_xq的博客-CSDN博客_elasticsearch设置密码
Elasticsearch 7.X 性能优化
Elasticsearch-滚动更新
Elasticsearch 的内存优化_大数据系统
Elasticsearch之yml配置文件
ES 索引为Yellow状态
Logstash:Grok filter 入门
logstash grok 多项匹配
Mysql
Mysql相关Tip
基于ShardingJDBC实现数据库读写分离 - 墨天轮
MySQL-MHA高可用方案
京东三面:我要查询千万级数据量的表,怎么操作?
OpenStack
(16条消息) openstack项目中遇到的各种问题总结 其二(云主机迁移、ceph及扩展分区)_weixin_34104341的博客-CSDN博客
OpenStack组件介绍
百度大佬OpenStack流程
openstack各组件介绍
OpenStack生产实际问题总结(一)
OpenStack Train版离线部署
使用Packstack搭建OpenStack
K8S
K8S部署
K8S 集群部署
kubeadm 重新 init 和 join-pudn.com
Kubernetes 实战总结 - 阿里云 ECS 自建 K8S 集群 Kubernetes 实战总结 - 自定义 Prometheus
【K8S实战系列-清理篇1】k8s docker 删除没用的资源
Flannel Pod Bug汇总
Java
Jdk 部署
JDK部署
java线程池ThreadPoolExecutor类使用详解 - bigfan - 博客园
ShardingJDBC实现多数据库节点分库分表 - 墨天轮
Maven Repository: Search/Browse/Explore
其他
Git在阿里,我们如何管理代码分支?
chrome F12调试网页出现Paused in debugger
体验IntelliJ IDEA的远程开发(Remote Development) - 掘金
Idea远程调试
PDF转MD
强哥分享干货
优秀开源项目集合
vercel 配合Github 搭建项目Doc门户
如何用 Github Issues 写技术博客?
Idea 2021.3 Maven 3.8.1 报错 Blocked mirror for repositories 解决
列出maven依赖
[2022-09 持续更新] 谷歌 google 镜像 / Sci-Hub 可用网址 / Github 镜像可用网址总结
阿里云ECS迁移
linux访问github
一文教你使用 Docker 启动并安装 Nacos-腾讯云开发者社区-腾讯云
Nginx
Nginx 部署
Nginx 部署安装
Nginx反向代理cookie丢失的问题_longzhoufeng的博客-CSDN博客_nginx 代理后cookie丢失
Linux 系统 Https 证书生成与Nginx配置 https
数据仓库
实时数仓
松果出行 x StarRocks:实时数仓新范式的实践之路
实时数据仓库的一些分层和分层需要处理的事情,以及数据流向
湖仓一体电商项目
湖仓一体电商项目(一):项目背景和架构介绍
湖仓一体电商项目(二):项目使用技术及版本和基础环境准备
湖仓一体电商项目(三):3万字带你从头开始搭建12个大数据项目基础组件
数仓笔记
数仓学习总结
数仓常用平台和框架
数仓学习笔记
数仓技术选型
尚硅谷教程
尚硅谷学习笔记
尚硅谷所有已知的课件资料
尚硅谷大数据项目之尚品汇(11数据质量管理V4.0)
尚硅谷大数据项目之尚品汇(10元数据管理AtlasV4.0)
尚硅谷大数据项目之尚品汇(9权限管理RangerV4.0)
尚硅谷大数据项目之尚品汇(8安全环境实战V4.0)
尚硅谷大数据项目之尚品汇(7用户认证KerberosV4.1)
尚硅谷大数据项目之尚品汇(6集群监控ZabbixV4.1)
尚硅谷大数据项目之尚品汇(5即席查询PrestoKylinV4.0)
尚硅谷大数据项目之尚品汇(4可视化报表SupersetV4.0)
尚硅谷大数据项目之尚品汇(3数据仓库系统)V4.2.0
尚硅谷大数据项目之尚品汇(2业务数据采集平台)V4.1.0
尚硅谷大数据项目之尚品汇(1用户行为采集平台)V4.1.0
数仓治理
数据中台 元数据规范
数据中台的那些 “经验与陷阱”
2万字详解数据仓库数据指标数据治理体系建设方法论
数据仓库,为什么需要分层建设和管理? | 人人都是产品经理
网易数帆数据治理演进
数仓技术
一文看懂大数据生态圈完整知识体系
阿里云—升舱 - 数据仓库升级白皮书
最全企业级数仓建设迭代版(4W字建议收藏)
基于Hue,Dolphinscheduler,HIVE分析数据仓库层级实现及项目需求案例实践分析
详解数据仓库分层架构
数据仓库技术细节
大数据平台组件介绍
总览 2016-2021 年全球机器学习、人工智能和大数据行业技术地图
Apache DolphinScheduler 3.0.0 正式版发布!
数据仓库面试题——介绍下数据仓库
数据仓库为什么要分层,各层的作用是什么
Databend v0.8 发布,基于 Rust 开发的现代化云数据仓库 - OSCHINA - 中文开源技术交流社区
数据中台
数据中台设计
大数据同步工具之 FlinkCDC/Canal/Debezium 对比
有数数据开发平台文档
Shell
Linux Shell 命令参数
shell 脚本编程
一篇教会你写 90% 的 Shell 脚本
Kibana
Kibana 查询语言(KQL)
Kibana:在 Kibana 中的四种表格制作方式
Kafka
Kafka部署
canal 动态监控 Mysql,将 binlog 日志解析后,把采集到的数据发送到 Kafka
OpenApi
OpenAPI 标准规范,了解一下?
OpenApi学术论文
贵阳市政府数据开放平台设计与实现
OpenAPI简介
开放平台:运营模式与技术架构研究综述
管理
技术部门Leader是不是一定要技术大牛担任?
华为管理体系流程介绍
DevOps
*Ops
XOps 已经成为一个流行的术语 - 它是什么?
Practical Linux DevOps
Jenkins 2.x实践指南 (翟志军)
Jenkins 2权威指南 ((美)布伦特·莱斯特(Brent Laster)
DevOps组件高可用的思路
KeepAlived
VIP + KEEPALIVED + LVS 遇到Connection Peer的问题的解决
MinIO
MinIO部署
Minio 分布式集群搭建部署
Minio 入门系列【16】Minio 分片上传文件 putObject 接口流程源码分析
MinioAPI 浅入及问题
部署 minio 兼容 aws S3 模式
超详细分布式对象存储 MinIO 实战教程
Hadoop
Hadoop 部署
Hadoop集群部署
windows 搭建 hadoop 环境(解决 HADOOP_HOME and hadoop.home.dir are unset
Hadoop 集群搭建和简单应用(参考下文)
Hadoop 启动 NameNode 报错 ERROR: Cannot set priority of namenode process 2639
jps 命令查看 DataNode 进程不见了 (hadoop3.0 亲测可用)
hadoop 报错: Operation category READ is not supported in state standby
Spark
Spark 部署
Spark 集群部署
spark 心跳超时分析 Cannot receive any reply in 120 seconds
Spark学习笔记
apache spark - Failed to find data source: parquet, when building with sbt assembly
Spark Thrift Server 架构和原理介绍
InLong
InLong 部署
Apache InLong部署文档
安装部署 - Docker 部署 - 《Apache InLong v1.2 中文文档》 - 书栈网 · BookStack
基于 Apache Flink SQL 的 InLong Sort ETL 方案解析
关于 Apache Pulsar 在 Apache InLong 接入数据
zookeeper
zookeeper 部署
使用 Docker 搭建 Zookeeper 集群
美团技术团队
StarRocks
StarRocks技术白皮书(在线版)
JuiceFS
AI 场景存储优化:云知声超算平台基于 JuiceFS 的存储实践
JuiceFS 在 Elasticsearch/ClickHouse 温冷数据存储中的实践
JuiceFS format
元数据备份和恢复 | JuiceFS Document Center
JuiceFS 元数据引擎选型指南
Apache Hudi 使用文件聚类功能 (Clustering) 解决小文件过多的问题
普罗米修斯
k8s 之 Prometheus(普罗米修斯)监控,简单梳理下 K8S 监控流程
k8s 部署 - 使用helm3部署监控prometheus(普罗米修斯),从零到有,一文搞定
k8s 部署 - 使用 helm3 部署监控 prometheus(普罗米修斯),从零到有,一文搞定
k8s 部署 - 如何完善 k8s 中 Prometheus(普罗米修斯)监控项目呢?
k8s 部署 - k8s 中 Prometheus(普罗米修斯)的大屏展示 Grafana + 监控报警
zabbix
一文带你掌握 Zabbix 监控系统
Stream Collectors
Nvidia
Nvidia API
CUDA Nvidia驱动安装
NVIDIA驱动失效简单解决方案:NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver.
ubuntu 20 CUDA12.1安装流程
nvidia开启持久化模式
nvidia-smi 开启持久化
Harbor
Harbor部署文档
Docker 爆出 it doesn't contain any IP SANs
pandoc
其他知识
大模型
COS 597G (Fall 2022): Understanding Large Language Models
如何优雅的使用各类LLM
ChatGLM3在线搜索功能升级
当ChatGLM3能用搜索引擎时
OCR神器,PDF、数学公式都能转
Stable Diffusion 动画animatediff-cli-prompt-travel
基于ERNIE Bot自定义虚拟数字人生成
pika负面提示词
开通GPT4的方式
GPT4网站
低价开通GPT Plus
大模型应用场景分享
AppAgent AutoGPT变体
机器学习
最大似然估计
权衡偏差(Bias)和方差(Variance)以最小化均方误差(Mean Squared Error, MSE)
伯努利分布
方差计算公式
均值的高斯分布估计
没有免费午餐定理
贝叶斯误差
非参数模型
最近邻回归
表示容量
最优容量
权重衰减
正则化项
Sora
Sora官方提示词
看完32篇论文,你大概就知道Sora如何炼成? |【经纬低调出品】
Sora论文
Sora 物理悖谬的几何解释
Sora 技术栈讨论
RAG垂直落地
DB-GPT与TeleChat-7B搭建相关RAG知识库
ChatWithRTX
ChatRTX安装教程
ChatWithRTX 踩坑记录
ChatWithRTX 使用其他量化模型
ChatWithRTX介绍
RAG 相关资料
英伟达—大模型结合 RAG 构建客服场景自动问答
又一大模型技术开源!有道自研RAG引擎QAnything正式开放下载
收藏!RAG入门参考资料开源大总结:RAG综述、介绍、比较、预处理、RAG Embedding等
RAG调研
解决现代RAG实际生产问题
解决现代 RAG 系统中的生产问题-II
Modular RAG and RAG Flow: Part Ⅰ
Modular RAG and RAG Flow: Part II
先进的Retriever技术来增强你的RAGs
高级RAG — 使用假设文档嵌入 (HyDE) 改进检索
提升 RAG:选择最佳嵌入和 Reranker 模型
LangGraph
增强型RAG:re-rank
LightRAG:使用 PyTorch 为 LLM 应用程序提供支持
模型训练
GPU相关资料
[教程] conda安装简明教程(基于miniconda和Windows)
PyTorch CUDA对应版本 | PyTorch
资料
李一舟课程全集
零碎资料
苹果各服共享ID
数据中心网络技术概览
华为大模型训练学习笔记
百度AIGC工程师认证考试答案(可换取工信部证书)
百度智能云生成式AI认证工程师 考试和证书查询指南
深入理解 Megatron-LM(1)基础知识
QAnything
接入QAnything的AI问答知识库,可私有化部署的企业级WIKI知识库
wsl --update失效Error code: Wsl/UpdatePackage/0x80240438的解决办法
Docker Desktop 启动docker engine一直转圈解决方法
win10开启了hyper-v,docker 启动还是报错 docker desktop windows hypervisor is not present
WSL虚拟磁盘过大,ext4迁移 Windows 中创建软链接和硬链接
WSL2切换默认的Linux子系统
Windows的WSL子系统,自动开启sshd服务
新版docker desktop设置wsl(使用windown的子系统)
WSL 开启ssh
Windows安装网易开源QAnything打造智能客服系统
芯片
国内互联网大厂自研芯片梳理
超算平台—算力供应商
Linux 磁盘扩容
Linux使用growpart工具进行磁盘热扩容(非LVM扩容方式)
关于centos7 扩容提示no tools available to resize disk with 'gpt' - o夜雨随风o - 博客园
(小插曲)neo4j配置apoc插件后检查版本发现:Unknown function ‘apoc.version‘ “EXPLAIN RETURN apoc.version()“
vfio-pci与igb_uio映射硬件资源到DPDK的流程分析
KubeVirt
vnc server配置、启动、重启与连接 - 王约翰 - 博客园
虚拟机Bug解决方案
kubevirt 如何通过CDI上传镜像文件
在 K8S 上也能跑 VM!KubeVirt 簡介與建立(部署篇) | Cloud Solutions
KubeVirt 04:容器化数据导入 – 小菜园
Python
安装 flash_attn
手把手教你在linux上安装pytorch与cuda
AI
在启智社区基于PyTorch运行国产算力卡的模型训练实验
Scaling law
免费的GPT3.5 API
AI Engineer Roadmap & Resources 🤖
模型排行
edk2
K8S删除Evicted状态的pod
docker 中启动 docker
远程本地多用户桌面1.17(一种不让电脑跟你抢键鼠的思路) - 哔哩哔哩
-
+
首页
Hadoop集群部署
## Hadoop集群部署 | 网ip | 内网ip | 安装的服务 | | ----------- | ----------- | ------------------------------------------------------------ | | 36.111.36.* | 192.168.0.8 | NameNode、DFSZKFailoverController、ResourceManager、Zookeeper | | 36.111.36.* | 192.168.0.9 | NameNode、DFSZKFailoverController、ResourceManager、Zookeeper | | | 192.168.0.2 | DataNode、NodeManager、JournalNode、Zookeeper | | | 192.168.0.3 | DataNode、NodeManager、JournalNode、Zookeeper | | | 192.168.0.4 | DataNode、NodeManager、JournalNode、Zookeeper | | | 192.168.0.5 | DataNode、NodeManager、JournalNode、Zookeeper | | | 192.168.0.6 | DataNode、NodeManager、JournalNode、Zookeeper | ### 准备工作 配置/etc/hosts - master1 ``` 0.0.0.0 master1 36.111.36.177 master2 192.168.0.9 master3 192.168.0.2 slave1 192.168.0.3 slave2 192.168.0.4 slave3 192.168.0.5 slave4 192.168.0.6 slave5 ``` - master2 ``` 36.111.36.174 master1 0.0.0.0 master2 192.168.0.9 master3 192.168.0.2 slave1 192.168.0.3 slave2 192.168.0.4 slave3 192.168.0.5 slave4 192.168.0.6 slave5 ``` - slave* ``` 192.168.0.8 master1 192.168.0.10 master2 192.168.0.9 master3 192.168.0.2 slave1 192.168.0.3 slave2 192.168.0.4 slave3 192.168.0.5 slave4 192.168.0.6 slave5 ``` ### 一. 前期配置 ------- #### 1.1 编写集群分发脚本xsync,集群处理脚本xcall **xsync集群分发** 脚本 **(1)需求:循环复制文件到所有节点的相同目录下** **(2)需求分析** - ①rsync命令原始拷贝: rsync -av /usr/local/yangguang/software root@hadoop103:/opt/` - ②期望脚本: xsync要同步的文件名称 - ③说明:在/bin这个目录下存放的脚本,用户可以在系统任何地方直接执行。 **(3)脚本实现** ①在用的家目录/home/root下创建bin文件夹 `[atguigu@master1 ~]$ mkdir bin` ②在/home/root/bin目录下创建xsync文件,以便全局调用 `[atguigu@master1 ~]$ cd /home/root/bin` `[atguigu@master1 ~]$ vim xsync` 在该文件中编写如下代码 ```sh #!/bin/bash #1. 判断参数个数 if [ $# -lt 1 ] then echo Not Enough Arguement! exit; fi #2. 遍历集群所有机器 for host in master1 master2 slave1 slave2 slave3 slave4 slave5 do echo ==================== $host ==================== #3. 遍历所有目录,挨个发送 for file in $@ do #4 判断文件是否存在 if [ -e $file ] then #5. 获取父目录 pdir=$(cd -P $(dirname $file); pwd) #6. 获取当前文件的名称 fname=$(basename $file) ssh $host "mkdir -p $pdir" rsync -av $pdir/$fname $host:$pdir else echo $file does not exists! fi done done ``` ③修改脚本xsync具有执行权限 `[atguigu@master1 bin]$ chmod +x xsync` ④测试脚本 `[atguigu@master1 bin]$ xsync xsync` `[atguigu@master1 bin]$ mv xsync /bin` - **xcall集群批量处理**脚本 `[atguigu@master1 bin]$ cd /bin` `[atguigu@master1 bin]$ vim xcall` ```sh #!/bin/bash # 获取控制台指令 cmd=$* # 判断指令是否为空 if (( #$cmd -eq # )) then echo "command can not be null !" exit fi # 获取当前登录用户 user=`whoami` # 在从机执行指令,这里需要根据你具体的集群情况配置,host与具体主机名一致 for (( host=2;host<=5;host++ )) do echo "================current host is hadoop00$host=================" echo "--> excute command \"$cmd\"" ssh $user@hadoop00$host $cmd done echo "excute successfully !" ``` `[atguigu@master1 bin]$ chmod +x xcall` #### 1.2 SSH无密登录配置 说明:这里面只配置了master1、master2到其他主机的无密登录;因为master2,master1都要求对其他节点无密访问。 **(1)master1上生成公钥和私钥:** `[atguigu@master1 .ssh]$ ssh-keygen -t rsa` 然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥) **(2)将master1公钥拷贝到要免密登录的目标机器上** `[atguigu@master1 .ssh]$ ssh-copy-id master1` `[atguigu@master1 .ssh]$ ssh-copy-id master2` `[atguigu@master1 .ssh]$ ssh-copy-id slave1` `[atguigu@master1 .ssh]$ ssh-copy-id slave2` `[atguigu@master1 .ssh]$ ssh-copy-id slave3` `[atguigu@master1 .ssh]$ ssh-copy-id slave4` `[atguigu@master1 .ssh]$ ssh-copy-id slave5` **(3)master2上生成公钥和私钥:** `[atguigu@master2 .ssh]$ ssh-keygen -t rsa` 然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥) **(4)将hadoop103公钥拷贝到要免密登录的目标机器上** `[atguigu@master2 .ssh]$ ssh-copy-id master1` `[atguigu@master2 .ssh]$ ssh-copy-id master2` `[atguigu@master2 .ssh]$ ssh-copy-id slave1` `[atguigu@master2 .ssh]$ ssh-copy-id slave2` `[atguigu@master2 .ssh]$ ssh-copy-id slave3` `[atguigu@master2 .ssh]$ ssh-copy-id slave4` `[atguigu@master2 .ssh]$ ssh-copy-id slave5` #### 1.3 **JDK准备** **1)卸载现有JDK** `[atguigu@master1 opt]# xcall rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps` - (1)rpm -qa:表示查询所有已经安装的软件包 - (2)grep -i:表示过滤时不区分大小写 - (3)xargs -n1:表示一次获取上次执行结果的一个值 - (4)rpm -e --nodeps:表示卸载软件 **2)用XShell工具将JDK导入到master2的/usr/local/yangguang/software 文件夹下面** ![img](http://kmgy.top:9090/image/2022/9/14/wps1_repeat_1662036464846__646533.jpg_repeat_1663154697822__267029.jpeg) **3)在Linux系统下的software目录中查看软件包是否导入成功** `[atguigu@master1 software]# ls /usr/local/yangguang/software /` 看到如下结果: `jdk-8u212-linux-x64.tar.gz` **4)解压JDK到/opt/module目录下** `[atguigu@master1 software]# tar -zxvf jdk-8u212-linux-x64.tar.gz -C /usr/local/yangguang/software/` `[atguigu@master1 module]$ mv jdk1.8.0_212/ jdk` **5)配置JDK环境变量** - (1)新建/etc/profile.d/my_env.sh文件 `[atguigu@master1 module]# sudo vim /etc/profile.d/my_env.sh` 添加如下内容,然后保存(:wq)退出 ``` #JAVA_HOME export JAVA_HOME=/usr/local/yangguang/software/jdk export PATH=$PATH:$JAVA_HOME/bin ``` - (2)让环境变量生效 `[atguigu@master1 software]$ source /etc/profile.d/my_env.sh` **6)测试JDK是否安装成功** `[atguigu@master1 module]# java -version` 如果能看到以下结果、则Java正常安装 `java version "1.8.0_212"` **7)分发JDK** `[atguigu@master1 module]$ sudo sh /home/atguigu/bin/xsync /usr/local/yangguang/software/jdk` **8)分发环境变量配置文件** `[atguigu@master1 module]$ sudo sh /home/atguigu/bin/xsync /etc/profile.d/my_env.sh` **9)使用xcall上执行source** `[atguigu@hadoop103 module]$ xcall source /etc/profile.d/my_env.sh` #### 1.4 **环境变量配置说明** Linux的环境变量可在多个文件中配置,如/etc/profile,/etc/profile.d/*.sh,~/.bashrc,~/.bash_profile等,下面说明上述几个文件之间的关系和区别。 bash的运行模式可分为login shell和non-login shell。 例如,我们通过终端,输入用户名、密码,登录系统之后,得到就是一个login shell。而当我们执行以下命令ssh slave * command,在slave *执行command的就是一个non-login shell。 ![img](http://kmgy.top:9090/image/2022/9/1/wps2_repeat_1662036470462__497158.png) 这两种shell的主要区别在于,它们启动时会加载不同的配置文件,login shell启动时会加载/etc/profile,~/.bash_profile,~/.bashrc。non-login shell启动时会加载~/.bashrc。 而在加载~/.bashrc(实际是~/.bashrc中加载的/etc/bashrc)或/etc/profile时,都会执行如下代码片段, ![img](http://kmgy.top:9090/image/2022/9/1/wps3_repeat_1662036474147__580578.jpg) 因此不管是login shell还是non-login shell,启动时都会加载/etc/profile.d/*.sh中的环境变量。 ### 二、Zookeeper部署 ------- #### 3.1 什么是Zookeeper Zookeeper 是一个开源的分布式的,为分布式框架提供协调服务的 Apache 项目。 Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。 #### 3.2 分布式安装部署 **3.2.1 集群规划** 在所有slave节点上部署Zookeeper。 | | 服务器slave1 | 服务器slave2 | 服务器slave3 | 服务器slave4 | 服务器slave5 | | --------- | ------------ | ------------ | ------------ | ------------ | ------------ | | Zookeeper | Zookeeper | Zookeeper | Zookeeper | Zookeeper | Zookeeper | **3.2.2 解压安装** (1)解压Zookeeper安装包到/usr/local/yangguang/software/目录下 `[atguigu@master1 software]$ tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /usr/local/yangguang/software/` (2)修改/usr/local/yangguang/software/apache-zookeeper-3.5.7-bin名称为zookeeper-3.5.7 `[atguigu@master1 module]$ mv apache-zookeeper-3.5.7-bin/ zookeeper` **3.2.3 配置服务器编号** (1)在/usr/local/yangguang/software/zookeeper/这个目录下创建zkData `[atguigu@master1 zookeeper]$ mkdir zkData` (2)在/usr/local/yangguang/software/zookeeper/zkData目录下创建一个myid的文件 `[atguigu@master1 zkData]$ vim myid` 添加myid文件,注意一定要在linux里面创建,在notepad++里面很可能乱码 在文件中添加与server对应的编号: `2` **3.2.4 配置zoo.cfg文件** (1)重命名/usr/local/yangguang/software/zookeeper-3.5.7/conf这个目录下的zoo_sample.cfg为zoo.cfg `[atguigu@master1 conf]$ mv zoo_sample.cfg zoo.cfg` (2)打开zoo.cfg文件 `[atguigu@master1 conf]$ vim zoo.cfg` 修改数据存储路径配置 `dataDir=/usr/local/yangguang/software/zookeeper/zkData` 增加如下配置 ```properties #######################cluster########################## server.2=slave1:2888:3888 server.3=slave2:2888:3888 server.4=slave3:2888:3888 server.5=slave4:2888:3888 server.6=slave5:2888:3888 ``` (3)同步/usr/local/yangguang/software/zookeeper-3.5.7目录内容到hadoop103、hadoop104 `[atguigu@master1 module]$ xsync zookeeper/` (4)分别修改hadoop103、hadoop104上的myid文件中内容为3、4 (5)**zoo.cfg**配置参数解读 server.A=B:C:D。 **A**是一个数字,表示这个是第几号服务器; 集群模式下配置一个文件myid,这个文件在dataDir目录下,这个文件里面有一个数据就是A的值,Zookeeper启动时读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。 **B**是这个服务器的地址; **C**是这个服务器Follower与集群中的Leader服务器交换信息的端口; **D**是万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。 **3.2.5 集群操作** (1)分别启动Zookeeper `[atguigu@master1 zookeeper]$ xcall bin/zkServer.sh start` (2)查看状态 `[atguigu@master1 zookeeper]# xcall bin/zkServer.sh status` `JMX enabled by default` `Using config: /usr/local/yangguang/software/zookeeper/bin../image/conf/zoo.cfg` `Mode: follower` `JMX enabled by default` `Using config: /usr/local/yangguang/software/zookeeper/bin../image/conf/zoo.cfg` `Mode: leader` `JMX enabled by default` `Using config: /usr/local/yangguang/software/zookeeper/bin../image/conf/zoo.cfg` `Mode: follower` #### **3.3 ZK集群启动停止脚本** (1)在master1的/home/root/bin目录下创建脚本 `[atguigu@master1 bin]$ vim zk.sh` 在脚本中编写如下内容 ```sh #!/bin/bash case $1 in "start"){ for i in slave1 slave2 slave3 slave4 slave5 do echo ---------- zookeeper $i 启动 ------------ ssh $i "/usr/local/yangguang/software/zookeeper/bin/zkServer.sh start" done };; "stop"){ for i in slave1 slave2 slave3 slave4 slave5 do echo ---------- zookeeper $i 停止 ------------ ssh $i "/usr/local/yangguang/software/zookeeper/bin/zkServer.sh stop" done };; "status"){ for i in slave1 slave2 slave3 slave4 slave5 do echo ---------- zookeeper $i 状态 ------------ ssh $i "/usr/local/yangguang/software/zookeeper/bin/zkServer.sh status" done };; esac ``` (2)增加脚本执行权限 `[atguigu@master1 bin]$ chmod 777 zk.sh` (3)Zookeeper集群启动脚本 `[atguigu@master1 module]$ sh zk.sh start` (4)Zookeeper集群停止脚本 `[atguigu@master1 module]$ sh zk.sh stop` (5)Zookeeper集群状态脚本 `[atguigu@master1 module]$ sh zk.sh status` #### **3.4 客户端命令行操作** | 命令基本语法 | 功能描述 | | ------------ | ------------------------------------------------------------ | | help | 显示所有操作命令 | | ls path | 使用 ls 命令来查看当前znode的子节点-w 监听子节点变化-s 附加次级信息 | | create | 普通创建-s 含有序列-e 临时(重启或者超时消失) | | get path | 获得节点的值-w 监听节点内容变化-s 附加次级信息 | | set | 设置节点的具体值 | | stat | 查看节点状态 | | delete | 删除节点 | | deleteall | 递归删除节点 | **1)启动客户端** `[atguigu@slave1 zookeeper]$ bin/zkCli.sh` ### 三、安装 Hadoop #### 3.1 启动服务配置 ![](http://kmgy.top:9090/image/2022/9/14/20200609225543616_repeat_1663154039788__724627_repeat_1663155900810__904192.png) | 网ip | 内网ip | 安装的服务 | | ----------- | ----------- | -------------------------------------------------- | | 36.111.36.* | 192.168.0.8 | NameNode,DFSZKFailoverController,ResourceManager | | 36.111.36.* | 192.168.0.9 | NameNode,DFSZKFailoverController,ResourceManager | | | 192.168.0.2 | DataNode、NodeManager、JournalNode | | | 192.168.0.3 | DataNode、NodeManager、JournalNode | | | 192.168.0.4 | DataNode、NodeManager、JournalNode | | | 192.168.0.5 | DataNode、NodeManager、JournalNode | | | 192.168.0.6 | DataNode、NodeManager、JournalNode | #### 3.2 配置`hadoop-env.sh`文件 ``` [root@master1 ~]# cd /usr/local/yangguang/software/hadoop/etc/hadoop [root@master1 hadoop]# vi hadoop-env.sh ``` `配置如下:` ``` export JAVA_HOME=/usr/local/yangguang/software/jdk ``` ![](http://kmgy.top:9090/image/2022/9/14/20200609230052929_repeat_1663154039917__606219_repeat_1663155904732__557227.png) #### 3.3 配置`mapred-env.sh`文件 ``` [root@master hadoop]# vi mapred-env.sh ``` `配置如下:` ``` export JAVA_HOME=/usr/local/yangguang/software/jdk ``` ![](http://kmgy.top:9090/image/2022/9/14/20200609230351356_repeat_1663154040228__371676_repeat_1663155904319__724425.png) #### 3.4 配置`yarn-env.sh`文件 ``` [root@master hadoop]# vi yarn-env.sh ``` `配置如下:` ``` export JAVA_HOME=/usr/local/yangguang/software/jdk ``` ![](http://kmgy.top:9090/image/2022/9/14/20200609230501932_repeat_1663154040034__144834.png) #### 3.5 配置`slaves`文件(该文件下用来配置要启动 NameNode 的机器的 localhost) ``` [root@master hadoop]# vi slaves ``` `配置如下:` ``` slave1 slave2 slave3 slave4 slave5 ``` #### 3.6 配置`core-site.xml`文件 ``` [root@master hadoop]# vi core-site.xml ``` `配置如下:` ``` <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master1:9000</value> </property> <!-- hadoop运行时存储路径 --> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/yangguang/software/hadoop/data</value> </property> <property> <name>hadoop.proxyuser.root.hosts</name> <value>*</value> </property> <property> <name>ipc.client.connect.max.retries</name> <value>100</value> </property> <property> <name>ipc.client.connect.retry.interval</name> <value>10000</value> </property> <property> <name>hadoop.proxyuser.root.groups</name> <value>*</value> </property> <!-- 配置Zookeeper 管理HDFS --> <property> <name>ha.zookeeper.quorum</name> <value>slave1:2181,slave2:2181,slave3:2181,slave4:2181,slave5:2181</value> </property> </configuration> ``` #### 3.7 配置`hdfs-site.xml`文件 ``` [root@master1 hadoop]# vi hdfs-site.xml ``` `配置如下:` ``` <configuration> <!-- 副本数(正常为3) --> <property> <name>dfs.replication</name> <value>3</value> </property> <!-- 命名空间,它的值与fs.defaultFS的值要对应,namenode高可用之后有两个namenode,cluster1是对外提供的统一入口 --> <property> <name>dfs.nameservices</name> <value>cluster1</value> </property> <!-- 设置集群中两台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>master1:9000</value> </property> <!-- nn2 rpc地址 --> <property> <name>dfs.namenode.rpc-address.cluster1.nn2</name> <value>master2:9000</value> </property> <!-- nn1 http地址 --> <property> </property> <!-- nn2 http地址 --> <property> <name>dfs.namenode.http-address.cluster1.nn2</name> <value>master2:50070</value> </property> <!-- 启动故障自动恢复 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- journal配置 指定NameNode的edits元数据在JournalNode上的存放位置一般跟zookeeper部署在一起 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://slave1:8485;slave2:8485;slave3:8485;slave4:8485;slave5:8485/cluster1</value> </property> <!-- 指定JournalNode集群在对nameNode的目录进行共享时,自己存储数据的磁盘路径 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/usr/local/yangguang/software/hadoop/journaldata/jn</value> </property> <!-- namenode高可用主备切换配置 --> <!-- 开启NameNode失败自动切换 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- 配置失败自动切换实现方式,使用内置的zkfc 客户端通过代理访问namenode,访问文件系统,HDFS 客户端与Active 节点通信的Java 类,使用其确定Active 节点 是否活跃--> <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>shell(/bin/true)</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> <!-- 关闭权限检查--> <property> <name>dfs.permissions.enable</name> <value>false</value> </property> </configuration> ``` `在hadoop260目录下创建JournalNode集群数据存放目录:` ``` [root@master hadoop]# mkdir -p journaldata/jn ``` #### 3.8 配置`mapred-site.xml`文件 ``` [root@master hadoop]# cp mapred-site.xml.template mapred-site.xml [root@master hadoop]# vi mapred-site.xml ``` `配置如下:` ``` <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> ``` #### 3.9 配置`yarn-site.xml`文件 ``` [root@master hadoop]# vi yarn-site.xml ``` `配置如下:` ``` <configuration> <!-- Site specific YARN configuration properties --> <!-- reducer获取数据方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <!-- 日志聚集功能使用 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 日志保留时间设置7天 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property> <!-- 日志聚合HDFS目录 --> <property> <name>yarn.nodemanager.remote-app-log-dir</name> <value>/data/hadoop/yarn-logs</value> </property> <!-- 超时的周期 --> <property> <name>yarn.resourcemanager.connect.retry-interval.ms</name> <value>2000</value> </property> <!-- 打开高可用 --> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <!-- 给yarn cluster 取个名字yarn-rm-cluster --> <property> <name>yarn.resourcemanager.cluster-id</name> <value>yarn-rm-cluster</value> </property> <!-- 给ResourceManager 取个名字 rm1,rm2 --> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <!-- 配置ResourceManager rm1 hostname --> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>master1</value> </property> <!-- 配置ResourceManager rm2 hostname --> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>master2</value> </property> <!-- 启用resourcemanager 自动恢复 --> <property> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property> <!-- 配置Zookeeper地址 --> <property> <name>yarn.resourcemanager.zk-address</name> <value>slave1:2181,slave2:2181,slave3:2181,slave4:2181,slave5:2181</value> </property> <!--指定resourcemanager的状态信息存储在zookeeper集群,默认是存放在FileSystem里面 --> <property> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property> </configuration> ``` #### 3.10 配置 hadoop 环境变量文件 ``` [root@master hadoop]# vi /etc/profile.d/my_env.sh ``` `配置如下:` ``` export HADOOP_HOME=/usr/local/yangguang/software/hadoop export HADOOP_MAPRED_HOME=$HADOOP_HOME export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=$HADOOP_HOME export YARN_HOME=$HADOOP_HOME export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib" export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin ``` ![](http://kmgy.top:9090/image/2022/9/14/20200609235637669_repeat_1663154040514__599999_repeat_1663155903031__166534.png) #### 3.11 分发 Hadoop 和环境变量文件 ``` [root@master ~]# xsync /usr/local/yangguang/software/hadoop/ [root@master ~]# xsync /etc/profile.d/my_env.sh [root@master ~]# xcall source /etc/profile.d/my_env.sh ``` `配置没有问题` #### 3.12 启动 hadoop ha 高可用集群`一定要按着以下顺序步骤启动集群`!! `①首先使用shell脚本启动zookeeper` ``` [root@master ~]# zk start ``` ![](http://kmgy.top:9090/image/2022/9/14/20200610000627697_repeat_1663154040513__148327.png) `②然后启动配置了DataNode的机器上的JournalNode` ``` [root@slave1 ~]# source /etc/profile.d/env.sh [root@slave1 ~]# hadoop-daemon.sh start journalnode starting journalnode, logging to /usr/local/yangguang/software/hadoop/logs/hadoop-root-journalnode-slave1.out ``` ``` [root@slave2 ~]# source /etc/profile.d/env.sh [root@slave2 ~]# hadoop-daemon.sh start journalnode starting journalnode, logging to /usr/local/yangguang/software/hadoop/logs/hadoop-root-journalnode-slave1.out ``` ``` [root@slave3 ~]# source /etc/profile.d/env.sh [root@slave3 ~]# hadoop-daemon.sh start journalnode starting journalnode, logging to /usr/local/yangguang/software/hadoop/logs/hadoop-root-journalnode-slave1.out ``` `③查看journalnode集群` ![](http://kmgy.top:9090/image/2022/9/14/20200610001346381_repeat_1663154040600__726046_repeat_1663155908301__597959.png) `④重置第一台master机器的hdfs` ``` [root@master ~]# hdfs namenode -format ``` ![](http://kmgy.top:9090/image/2022/9/14/2020061000185325_repeat_1663154040920__309432.png) `⑤启动master上的NameNode` ``` [root@master ~]# hadoop-daemon.sh start namenode ``` `启动成功` ![](http://kmgy.top:9090/image/2022/9/14/20200610002012424_repeat_1663154040794__039554_repeat_1663155908171__680867.png) `⑥在第二台master2机器上同步第一台master上的NameNode节点信息` ``` [root@master2 ~]# source /etc/profile.d/env.sh [root@master2 ~]# hdfs namenode -bootstrapStandby ``` ![](http://kmgy.top:9090/image/2022/9/14/20200610002405423_repeat_1663154040904__758227.png) `⑦在master机器上重置ZK` ``` [root@master ~]# hdfs zkfc -formatZK ``` ![](http://kmgy.top:9090/image/2022/9/14/20200610002552578_repeat_1663154040957__026758.png) `⑧先关掉dfs.sh,然后重新启动` ``` [root@master ~]# stop-dfs.sh [root@master ~]# start-dfs.sh ``` ![](http://kmgy.top:9090/image/2022/9/14/20200610002841402_repeat_1663154040923__881869_repeat_1663155915279__825093.png) `查看启动情况,dfs启动成功` ![](http://kmgy.top:9090/image/2022/9/14/20200610002940276_repeat_1663154040943__043633_repeat_1663155917074__031116.png) `⑨在配置了ResourceManager的其中一台机器上启动yarn` ``` [root@master ~]# start-yarn.sh ``` ![](http://kmgy.top:9090/image/2022/9/14/2020061000330626_repeat_1663154042154__523137_repeat_1663155914955__521533.png) `查看ResourceManager和NodeManager是否启动成功` ![](http://kmgy.top:9090/image/2022/9/14/20200610003436946_repeat_1663154042156__399841_repeat_1663155915791__237655.png) 我们可以看到 master2 上 ResourceManager 没有启动,因为这个需要我们自己手动启动。 `启动master2上的ResourceManager` ``` [root@master2 ~]# yarn-daemon.sh start resourcemanager ``` ![](http://kmgy.top:9090/image/2022/9/14/2020061000411970_repeat_1663154042274__557838_repeat_1663155918725__017561.png) #### 3.13 测试 hadoop ha 高可用集群 `首先打开网页` http://master1:50070 http://master2:50070/ 我们可以观察到 master 是 active 的,master2 是 standby 的。 ![](http://kmgy.top:9090/image/2022/9/14/20200610004456446_repeat_1663154042232__513957.png) ![](http://kmgy.top:9090/image/2022/9/14/20200610004511269_repeat_1663154042255__743804_repeat_1663155919097__171064.png) `输入测试命令,切换两个NameNode的active` ``` [root@master1 ~]# hdfs haadmin -failover nn1 nn2 ``` ![](http://kmgy.top:9090/image/2022/9/14/20200610004651442_repeat_1663154042211__160889_repeat_1663155918133__600394.png) 刷新网页,我们可以看到 master 变成了 standby 的,master2 变成了 active。 ![](http://kmgy.top:9090/image/2022/9/14/20200610004853311_repeat_1663154042472__512927.png) ![](http://kmgy.top:9090/image/2022/9/14/20200610004905680_repeat_1663154042432__607342_repeat_1663155925617__867927.png) `我们再次输入测试命令,切换两个NameNode的active` ``` [root@master1 ~]# hdfs haadmin -failover nn2 nn1 ``` 这时我们可以观察到 master 又切换回了 active,master2 又切换成了 standby,所以 NameNode 高可用实现。 `接下来测试ResourceManager是否高可用,首先打开网页` http://master1:8088/ http://master2:8088/ 我们会发现我们只能打开一个网页,如下: ![](http://kmgy.top:9090/image/2022/9/14/2020061000541125_repeat_1663154042469__148969_repeat_1663155926309__316331.png) 我们能看到 master 的 ResourceManager 是 active 的。接下来我们 kill 掉 master 的 ResourceManager,重新打开网页看看结果。 ![](http://kmgy.top:9090/image/2022/9/14/20200610005639731_repeat_1663154043558__158707_repeat_1663155919602__717928.png) ![](http://kmgy.top:9090/image/2022/9/14/20200610005747664_repeat_1663154042560__996045_repeat_1663155925784__356811.png) 这时我们可以看到,master2 上的 ResourceManager 变成了 active,所以 ResourceManager 也高可用。到此,Hadoop ha 高可用机器搭建结束。
yg9538
2022年10月11日 09:10
473
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档
PDF文档(打印)
分享
链接
类型
密码
更新密码