Spark Standalone模式部署

准备至少2台虚拟机,装好linux系统,我装的是Ubuntu20.04。

1.修改主机名(每台)

1)修改/etc/hostsname内容,主节点改为master,子节点改为slaver1

        sudo vim /etc/hostname

2)在/etc/hosts中修改各个节点的IP与主机名的对应:

        sudo vim /etc/hosts

修改如下:
        192.168.50.193 master
        192.168.50.40 slave1

2.配置ssh免密码登录(每台)

2.1 安装ssh,并启动       

sudo apt-get install openssh-server
sudo /etc/init.d/ssh start

2.2 检查是否正确启动

 ps -e | grep ssh

2.3 配置免密码登录

为了能够无密码登录本地localhost,需要生成SSH密钥并配置免密码登录。

1 )生成密钥对:

ssh-keygen -t rsa -P ""  //-t 指定生成RSA类型的密钥以及管理密钥

一直回车,会在/root/.ssh/文件夹下生成id_rsa id_rsa.pub
        id_rsa         —— 私有密钥
        id_rsa.pub  —— 公有密钥

2) 把id_rsa.pub追加到authorized_key里面去

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

3)修改/etc/ssh/sshd_config 文件,使得本机允许远程连接 

RSAAuthentication yes 
PubkeyAuthentication yes 
AuthorizedKeysFile %h/.ssh/authorized_keys
PermitRootLogin yes

4)重启ssh 

        service ssh restart

5)修改权限:
        chmod 600 ~/.ssh/authorized_keys
        chmod 700 ~/.ssh

2.3 pub复制

2.3.1 把master里的pub复制到slave1。
scp /home/wang/.ssh/id_rsa.pub slave1@slave1:/home/slave1/.ssh/id_rsa.pub_sl 
2.3.2 传过来的公钥追加到authorized_keys

在slave1中转到.ssh路径下,执行如下命令

cat id_rsa.pub_sl >> authorized_keys

2.3.3  在master验证ssh

        ssh slave1@slave1

3.Hadoop安装(每台)

3.1 下载hadoop-3.3.6

http://https://archive.apache.org/dist/hadoop/common/hadoop-3.3.6/

3.2 安装

将下载好的安装包拷贝到虚拟机,在其所属目录下打开终端,执行如下代码:

sudo tar -xzf hadoop-3.3.6.tar.gz -C /usr/local/

3.3 配置

3.3.1 修改core-site.xml
<configuration><property><name>hadoop.tmp.dir</name><value>file:/usr/local/hadoop-3.3.6/tmp</value><description>Abase for other temporary directories.</description></property><property><name>fs.defaultFS</name><value>hdfs://master:9000</value></property>
</configuration>
3.3.2 修改 hdfs-site.xml
<configuration><property><name>dfs.replication</name><value>3</value></property><property><name>dfs.namenode.name.dir</name><value>file:/usr/local/hadoop-3.3.6/tmp/dfs/name</value></property><property><name>dfs.datanode.data.dir</name><value>file:/usr/local/hadoop-3.3.6/tmp/dfs/data</value></property><property><name>dfs.namenode.secondary.http-address</name><value>master:50090</value></property>
</configuration>
3.3.3 修改 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><property><name>yarn.app.mapreduce.am.env</name><value>HADOOP_MAPRED_HOME=/usr/local/hadoop-3.3.6</value></property><property><name>mapreduce.map.env</name><value>HADOOP_MAPRED_HOME=/usr/local/hadoop-3.3.6</value></property><property><name>mapreduce.reduce.env</name><value>HADOOP_MAPRED_HOME=/usr/local/hadoop-3.3.6</value></property> 
</configuration>
3.3.4 修改yarn-site.xml
<configuration><property><name>yarn.resourcemanager.hostname</name><value>master</value></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property>
</configuration>
3.3.5 修改workers
vim /usr/local/hadoop-3.3.6/etc/hadoop/workers

改为如下内容

master
slave1
 3.3.6 分发 

把Master节点上的“/usr/local/hadoop-3.3.6”文件夹复制到各个节点上。如果之前已经运行过伪分布式模式,建议在切换到集群模式之前首先删除之前在伪分布式模式下生成的临时文件。

master节点上:

