spark 基于物理机centos7环境搭建分布式集群

集群环境配置:

主机名称/IPsparkhadoopmysqlhbasehivezookeeperflumekafkaredis
linux01.pub/192.168.10.1011111    
linux02.pub/192.168.10.1111 1     
linux03.pub/192.168.10.1211 1     
linux04.pub/192.168.10.1311 1 1111
linux05.pub/192.168.10.1411 1 1111
linux06.pub/192.168.10.1511 1 1111

一、基础环境配置

1、先在linux01上安装mysql
千万记住,安装前一定要删除本机所有的Mysql或Mariadb

#!/bin/bash
service mysql stop 2>/dev/null
service mysqld stop 2>/dev/null
rpm -qa | grep -i mysql | xargs -n1 rpm -e --nodeps 2>/dev/null
rpm -qa | grep -i mariadb | xargs -n1 rpm -e --nodeps 2>/dev/null
rm -rf /var/lib/mysql
rm -rf /usr/lib64/mysql
rm -rf /etc/my.cnf
rm -rf /usr/my.cnf
直接参照此前写过的这篇,不再重复

https://blog.csdn.net/qq_36269641/article/details/109641947

检查,mysql是否安装成功,可以用netstat, 如果没有可以用以下命令安装

# 安装网络工具

yum install -y net-tools

# 查看端口或程序

netstat -nltp |grep mysqld  #或 3306
 2、网络改成静态地址

vim /etc/sysconfig/network-scripts/ifcfg-ens33
注:网卡名称可能不一致,ifcfg-ens**(*为数字)即是配置文件。可以使用在进入该文件夹后查看所有文件,符合名称的即为网卡配置文件或使用 ip addr查看。

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static          //将原文件里的改为此处,使用静态ip
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
DEVICE=ens33
ONBOOT=yes               //将原文件里的改为此处,默认打开网卡
NETMASK=255.255.255.0    //新增:此处为子网掩码
GATEWAY=192.168.**.*     //新增:此处为网关
IPADDR=192.168.**.*    //新增:此处为ip地址,需与子网保持在一个网段内,最后一位随意(1~254)
DNS1=114.114.114.114     //新增:域名解析服务器
DNS2=119.29.29.29        //新增:域名解析服务器
保存后,重启网卡服务即可(systemctl  restart network)。测试主机与虚拟机互 ping 以及虚拟机 ping 百度。
3、安装必要插件

sudo yum install -y epel-release
sudo yum install -y psmisc nc net-tools rsync vim lrzsz ntp libzstd openssl-static tree iotop git

4.修改主机名
主机名分别为:

hostnamectl  set-hostname  hadoop-master(主机名)
 vim /etc/hosts #加上以下内容
192.168.29.151 cluster01    #第一台机器的ip和主机名
192.168.29.152 cluster02    #第二台机器的ip和主机名
192.168.29.153 cluster03    #第三台机器的ip和主机名
192.168.29.154 cluster04    #第四台机器的ip和主机名
192.168.29.155 cluster05    #第五台机器的ip和主机名
 
5.关闭防火墙

# 禁止开机启动
systemctl disable firewalld
# 关闭防火墙
systemctl stop firewalld
 

6、创建atguigu用户,并修改atguigu用户的密码

 useradd atguigu

 passwd atguigu
 
1)配置atguigu用户具有root权限,方便后期加sudo执行root权限的命令

 vim /etc/sudoers
修改/etc/sudoers文件,在%wheel这行下面添加一行,如下所示:

\## Allow root to run any commands anywhere

root   ALL=(ALL)   ALL

\## Allows people in group wheel to run all commands

%wheel  ALL=(ALL)    ALL

atguigu  ALL=(ALL)   NOPASSWD:ALL
 
注意:atguigu这一行不要直接放到root行下面,因为所有用户都属于wheel组,你先配置了atguigu具有免密功能,但是程序执行到%wheel行时,该功能又被覆盖回需要密码。所以atguigu要放到%wheel这行下面。

2)在/opt目录下创建文件夹,并修改所属主和所属组

(1)在/opt目录下创建module、software文件夹

 mkdir /opt/module

 mkdir /opt/software
 
​ (2)修改module、software文件夹的所有者和所属组均为atguigu用户

  chown atguigu:atguigu /opt/module 

  chown atguigu:atguigu /opt/software

(3)查看module、software文件夹的所有者和所属组

 cd /opt/

 ll

6)卸载自带的jdk

​ 注意:如果你的虚拟机是最小化安装不需要执行这一步。

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


Ø rpm -qa:查询所安装的所有rpm软件包

Ø grep -i:忽略大小写

Ø xargs -n1:表示每次只传递一个参数

