hadoop高可用+mapreduce on yarn集群搭建

news2024/11/17 6:56:13

虚拟机安装

本次安装了四台虚拟机:hadoop001、hadoop002、hadoop003、hadoop004,安装过程略过

移除虚拟机自带jdk

rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps

关闭防火墙

systemctl stop firewalld
systemctl disable firewalld.service

给普通用户添加root权限

/etc/sudoers

## Allow root to run any commands anywhere 
root    ALL=(ALL)       ALL
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL
node01 ALL=(ALL) ALL    # 需要添加root权限的用户

安装hadoop集群准备

新建目录

mkdir /opt/software # 安装包存放位置
mkdir /opt/module   # 程序安装目录
chown -R node01:node01 /opt/software # 修改新建目录所属用户以及用户组 
chown -R node01:node01 /opt/module # 修改新建目录所属用户以及用户组

下载需要安装的安装包

# jdk官网需要登录验证,这里不做记录
wget --no-check-certificate https://dlcdn.apache.org/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1-bin.tar.gz
wget --no-check-certificate https://dlcdn.apache.org/hadoop/common/hadoop-3.2.4/hadoop-3.2.4.tar.gz

将下载的安装包解压到安装目录

tar -zxf apache-zookeeper-3.7.1-bin.tar.gz -C /opt/module
tar -zxf hadoop-3.2.4.tar.gz -C /opt/module

安装jdk

vim /etc/profile.d/my_env.sh

export JAVA_HOME=/opt/module/jdk1.8.0_361
export PATH=${JAVA_HOME}/bin:$PATH

source /etc/profile

jdk验证

java -version
java version "1.8.0_361"
Java(TM) SE Runtime Environment (build 1.8.0_361-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.361-b09, mixed mode)

配置Hadoop安装路径

vim /etc/profile.d/my_env.sh

export HADOOP_HOME=/opt/module/hadoop-3.2.4
export PATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:${PATH}

source /etc/profile

hadoop验证

hadoop version
Hadoop 3.2.4
Source code repository Unknown -r 7e5d9983b388e372fe640f21f048f2f2ae6e9eba
Compiled by ubuntu on 2022-07-12T11:58Z
Compiled with protoc 2.5.0
From source with checksum ee031c16fe785bbb35252c749418712
This command was run using /opt/module/hadoop-3.2.4/share/hadoop/common/hadoop-common-3.2.4.jar

完全分布式+高可用+mapreduce on yarn 搭建

免密登录

# 四台主机上分别执行以下命令
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub node01@hadoop001
ssh-copy-id -i ~/.ssh/id_rsa.pub node01@hadoop002
ssh-copy-id -i ~/.ssh/id_rsa.pub node01@hadoop003
ssh-copy-id -i ~/.ssh/id_rsa.pub node01@hadoop004

配置文件调整

核心配置文件 core-site.xml

<!-- 指定NameNode的地址,
      这里指定的是一个代称,用于指向多个NameNode,实现高可用,
      具体在hdfs-site.xml中指定 -->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://mycluster</value>
</property>

<!-- 指定hadoop数据的存储目录 -->
<property>
    <name>hadoop.tmp.dir</name>
    <value>/var/doudou/hadoop/ha</value>
</property>

<!-- 配置HDFS网页登录使用的静态用户为doudou -->
<property>
    <name>hadoop.http.staticuser.user</name>
    <value>doudou</value>
</property>

<!-- 指定每个zookeeper服务器的位置和客户端端口号 -->
<property>
    <name>ha.zookeeper.quorum</name>
    <value>hadoop004:2181,hadoop002:2181,hadoop003:2181</value>
</property>

HDFS配置文件 hdfs-site.xml

<!-- 指定block默认副本个数 -->
<property>
	<name>dfs.replication</name>
	<value>3</value>
</property>

<!-- 用于解析fs.defaultFS中hdfs://mycluster中的mycluster地址 -->
<property>
	<name>dfs.nameservices</name>
	<value>mycluster</value>
 </property>

<!-- mycluster下面由两个namenode服务支撑 -->
<property>
	<name>dfs.ha.namenodes.mycluster</name>
	<value>nn1,nn2</value>