cd /usr/local
sudo rm -r ./hadoop-3.3.6/tmp     # 删除 Hadoop 临时文件
sudo rm -r ./hadoop-3.3.6/logs/*   # 删除日志文件
tar -zcf ~/hadoop_master.tar.gz ./hadoop-3.3.6   # 先压缩再复制
scp ~/hadoop_master.tar.gz slave1:/tmp

slave1节点上执行 :

sudo rm -r /usr/local/hadoop    # 删掉旧的(如果存在)
sudo tar -zxf /tmp/hadoop_master.tar.gz -C /usr/local
sudo chown -R slave1 /usr/local/hadoop-3.3.6
3.3.7 格式化

 在master节点执行名称节点的格式化(只需要执行这一次,后面再启动Hadoop时,不要再次格式化名称节点)

cd /usr/local/hadoop-3.3.6/bin
./hdfs namenode -format
3.3.8 启动Hadoop 
cd /usr/local/hadoop-3.3.6/sbin
./start-all.sh

在master,slave1分别输入jps,查看节点启动情况

mater

slave1

 

 在浏览器输入master:9870,查看启动情况

4.Java环境搭建(每台)

4.1 安装jdk

更新Ubuntu软件包,安装default-jdk

sudo apt update
sudo apt install default-jdk

查看java版本

java -version


4.2 配置环境变量

编辑.bashrc文件

vim ~/.bashrc

配置Hadoop和Java的环境变量

export JAVA_HOME=/usr/lib/jvm/default-java
export HADOOP_HOME=/usr/local/hadoop-3.3.6
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME

是配置文件生效,查看hadoop版本号 

source ./.bashrc
hadoop version

 


 

5.Spark安装(master)

5.1下载spark-3.3.0

在Linux上的浏览器直接下载spark-3.3.0,下载地址如下:

https://archive.apache.org/dist/spark/spark-3.3.0/spark-3.3.0-bin-hadoop3.tgz

转到文件所在路径执行解压

sudo tar -xzf spark-3.3.0-bin-hadoop3.tgz -C /usr/local/

5.2 配置Spark环境变量

vim ~/.bashrc

在最后一行添加如下内容: 

export SPARK_HOME=/usr/local/spark-3.3.0-bin-hadoop3
export PATH=$JAVA_HOME/bin:$SPARK_HOME/bin:$SPARK_HOME/sbin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
source ./.bashrc

5.3 修改配置文件

进入spark conf目录:

cd /usr/local/spark-3.3.0-bin-hadoop3/conf

拷贝模板文件:

cp spark-defaults.conf.template spark-defaults.conf
cp spark-env.sh.template spark-env.sh
cp workers.template workers
5.3.1 修改spark-defaults.conf

1). 进入spark-defaults.conf文件:

vim spark-defaults.conf

2). 添加如下内容:

spark.master spark://master:7077
spark.serializer org.apache.spark.serializer.KryoSerializer
spark.driver.memory 1g
spark.executor.memory 1g
5.3.2 修改spark-env.sh

1). 进入spark-env.sh文件:

vim spark-env.sh

2). 添加如下内容:

export JAVA_HOME=/usr/lib/jvm/default-java
export HADOOP_HOME=/usr/local/hadoop-3.3.6
export HADOOP_CONF_DIR=/usr/local/hadoop-3.3.6/etc/hadoop
export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop-3.3.6/bin/hadoop classpath)
export SPARK_MASTER_HOST=master
export SPARK_MASTER_PORT=7077
 5.3.3 修改workders文件

1)  进入workers文件:

vim workers

2) 删除localhost后,添加如下内容:

master
slave1

3) 分发spark目录到其他节点

cd /usr/local/ 
scp -r ./spark-3.3.0-bin-hadoop3 slave1@slave1:/usr/local/ 

6.启动

# 切换到 standalone 模式的安装目录下
cd /usr/local/spark-3.3.0-bin-hadoop3
# 启动
sbin/start-all.sh 

 启动成功后,在浏览器输入http://192.168.50.193:8080/,查看运行情况,注意这里的IP是master节点的IP。

standalone 模式部署完成。

7. 遇到的问题及解决

 7.1 分发节点时,出现Permission denied

scp: /usr/local/spark-3.3.0-bin-hadoop3: Permission denied

方法1、修改本地文件夹,sudo chmod 777 + 文件夹名字,测试是否可行。
方法2、目标主机上创建该文件夹,然后将下层文件传过去,或者文件夹整个传过去再去一层文件夹。
方法3:scp到目标主机的/tmp,然后用mv移动到你想放的位置。

解决办法参考:scp: /usr/local/hadoop: Permission denied问题解决_scp: /home/hadoop/hadoop.master.tar.gz: permission-CSDN博客

  7.2 节点用户名不一致,启动失败问题

在启动spark时,出现如下问题。

master的用户名是wang,子节点的用户名是slave1,在启动时默认使用了master的用户名,导致启动失败,实际应该是slave1@slave1。 

解决:在master主机上修改(或者是创建) ~/.ssh/config文件,输入如下内容
        Host slave1
        user slave1

有多个节点,都需要配置。

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

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

相关文章

如何通过外发文件控制,保障企业对核心业务数据的控制力?

外发文件控制是企业数据安全管理的重要组成部分&#xff0c;它涉及到对从企业内网向外发送的文件进行严格控制和管理&#xff0c;以防止敏感或机密信息的泄露。以下是常见的一些外发手段及问题&#xff1a; &#xff08;1&#xff09;IM通讯工具 如微信、QQ、企业微信、钉钉、…

如何通过文件外发管理系统,保护企业机密数据不外泄?

在互联网时代&#xff0c;企业与外界进行频繁的信息沟通已成为必要的一种业务模式&#xff0c;而在交互的过程中很可能会涉及到企业的相关敏感信息&#xff0c;一旦不慎流出就将会面临失控的风险。像员工在掌握了公司的关键信息后另起炉灶&#xff0c;设立同类型公司&#xff0…

每个开发人员都应该知道的13个Nodejs库

Node.js&#xff0c;作为一种广受推崇的后端JavaScript环境&#xff0c;已成为众多网络开发者的首选。它不仅位列全球最流行编程语言之一&#xff0c;还通过JavaScript库的代码复用功能&#xff0c;极大地提升了项目开发效率。然而&#xff0c;面对众多选项&#xff0c;挑选合适…

ArrayList与顺序表(2)

前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; hellohello~&#xff0c;大家好&#x1f495;&#x1f495;&#xff0c;这里是E绵绵呀✋✋ &#xff0c;如果觉得这篇文章还不错的话还请点赞❤️❤️收藏&#x1f49e; &#x1f49e; 关注&#x1f4a5;&#x1…

归并排序精讲

一.定义 归并排序&#xff08;Merge sort&#xff09;是建立在归并操作上的一种有效的排序算法&#xff0c;该算法是采用分治法&#xff08;Divide and Conquer&#xff09;的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先使每个子…

C++ 虚表起源

本文会让看不见 摸不着的虚表(Vtable),虚指针(Vptr)彻底现行 本文涉及思想: C 面向对象 封装 继承 多态 中的 多态 概念解释: 虚表指针&#xff1a; 这是指向虚表&#xff08;vtable&#xff09;的指针&#xff0c;虚表中包含了该类的所有虚函数对应的地址。 虚表&#x…

外贸客户开发有用的软件

外贸客户开发过程中&#xff0c;选择合适的软件工具能够显著提升效率和效果。以下是一些对外贸客户开发非常有用的软件&#xff1a; CRM系统&#xff1a; Salesforce&#xff1a;全球领先的CRM平台&#xff0c;提供强大的客户关系管理、市场分析、销售自动化等功能&#xff0c;…

vue基础语法学习

Object.defineProperty方法的使用 // 这是一个普通的对象 let phone {} // 给这个phone新增一个属性 三个参数&#xff1a;新增属性的对象&#xff0c;新增啥属性&#xff0c;属性值&#xff0c;key value对 Object.defineProperty(phone,color,{value:太空灰, //设置属性值wr…

Axure糖尿病健康管理APP原型 (知识科普/病友社区/远程医生会诊/购物商城/血糖监测/饮食监测)

作品概况 页面数量&#xff1a;共 50 页 源文件格式&#xff1a;rp格式&#xff0c;兼容 Axure RP 9/10&#xff0c;非程序软件无源代码 应用领域&#xff1a;医疗健康、慢病管理、糖尿病管理 作品特色 本作品为Axure糖尿病健康管理APP端原型图&#xff0c;设计规范内容清晰…

深度解读《深度探索C++对象模型》之C++虚函数实现分析(一)

目录 成员函数种类 虚函数的实现 单一继承下的虚函数 接下来我将持续更新“深度解读《深度探索C对象模型》”系列&#xff0c;敬请期待&#xff0c;欢迎关注&#xff01;也可以关注公众号&#xff1a;iShare爱分享&#xff0c;或文章末尾扫描二维码&#xff0c;自动获得推文…

邮件接口的安全性如何保障?如何有效使用?

邮件接口故障时如何处理&#xff1f;怎么设置和配置邮件接口&#xff1f; 邮件接口作为企业内外部沟通的重要桥梁&#xff0c;其安全性显得尤为重要。那么&#xff0c;邮件接口的安全问题如何保障。AokSend将深入探讨如何保障邮件接口的安全性&#xff0c;确保企业信息的安全传…

什么是仪器校准报告?

在科学实验和工业生产中&#xff0c;仪器是一种非常重要的辅助工具&#xff0c;无论是测量数据、控制实验进程还是保证产品质量&#xff0c;仪器都发挥着至关重要的作用。为了确保仪器的准确性和稳定性&#xff0c;仪器校准报告这一概念应运而生。本文给大家详细介绍仪器校准报…

科研基础与工具(论文写作)

免责申明&#xff1a; 本文内容只是学习笔记&#xff0c;不代表个人观点&#xff0c;希望各位看官自行甄别 参考文献 科研基础与工具&#xff08;YouTube&#xff09; 学术写作句型 Academic Phrase bank 曼彻斯特大学维护的一个网站 写论文的时候&#xff0c;不不知道怎么…

简单使用Web3.js

随着区块链技术的快速发展&#xff0c;以太坊&#xff08;Ethereum&#xff09;作为其中的佼佼者&#xff0c;为开发者们提供了一个构建去中心化应用的强大平台。为了更轻松地与以太坊区块链进行交互&#xff0c;我们需要一个强大的工具&#xff0c;而Web3.js正是这样一个工具。…

【Linux】IO多路转接技术Epoll的使用

【Linux】IO多路转接技术Epoll的使用 文章目录 【Linux】IO多路转接技术Epoll的使用前言正文接口介绍工作原理LT模式与ET模式边缘触发&#xff08;ET&#xff09;水平触发&#xff08;LT&#xff09; 理解ET模式和非阻塞文件描述符ET模式epoll实现TCP服务器简单地封装epoll系统…

【软件测试】认识测试|测试岗位|软件测试和开发的区别|优秀的测试人员需要具备的素质

一、什么是测试 测试在⽣活中处处可⻅ 1.生活中的测试场景 案例⼀&#xff1a;对某款购物软件进⾏测试 *启动测试&#xff1a;点击软件图标&#xff0c;测试软件是否可以正常打开 搜索测试&#xff1a;点击输入框&#xff0c;输入关键词&#xff0c;点击搜索 商品测试&#…

【数据结构】图论(图的储存方式,图的遍历算法DFS和BFS、图的遍历算法的应用、图的连通性问题)

目录 图论一、 图的基本概念和术语二、图的存储结构1. 数组(邻接矩阵)存储表示无向图的数组(邻接矩阵)存储表示有向图的数组(邻接矩阵)存储表示 邻接表存储表示有向图的十字链表存储表示无向图的邻接多重表存储表示 三、图的遍历算法图的遍历——深度优先搜索&#xff08;DFS&a…

.net core webapi 添加日志管理看板LogDashboard

.net core webapi 添加日志管理看板LogDashboard 添加权限管理&#xff1a; 我们用的是Nlog文件来配置 <?xml version"1.0" encoding"utf-8" ?> <nlog xmlns"http://www.nlog-project.org/schemas/NLog.xsd"xmlns:xsi"http:/…

软考高项(已通过,E类人才)-学习笔记材料梳理汇总

软考高项&#xff0c;即软考高级信息系统项目管理师&#xff0c;全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试中的高级水平测试。适用于从事计算机应用技术、软件、网络、信息系统和信息服务等领域的专业人员&#xff0c;以及各级企业管理人员和从事项目…

Netty学习——实战篇7 ProtoBuf实战-多类型数据

1 需求&#xff1a; 1、客户端可以随机发送Student POJO 、Worker POJO 对象到服务器(通过protobuf编码) 2、服务端能接收 Student POJO 、Worker POJO 对象(需要判断是哪种类型)&#xff0c;并显示信息(通过ProtoBuf解码) 2 开发 2.1 编写proto文件 MyDate.proto syntax &…