Ø rpm -e –nodeps:强制卸载软件

1)卸载现有的JDK
注意:安装JDK前,一定确保提前删除了虚拟机自带的JDK。

2)用XShell传输工具将JDK导入到opt目录下面的software文件夹下面

3)在Linux系统下的opt目录中查看软件包是否导入成功

 ls /opt/software/
看到如下结果:

jdk-8u212-linux-x64.tar.gz
4)解压JDK到/opt/module目录下

 tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/

5)配置JDK环境变量

​ (1)新建/etc/profile.d/my_env.sh文件

 sudo vim /etc/profile.d/my_env.sh
添加如下内容

#JAVA_HOME

export JAVA_HOME=/opt/module/jdk1.8.0_212

export PATH=$PATH:$JAVA_HOME/bin

​ (3)source一下/etc/profile文件,让新的环境变量PATH生效 source /etc/profile

6)测试JDK是否安装成功

[atguigu@hadoop102 ~]$ java -version

如果能看到以下结果,则代表Java安装成功。


注意:重启(如果java -version可以用就不用重启)

  reboot
 

7.配置ssh无密登录配置

① 生成公匙和私匙

ssh-keygen -t rsa

然后敲(三个回车),查看/root/.ssh/目录,可以看到会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)

cd /root/.ssh/

② 将公钥拷贝到要免密登录的目标机器上

将所有主机的公钥分别追加到主机的~/.ssh/authorized_keys,在登录三台主机后都执行以下三条命令
ssh-copy-id -i ~/.ssh/id_rsa.pub ceson@ceson01
ssh-copy-id -i ~/.ssh/id_rsa.pub ceson@ceson02
ssh-copy-id -i ~/.ssh/id_rsa.pub ceson@ceson03

# 时间同步 
yum install ntpdate -y 
ntpdate time.windows.com
或者

下载时间同步模块
yum -y install ntpdate

连接远程服务器
ntpdate -u time1.aliyun.com

修改文件
ntpdate -u ntp.api.bz

date 查看系统时间

hwclock --show 查看硬件时间

hwclock -w 永久保存

date 查看 成功

二、hadoop的集群配置
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/software
#修改解压文件默认名字(名字过于长,所以建议修改一下)
mv  hadoop-3.1.3/ hadoop313        #将hadoop改为hadoop313
#配置环境变量
vim /etc/profile.d/myenv.sh
# jdk
export JAVA_HOME=/opt/software/java/jdk180    #自己的jdk路径
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

# hadoop
export HADOOP_HOME=/opt/software/hadoop313    #自己的hadoop路径
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
保存退出,通过命令 source /etc/profile 激活
输入 java -version 如果实现jdk的版本信息就是激活成功了

3、文件复制
将jdk、hadoop、环境配置文件复制到其他机器上 ,其他机器上必须创建所需的文件夹

scp   -r    $pdir/$fname            $user@$host:$pdir/$fname
命令 递归    要拷贝的文件路径/名称   目的地用户@主机:目的地路径/名称
#下面是我将jdk、环境变量配置文件、hadoop 拷贝到cluster02上,同样的方式复制到其他机器上 
#注:拷贝到其他机器的环境变量配置文件需要激活一下 source /etc/profile 再通过 java -version 来验证是否激活
scp -r /opt/software/java/ root@cluster02:/opt/software/
scp -r /etc/profile.d/myenv.sh root@cluster02:/etc/profile.d/
scp -r /opt/software/hadoop313/ root@cluster02:/opt/software/

三、hadoop的集群配置
以上步骤配置完成,就需要进行集群配置了

1、集群的配置介绍
NameNode 和 SecondaryNameNode 不要安装在同一台服务器
ResourceManager 也很消耗内存,不要和 NameNode、SecondaryNameNode 配置在同一台机器上

 cluster01cluster02cluster03cluster04cluster05cluster06
HDFSNameNode SecondaryNameNode   
DataNodeDataNodeDataNodeDataNodeDataNodeDataNodeDataNode
YARN ResourceManager    
NodeManagerNodeManagerNodeManagerNodeManagerNodeManagerNodeManagerNodeManager

2、4个xml文件的配置
1、core-site.xml

<!-- 指定 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.29.151:8020</value>
</property>
<!-- 指定 hadoop 数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/software/hadoop313/data</value>
</property>
<!-- 配置 HDFS 网页登录使用的静态用户为 root -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>



2、hdfs-site.xml

<!-- nn web 端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>cluster01:9870</value>
</property>
<!-- 2nn web 端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>cluster03:9868</value>
</property>

3、yarn-site.xml

<!-- 指定 MR 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>cluster02</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>

4、mapred-site.xml