</property>

  <!--指定nn1的地址和端口号,发布的是一个hdfs://的服务-->
<property>
	<name>dfs.namenode.rpc-address.mycluster.nn1</name>
	<value>hadoop001:8020</value>
</property>

<property>
	<name>dfs.namenode.rpc-address.mycluster.nn2</name>
	<value>hadoop002:8020</value>
</property>

<!--指定三台journal服务器的地址-->
<property>
	<name>dfs.namenode.shared.edits.dir</name>
	<value>qjournal://hadoop001:8485;hadoop002:8485;hadoop003:8485/mycluster</value>
</property>

<!-- 指定客户端查找active的namenode的策略:会给所有namenode发请求,以决定哪个是active的 -->
<property>
	<name>dfs.client.failover.proxy.provider.mycluster</name>
	<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

<!--在发生故障切换的时候,ssh到对方服务器,将namenode进程kill掉  kill -9  55767-->
<property>
	<name>dfs.ha.fencing.methods</name>
	<value>sshfence</value>
</property>

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

<!-- 指定journalnode在哪个目录存放edits log文件 -->
<property>
	<name>dfs.journalnode.edits.dir</name>
	<value>/var/doudou/hadoop/ha/jnn</value>
</property>

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

YARM配置文件 yarn-site.xml

<!-- 指定MR走shuffle -->
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>

<!-- 启用ResourceManager的高可用-->
<property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
</property>

<!--—指代ResourceManager HA的两台RM的逻辑名称 -->
<property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>rmhacluster1</value>
</property>

<!--—指定该高可用ResourceManager下的两台ResourceManager的逻辑名称-->
<property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
</property>

<!--—指定第一台ResourceManager服务器所在的主机名称 -->
<property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>hadoop003</value>
</property>

<property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>hadoop004</value>
</property>

<!--—指定resourcemanager的web服务器的主机名和端口号-->
<property>
    <name>yarn.resourcemanager.webapp.address.rm1</name>
    <value>hadoop003:8088</value>
</property>

<property>
    <name>yarn.resourcemanager.webapp.address.rm2</name>
    <value>hadoop004:8088</value>
</property>

<!--—做ResourceManager HA故障切换用到的zookeeper集群地址 -->
<property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>hadoop002:2181,hadoop003:2181,hadoop004:2181</value>
</property>