<!-- 指定 MapReduce 程序运行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

5、配置workers
配置workers,增加五个主机名
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行

vim /opt/software/hadoop313/etc/hadoop/workers
cluster01
cluster02
cluster03
cluster04
cluster05

将配置好的4个xml文件和workers文件覆盖到其他4个机器上去(同文件替换)

四、启动集群
1、NameNode初始化
#如果集群是第一次启动,需要在cluster01节点格式化 NameNode
[root@cluster01 hadoop313]# hdfs namenode -format
2、启动 HDFS、YARN
#启动 HDFS
[root@cluster01 hadoop313]# sbin/start-dfs.sh
#在配置了 ResourceManager 的节点(cluster02)启动 YARN
[root@cluster02 hadoop313]# sbin/start-yarn.sh

3、验证是否成功启动
Web 端查看 HDFS 的 NameNode
浏览器中输入:http://192.168.29.151:9870
查看 HDFS 上存储的数据信息

Web 端查看 YARN 的 ResourceManager
浏览器中输入:http://192.168.29.152:8088
查看 YARN 上运行的 Job 信息

以上界面如果能正常打开,恭喜你!集群搭建成功了!

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

kubernetes项目部署

目录 ​一、容器交付流程 二、k8s平台部署项目流程 三、在K8s平台部署项目 一、容器交付流程 容器交付流程通常分为四个阶&#xff1a;开发阶段、持续集成阶段、应用部署阶段和运维阶段。 开发阶段&#xff1a;开发应用程序&#xff0c;编写Dockerfile; 持续集成阶段&#…

很佩服的一个Google大佬,离职了。。

这两天&#xff0c;科技圈又有一个突发的爆款新闻相信不少同学都已经看到了。 那就是75岁的计算机科学家Geoffrey Hinton从谷歌离职了&#xff0c;从而引起了科技界的广泛关注和讨论。 而Hinton自己也证实了这一消息。 提到Geoffrey Hinton这个名字&#xff0c;对于一些了解过…

Spring Cloud学习笔记【分布式配置中心-Config】

文章目录 SpringCloud Config概述概述传统方式弊端主要功能与GitHub整合配置 Config服务端配置与测试服务端配置(即Gitee上的配置文件)Config Demo配置Spring Cloud Config访问规则 Config客户端配置与测试bootstrap.yml说明Config客户端 Demo配置 SpringCloud Config概述 概述…

无需公网IP 使用SSH远程连接Linux CentOS服务器【内网穿透】

文章目录 视频教程1. Linux CentOS安装cpolar2. 创建TCP隧道3. 随机地址公网远程连接4. 固定TCP地址5. 使用固定公网TCP地址SSH远程 本次教程我们来实现如何在外公网环境下&#xff0c;SSH远程连接家里/公司的Linux CentOS服务器&#xff0c;无需公网IP&#xff0c;也不需要设置…

深入理解Java虚拟机——垃圾收集器

1.前言 在前面我们已经说过了垃圾收集算法&#xff0c;那么现在我们要讲的垃圾收集器&#xff0c;实际上就是对垃圾收集算法的实践。 首先我们先看一张图&#xff0c;这张图可以帮助我们了解各款经典垃圾收集器之间的关系&#xff1a; 图中的垃圾收集器所在的区域代表了它是属…

【三十天精通Vue 3】第二十六天 Vue3 与 TypeScript 最佳实践

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3 文章目录 引言一、为什么使用TypeScript?二、Vue 3和TypeScript的基础2.1 安装TypeScript2.2 配置TypeScript2.3 Vue 3中使用TypeScript

Java多线程基础概述

简述多线程&#xff1a; 是指从软件或者硬件上实现多个线程并发执行的技术。 具有多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程&#xff0c;提升性能。 正式着手代码前&#xff0c;需要先理清4个概念&#xff1a;并发&#xff0c;并行&#xff0c;进程&#…

TinyJAMBU的制动原理——一种轻量化的认证密码

关于TinyJAMBU的定义和介绍在另一篇博文已经介绍过了&#xff0c;这里只对其动作原理进行描述和说明。 对应的博文链接如下&#xff1a;TinyJAMBU&#xff1a;一种轻量化密码介绍 首先&#xff0c;该密码是一个流密码体系的块密码框架。其加密模式整体上来看是块密码&#xff0…

让语言学习更简单的 WordFlow

作为一个英语并不是那么特别好的计算机专业学生&#xff0c;长期积累英语的学习对个人发展还是有意义的。简单来说&#xff0c;我在语言上最大的两个问题&#xff0c;一个自己「不理解」&#xff0c;另一个是自己「不会表达」。 上述两个问题主要体现在口语层面&#xff0c;而…