<!-- 环境变量继承 -->   
<property>
    <name>yarn.application.classpath</name>
    <value>/opt/hadoop-3.2.4/etc/hadoop:/opt/hadoop-3.2.4/share/hadoop/common/lib/*:/opt/hadoop-3.2.4/share/hadoop/common/*:/opt/hadoop-3.2.4/share/hadoop/hdfs:/opt/hadoop-3.2.4/share/hadoop/hdfs/lib/*:/opt/hadoop-3.2.4/share/hadoop/hdfs/*:/opt/hadoop-3.2.4/share/hadoop/mapreduce/lib/*:/opt/hadoop-3.2.4/share/hadoop/mapreduce/*:/opt/hadoop-3.2.4/share/hadoop/yarn:/opt/hadoop-3.2.4/share/hadoop/yarn/lib/*:/opt/hadoop-3.2.4/share/hadoop/yarn/*</value>
</property>

<!-- 开启日志聚集功能 -->
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
    <name>yarn.log.server.url</name>
    <value>http://hadoop001:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为7天 -->
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
</property>

MapReduce配置文件 mapred-site.xml

<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
<!-- 历史服务器段地址 -->    
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop001:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
    <name>mapreduce.jonhistory.webapp.address</name>
    <value>hadoop001:19888</value>
</property>

datanode节点 workers

# hadoop-3.2.4/etc/hadoop/workers
hadoop001
hadoop002
hadoop003
hadoop004

将调整的五个配置文件发送到其它三台机器上

xsync /opt/module/hadoop-3.2.4/etc/hadoop/mapred-site.xml

启动集群

在这里插入图片描述

启动zookeeper集群

myzookeeper.sh start

格式化namenode

# 初次启动时需格式化namenode
# hadoop001、hadoop002、hadoop003三台节点上启动journalnode
hdfs --daemon start journalnode
# 在hadoop001或者hadoop002上格式化namenode
hdfs namenode -format
# 启动格式化节点的namenode
hdfs --daemon start namenode
# 在另一台namenode节点上同步数据
hdfs namenode -bootstrapStandby
# 初始化zookeeper节点数据
hdfs zkfc -formatZK
# 启动hdfs、yarn、historyserver服务
start-dfs.sh
start-yarn.sh
mapred --daemon start historyserver
# 后续启动集群
# 先启动zookeeper集群
myzookeeper.sh start
# 在启动hadoop集群
myhadoop.sh

相关地址信息

WEB端查看HDFS的namenode 【http://hadoop001:9870】
WEB端查看YARN的ResourceManager 【http://hadoop003:8088】
WEB端查看JobHistiory 【http://hadoop001:19888】

相关脚本

xsync.sh

#!/bin/bash

#1.校验参数个数
if [ $# -lt 1 ]
then 
  echo Not Enough Arguement!
  exit;
fi

# 遍历指定机器,进行数据发送
for host in hadoop001 hadoop002 hadoop003 hadoop004
do
  echo =============== $host ===============	
  for file in $@
  do
    # 判断文件是否存在
    if [ -e $file ]
      then 
        # 获取父目录
        pdir=$(cd -P $(dirname $file); pwd)

        # 获取当前文件名称
        fame=$(basename $file)
        ssh $host "mkdir -p $pdir"
        rsync -av $pdir/$fname $host:$pdir
      else
        echo $file dose not exists!
    fi
  done
done

jpsall.sh

#!/bin/bash

for host in hadoop001 hadoop002 hadoop003 hadoop004
do
  echo "========== $host ========="
  ssh $host jps
done

myzookeeper.sh

#!/bin/bash

if [ $# -lt 1 ]
  then 
    echo "No Args Input..."
    exit;
fi

case $1 in 
"start")
  echo " ========== 启动zookeeper集群 =========="
  for host in hadoop002 hadoop003 hadoop004
  do
    echo "----------- --------- $host ----------- --------"
    ssh $host zkServer.sh start
  done
;;
"stop")
  echo " ========== 停止zookeeper集群 =========="
  for host in hadoop002 hadoop003 hadoop004
  do
    echo "------------------- - $host ------------------- "
    ssh $host zkServer.sh stop
  done
;;
"status")
  echo " ========== zookeeper集群状态 =========="
  for host in hadoop002 hadoop003 hadoop004
  do
    echo "------------------- - $host ----------- --------"
    ssh $host zkServer.sh status
  done
;;
*)
  echo "Input Args Error..."
;;
esac

myhadoop.sh

#!/bin/bash

if [ $# -lt 1 ]
  then 
    echo "No Args Input..."
    exit;
fi

case $1 in 
"start")
  echo " ========== 启动hadoop集群 =========="
  echo " ------------- 启动hdfs -------------"
  ssh hadoop001 "/opt/hadoop-3.2.4/sbin/start-dfs.sh"
  echo " ------------- 启动yarn -------------"
  ssh hadoop003 "/opt/hadoop-3.2.4/sbin/start-yarn.sh"
  echo " -------- 启动historyserver ---------"
  ssh hadoop001 "/opt/hadoop-3.2.4/bin/mapred --daemon start historyserver"
;;
"stop")
  echo "========== 关闭hadoop集群 =========="
  echo " ------------ 关闭historyserver ----------"
  ssh hadoop001 "/opt/hadoop-3.2.4/bin/mapred --daemon stop historyserver"
  echo " ------------- 关闭yarn ------------ "
  ssh hadoop003 "/opt/hadoop-3.2.4/sbin/stop-yarn.sh"
  echo " ------------ 关闭hadoop ----------- "
  ssh hadoop001 "/opt/hadoop-3.2.4/sbin/stop-dfs.sh"
;;
*)
  echo "Input Args Error..."
;;
esac

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

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

相关文章

MyBatis-Plus基本CRUD

MyBatis-Plus基本CRUD三、基本CRUD1、BaseMapper2、插入3、删除a>通过id删除记录b>通过id批量删除记录c>通过map条件删除记录4、通过id修改一条记录5、查询a>根据id查询用户信息b>根据多个id查询多个用户信息c>通过map条件查询用户信息d>查询所有数据6、通…

微软ATP智汇十二道场 · 探索AI 驱动转型(北京专场)

为了推动微软与苏州人工智能产业创新中心共同构建企业级AI创新生态圈&#xff0c;微软ATP定于2023年3月3日在微软亚太研发集团总部&#xff08;北京&#xff09;举办“微软ATP智汇十二道场 探索AI 驱动转型”线下活动。 ▍微软探索AI商用&#xff0c;避免“创新陷阱”ChatGPT …

Lesson 6.6 多分类评估指标的 macro 和 weighted 过程 Lesson 6.7 GridSearchCV 的进阶使用方法

文章目录一、多分类评估指标的 macro 和 weighted 过程1. 多分类 F1-Score 评估指标2. 多分类 ROC-AUC 评估指标二、借助机器学习流构建全域参数搜索空间三、优化评估指标选取1. 高级评估指标的选用方法2. 同时输入多组评估指标四、优化后建模流程在正式讨论关于网格搜索的进阶…

Element UI框架学习篇(六)

Element UI框架学习篇(六) 1 删除数据 1.1 前台核心函数 1.1.1 elementUI中的消息提示框语法 //①其中type类型和el-button中的type类型是一致的,有info灰色,success绿色,danger红色,warning黄色,primary蓝色 //②message是你所要填写的提示信息 //③建议都用,因为比双引号…

字符串装换整数(atoi)-力扣8-java

一、题目描述请你来实现一个 myAtoi(string s) 函数&#xff0c;使其能将字符串转换成一个 32 位有符号整数&#xff08;类似 C/C 中的 atoi 函数&#xff09;。函数 myAtoi(string s) 的算法如下&#xff1a;读入字符串并丢弃无用的前导空格检查下一个字符&#xff08;假设还未…

合宙ESP32S3-CORE开发板|保姆级|Arduino IDE|windows11|esp32S3支持库|helloword例程:Arduino 环境搭建

Arduino主页网址&#xff1a; Software | Arduino 以windows11版本为例&#xff1a; Arduino IDE最新版本为2.0.3 左边的按钮是直接下载&#xff08;免捐赠&#xff09;&#xff1a; 下载安装完成后&#xff0c;更改软件默认语言&#xff1a; 默认的库是不支持ESP32的&#…

Allegro如何更改铜皮显示密度操作指导

Allegro如何更改铜皮显示密度操作指导 用Allegro做PCB设计的时候,铜皮正常显示模式如下图 铜皮的密度是基本填充满的,Allegro支持更改铜皮的显示密度 如下图 如何更改密度,具体操作如下 点击setup

Element UI框架学习篇(七)

Element UI框架学习篇(七) 1 新增员工 1.1 前台部分 1.1.1 在vue实例的data里面准备好需要的对象以及属性 addStatus:false,//判断是否弹出新增用户弹窗dailog,为true就显示depts:[],//部门信息mgrs:[],//上级领导信息jobs:[],//工作岗位信息//新增用户所需要的对象newEmp:…

Top-1错误率、Top-5错误率等常见的模型算法评估指标解析

Top-1 错误率&#xff1a;指预测输出的概率最高的类别与人工标注的类别相符的准确率&#xff0c;就是你预测的label取最后概率向量里面最大的那一个作为预测结果&#xff0c;如过你的预测结果中概率最大的那个分类正确&#xff0c;则预测正确&#xff0c;否则预测错误。比如预测…

Zabbix 构建监控告警平台(五)

Zabbix 自动发现Zabbix 自动注册1.Zabbix 自动发现 1.1前言 为了满足监控企业成千上万台服务器&#xff0c;因此我们需要使用Zabbix批量监控来实现。自动发现和自动注册。 1.2zabbix-server &#xff08;一&#xff09;1、创建自动发现规则 在“配置”->“自动发现”->“…

Spring Boot 快速入门(绝对经典)

目录 1、理论概述 1.1、什么是Spring Boot? 1.2、Spring Boot的特点 1.3、开发环境 2、实战——创建和配置项目 2.1、Spring Boot项目创建的两种方式 2.1.1、方法一&#xff1a;通过网站构建项目 2.1.2、使用Spring Initializr创建&#xff08;推荐&#xff09; 2.2、…

10个SEO 写作的必读小技巧!包你读完写更好创作

我们都知道写作是需要技巧的&#xff0c;目的是为了让读者有兴趣阅读&#xff0c;所以标题跟内容架构都需要清晰的思路。同样的&#xff0c;撰写SEO部落格文章也需要技巧&#xff0c;但拥有的不仅是传统写文章的技巧而已&#xff0c;而需要将Google的排名因素考虑进去。换句话说…

使用VueBarcode结合vueEasyPrint打印条形码标签

目标&#xff1a; 生成标签并实现打印功能 学习步骤&#xff1a; 1、了解 VueBarcode 2、了解 VueEasyPrint 3、VueBarcode 实践 4、VueEasyPrint 实践 5、VueBarcode VueEasyPrint 合体 一、了解 VueBarcode 点击传送至官网 原文介绍&#xff1a; JsBarcode是一个用JavaScr…

电子学会2020年6月青少年软件编程(图形化)等级考试试卷(四级)答案解析

青少年软件编程&#xff08;Scratch&#xff09;等级考试试卷&#xff08;四级A卷&#xff09; 分数&#xff1a;100.00 题数&#xff1a;30 一、单选题&#xff08;共15题&#xff0c;每题2分&#xff0c;共30分&#xff09; 1. 执行下图程序后&#xff0c;“花名…

Paper——Diffusion Model前向过程和反向过程详解

文章目录Diffusion过程解析前向过程公式详解每一步增加噪声的求解从起始状态到最终状态的公式反向过程损失函数总结公式Diffusion过程解析 前向和后向相互独立&#xff0c;前向过程使用马尔科夫链实现&#xff0c;反向过程采用神经网络进行预测。 前向过程 输入一个原始图片&…

二叉树的四种遍历方式(二)

接上文《二叉树的四种遍历方式&#xff08;一&#xff09;》&#xff08;https://blog.csdn.net/helloworldchina/article/details/128895188&#xff09;&#xff0c;在本文讲述一下第四种遍历方式&#xff0c;即按层次遍历二叉树。 一 讲解 1 先序遍历二叉树&#xff0c; 见…

【Redis】Redis高可用之Redis Cluster集群模式详解(Redis专栏启动)

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;2022年度博客之星全国TOP3&#xff0c;专注于后端、中间件、计算机底层、架构设计演进与稳定性建工设优化。文章内容兼具广度深度、大厂技术方案&#xff0c;对待技术喜欢推理加验证&#xff0c;就职于知名金融公…

nodejs+vue地铁站自动售票系统-火车票售票系统vscode

地铁站自动售票系统主要包括个人中心、地铁线路管理、站点管理、购票信息管理、乘坐管理、用户信息管理等多个模块。它使用的是前端技术&#xff1a;nodejsvueelementui 前后端通讯一般都是采取标准的JSON格式来交互。前端技术&#xff1a;nodejsvueelementui,视图层其实质就是…

MWORKS--系统建模与仿真

MWORKS--系统建模与仿真1 系统定义特征2 系统研究2.1 特点与原则2.2 方法百度百科归纳同元杠归纳3 系统建模与仿真3.1 系统、模型、仿真的关系3.2 系统建模4 建模方法4.1 方法4.2 一般流程4.3 目的5 仿真方法5.1 方法5.2 流程参考1 系统定义 系统是由相互作用相互依赖的若干组…

pip离线安装windows版torch

文章目录前言conda创建虚拟环境安装torchtorch官网在线安装离线手动安装测试是否安装成功后记前言 学习的时候遇到几个机器学习相关的项目&#xff0c;由于不同的项目之间用到的依赖库不太一样&#xff0c;于是想利用conda为不同的项目创建不同的环境方便管理和运行&#xff0…