实验二 存储器管理

实验二 存储器管理 实验目的&#xff1a; 理解各类置换算法的原理和虚拟存储器管理的方法。 实验内容&#xff1a; 编程实现LRU算法或CLOCK/改进算法等置换算法&#xff08;二选一&#xff09;&#xff0c;模拟实现虚拟存储器的地址变换过程。 实验步骤&#xff1a; 1…

【Golang项目实战】用Go写一个学生信息管理系统,真的太酷啦| 保姆级详解,附源码——建议收藏

博主简介&#xff1a;努力学习的大一在校计算机专业学生&#xff0c;热爱学习和创作。目前在学习和分享&#xff1a;数据结构、Go&#xff0c;Java等相关知识。博主主页&#xff1a; 是瑶瑶子啦所属专栏: Go语言核心编程近期目标&#xff1a;写好专栏的每一篇文章 学习了Go的基…

图神经网络:在自定义数据集上动手实现图神经网络

文章说明&#xff1a; 1)参考资料&#xff1a;PYG官方文档。超链。 2)博主水平不高&#xff0c;如有错误还望批评指正。 文章目录 自定义数据集动手实现图神经网络自定义数据集训验测集拆分&#xff0c;创建Data的数据结构&#xff0c;观察Data的基本信息&#xff0c;可视化图网…

震惊,为了学会泛型类竟做这种事?!

上一节&#xff0c;我们基本学会了Java泛型类的用法。 传送门&#xff1a;彻底弄懂Java的泛型 - 泛型类 这一节&#xff0c;我们转变一下风格&#xff0c;具体是什么风格呢&#xff0c;你马上就懂了。 宝子们&#xff0c;欢迎大家来到我们的泛型直播间&#xff0c;这一讲呢&a…

Ansible的脚本-playbook 剧本

目录 1.剧本&#xff08;playbook&#xff09; 1.playbook介绍 2. playbooks 的组成 3.案例&#xff1a;编写httpd的playbook 4.定义、引用变量 5.指定远程主机sudo切换用户 6.when条件判断 7.迭代 2.playbook的模块 1.Templates 模块 2.tags 模块 3.Roles 模块 1.…

【Linux从入门到精通】vim的基本使用各种操作详解

文章目录 一、vim编辑器简单介绍 二、vim编辑器的四种模式 2、1 正常/普通/命令模式(Normal mode) 2、2 插入模式(Insert mode) 2、3 末行模式(last line mode) 三、命令模式的相关操作实例 3、1 光标的相关操作 3、2 文本操作 四、插入模式下的相关操作 五、末行模式下的相关操…

Java—JDK8新特性—函数式接口

目录 函数式接口 3.1 什么是函数式接口 3.2 functionalinterface注解 源码分析 3.3 Lambda表达式和函数式接口关系 3.4 使用函数式接口 函数式接口 3.1 什么是函数式接口 如果一个接口中只包含一个抽象方法&#xff0c;这个接口称为函数式接口 如果一个接口包含&#xff0…

K8S管理系统项目实战[API开发]-2

后端: gogin 后端代码地址GitHub - yunixiangfeng/k8s-platform: K8s管理系统后端: gogin 5、存储与配置 5.1 ConfigMap 5.2 Secret 5.3 PersistentVolumeClaims 6、工作流 6.1 流程设计 6.2 数据库操作&#xff08;GORM&#xff09; &#xff08;1&#xff09;初始化…

交换机-Exchanges

交换机 Exchanges 概念 RabbitMQ 消息传递模型的核心思想是: 生产者生产的消息从不会直接发送到队列。实际上&#xff0c;通常生产者甚至都不知道这些消息传递传递到了哪些队列中。相反&#xff0c;生产者只能将消息发送到交换机(exchange)&#xff0c;交换机工作的内容非常简…

正则表达式-基本元字符和语法规则

© Ptw-cwl 文章目录 字符匹配元字符.元字符[]元字符[^]元字符*元字符元字符?元字符{}元字符|元字符()元字符^元字符$元字符\元字符\d元字符\w元字符\s元字符\b元字符\B元字符*?、?、??、{n,m}?元字符(?)、(?!)元字符(?:)元字符\1、\2等元字符^、$元字符&#x…

JavaSE基础(二)—— 类型转换、运算符、键盘录入

目录 一、类型转换 1. 自动类型转换 1.1 自动类型转换的底层原理&#xff1a; ​1.2 自动类型转换的其他形式​编辑 2. 表达式的自动类型转换 3. 强制类型转换 3.1 强制类型转换底层原理​编辑 3.2 注意事项 二、运算符 1. 算数运算符 1.1 案例&#xff1a;数值拆分…
最新文章