【李老师云计算】实验二:Spark集群的搭建与求解最大值

news2024/12/24 9:28:01

索引

    • 前言
    • 1. Spark部署
      • 1.1 下载Spark
      • 1.2 解压Spark
      • 1.3 修改环境变量
      • 1.4 修改主机Spark配置文件
        • 1.4.1 slaves.template文件配置
        • 1.4.2 spark-env.sh.template文件配置
      • 1.5 分享主机Spark到从机
      • 1.6 启动Spark集群(★重启后的操作)
      • 1.7 通过jps查看是否启动成功
      • 1.8 通过网页查看是否启动成功
    • 2. Scala Maven项目访问Spark(local模式)100个随机数求最大值
      • 2.1 下载Scala IDE
      • 2.2 解压Scala IDE
      • 2.3 下载Scala(主机+从机)
      • 2.4 添加环境变量(主机+从机)
      • 2.5 创建Scala项目
      • 2.6 配置Scala项目
        • 2.6.1 设置Maven
        • 2.6.2 pom.xml添加依赖
        • 2.6.3 设置Scala Complier
        • 2.6.4 添加Spark的jar包
      • 2.7 创建代码(Object)
        • 2.7.1 Random
        • 2.7.2 Max
      • 2.8 运行程序
      • 2.9 ★解决内存问题、其他问题

前言

直接进入正题吧。

带★的是可能遇到的问题可以看一下,以防后续操作出问题。

内容可能来自博主自己手搓、吸取同学的经验、网络上内容的整合等等,仅供参考,更多内容可以查看大三下速通指南专栏。

1. Spark部署

有了前几次的经验这次就简单一点了。

1.1 下载Spark

直接在官网下载的spark-2.4.0,注意是下载这个153M的压缩包。

image-20230423151815371

1.2 解压Spark

首先把压缩包放到/usr/local目录下

然后依次执行下面的指令(在哪里打开终端都行):

  1. cd /usr/local
  2. tar -zxvf spark-2.4.0-bin-without-hadoop.tgz
  3. mv spark-2.4.0-bin-without-hadoop spark
  4. chown -R root:root spark

此时你的/usr/local目录下就有spark目录了。

image-20230423152227131

1.3 修改环境变量

首先vi /etc/profile,在文件的末尾加入以下内容:

export SPARK_HOME=/usr/local/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
export JAVA_LIBRARY_PATH=/user/hadoop/hadoop-3.3.1/lib/native

第三行是Hadoop路径/lib/native,根据自己的调整!

:wq保存后关闭,之后使用指令source /etc/profile刷新一下。

1.4 修改主机Spark配置文件

配置文件的路径是/usr/local/spark/conf

1.4.1 slaves.template文件配置

cd /usr/local/spark/conf 进入配置文件目录

cp slaves.template slaves 将文件重命名为slaves

vi slaves 进入修改文件,后面添加上两个从机的主机名(根据自己的改!)

vmware_TdLdsEJgzH.png

1.4.2 spark-env.sh.template文件配置

这里一定要仔细修改!大部分问题都出自这里。

cp spark-env.sh.template spark-env.sh 重命名为spark-env.sh

vi spark-env.sh 进入修改文件,在文件末尾添加以下内容:

export SPARK_DIST_CLASSPATH=$(/user/hadoop/hadoop-3.3.1/bin/hadoop classpath)
export HADOOP_CONF_DIR=/user/hadoop/hadoop-3.3.1/etc/hadoop
export SPARK_MASTER_IP= master60
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b08-1.el7_9.x86_64
export HADOOP_HOME=/user/hadoop/hadoop-3.3.1
export SPARK_WORKER_MEMORY=1024m
export SPARK_WORKER_CORES=1

其中第1、2、5行是修改Hadoop的路径;第3行修改主机的主机名;第4行是JDK的路径;第6、7行不需要改。

如果忘了在哪里可以看一下自己的~/.bashrc或者/etc/profile文件之前配置过的。

1.5 分享主机Spark到从机

在主机依次进行以下操作:

  1. cd /usr/local
  2. tar -zcf spark.master.tar.gz spark
  3. scp spark.master.tar.gz slave1-60:/usr/local/spark.master.tar.gz(修改为从机1的主机名)
  4. scp spark.master.tar.gz slave2-60:/usr/local/spark.master.tar.gz(修改为从机2的主机名)

在两个从机依次执行以下操作(两台从机都执行依次!):

  1. cd /usr/local
  2. tar -zxf spark.master.tar.gz
  3. chown -R root /usr/local/spark

1.6 启动Spark集群(★重启后的操作)

在主机使用下面两个指令即可:

  1. /user/hadoop/hadoop-3.3.1/sbin/start-all.sh(启动Hadoop)
  2. /usr/local/spark/sbin/start-all.sh(启动Spark)

注意路径!注意路径!注意路径!Hadoop路径可能与我的不同。

这里就会出现问题,Spark和Hadoop都有start-all.sh的指令并且都被写到了环境变量中,你直接使用start-all.sh大概率是会用Spark的指令。为了避免这种不必要的误会,之后再重启请使用完整的路径来start-all.sh

并且这次实验与上一次没关系,不需要打开Zookeeper以及HBase。

1.7 通过jps查看是否启动成功

在主机上jps可以看到至少以下两个进程:

image-20230423154759882

在从机上jps可以看到至少以下两个进程:

image-20230423154747912

1.8 通过网页查看是否启动成功

浏览器打开主机的主机名或IP:8080

image-20230423155109135

打不开就把三台虚拟机重启之后按照1.6操作一遍。

再查看一下spark-shell,退出的指令是:quit:的!!!,如果不正常退出,之后再启动可能也打不开4040端口。

image-20230423160627595

再看一下4040端口,注意需要运行spark-shell才能进入,上图也可以看的出来再使用了spark-shell之后才开启了这个端口。

连接失败是因为没开spark-shell

一直加载打不开,可能是因为强制关闭了spark-shell,虚拟机重开再打开服务可以解决。

image-20230423155425112

2. Scala Maven项目访问Spark(local模式)100个随机数求最大值

19级是单词计数,感兴趣可以看一下涛哥的博客。

2.1 下载Scala IDE

直接下载,点了之后就下载了。

2.2 解压Scala IDE

拖到usr/local

image-20230423162129252

终端通过指令解压一下:tar -zxvf scala-SDK-4.7.0-vfinal-2.12-linux.gtk.x86_64.tar.gz

解压出来的是一个eclipse目录,

之后的编程是通过这个目录中的eclipse!不要用桌面上的!

image-20230423162820439

2.3 下载Scala(主机+从机)

注意确保Spark版本是2.4.0(前面下载的就是)

直接依次执行以下操作:

  1. cd /usr/local
  2. wget https://downloads.lightbend.com/scala/2.11.8/scala-2.11.8.tgz
  3. tar -zxvf scala-2.11.8.tgz
  4. mv scala-2.11.8 scala

image-20230423163340756

2.4 添加环境变量(主机+从机)

vi /etc/profile 进入文件在末尾添加以下内容:

export SCALA_HOME=/usr/local/scala
export PATH=$PATH:$SCALA_HOME/bin

然后source /etc/profile刷新一下。

在终端输入scala看一下是否配置成功,:quit退出。

image.png

注意!Scala主机从机都需要下载,也就是2.3、2.4三台虚拟机都要操作。

2.5 创建Scala项目

打开Scala IDE

image.png

创建一个Scala项目,

image.png

随便起了个名,无所谓的,

image.png

右键项目 ->Configure ->Convert to Maven Project

image-20230423165244523

没改直接下一步了,后面还可以在pom.xml里改,

image-20230423165430001

2.6 配置Scala项目

如果找不到类什么的错误可以重新创建一个项目,从2.6.2继续即可。2.6.1配置之后不会自动变化了。

2.6.1 设置Maven

两个地方要改。

点击Window -> Preferences -> Maven -> Installations

image.png

添加了以后记得选上,

image.png

点击Window -> Preferences -> Maven -> User Settings

vmware_9SI6iC7MSj.png

2.6.2 pom.xml添加依赖

打开pom.xml,添加以下内容:

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>2.4.0</version>
        </dependency>
    </dependencies>

image-20230423171830306

2.6.3 设置Scala Complier

右键项目,打开Properties

image-20230423172111942

按照下图选择Scala Compiler然后确认,

image-20230423172212617

2.6.4 添加Spark的jar包

右键项目 ->Build Path ->Configure Build Path

上次做过这个,直接添加就行了,

vmware_6rVECoIL55.png

添加的路径是/usr/local/spark/jars,直接ctrl+A全选添加就可以。

vmware_dLUUvt4C1r.png

2.7 创建代码(Object)

右键src -> new ->Scala Object,名字随便起。两个代码一个Random一个Max。
image-20230423165807424

2.7.1 Random

把主机名全改了!
Random代码如下,这个是生成50个1到10000之间随机数,并保存到HDFS下面的/tmp/maxnumber/word_060.txt(根据自己学号改)

import org.apache.spark.{SparkConf, SparkContext}

object Random{
  def main(args: Array[String]) {
    val conf = new SparkConf().setAppName("Random").setMaster("local")
    val sc = new SparkContext(conf)

    val randoms = sc.parallelize(Seq.fill(100)(scala.util.Random.nextInt()))
    println(s"The maximum number is: $max")
	
	randoms.collect().foreach(println)
   
    val outputPath = "hdfs://192.168.64.60:9000/tmp/maxnumber"
    randoms.saveAsTextFile(outputPath + "/word_060.txt")

    sc.stop()
  }
}

2.7.2 Max

Max代码如下,这个是读取word_060.txt文件然后找最大值输出到/tmp/maxnumber/max(无所谓自己改)

import org.apache.spark.{SparkConf, SparkContext}

object Max{
  def main(args: Array[String]) {
    val conf = new SparkConf().setAppName("Max").setMaster("local")
    val sc = new SparkContext(conf)

    val filePath = "hdfs://192.168.64.60:9000/tmp/maxnumber/word_060.txt"
    val max = sc.textFile(filePath)
                   .map(_.toInt)
                   .cache()
                   .max()

    println(s"The maximum number is: $max")

    val outputPath = "hdfs://192.168.64.60:9000/tmp/maxnumber/max"
    sc.parallelize(Seq(max)).saveAsTextFile(outputPath)

    sc.stop()
  }
}

2.8 运行程序

……卡的要命,我又多分配了点运存之后才好一点。

Run As ->Scala Application
先运行Random生成随机数输出到控制台,并且保存。
image.png
运行成功之后,再运行第二个Max程序。

打开9870端口的网页,打开HDFS的目录

image.png

进去以后打开tmp文件,

image.png

进入到tmp/maxnumber看一下,
在这里插入图片描述

具体怎么看用max演示一下,
在这里插入图片描述

OK!到此结束。

2.9 ★解决内存问题、其他问题

如果运行报错内存什么什么玩意,

Run ConfigurationsArgumentsVM arguments里添加一句:

-Xmx512m

image.png

或者是给虚拟机多分配点内存……大概。

其他问题一般重启虚拟机然后重开Hadoop以及Spark就行了。

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

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

相关文章

Vue+Echarts 项目演练(上)整体页面结构的构建

项目分辨率响应式创建 项目顶部信息条创建 页面主体创建 接项目搭建与初始化之后继续对项目进行部署工作 项目展示&#xff1a; 技术栈&#xff1a; 1. vue3.0vue-router4.0axios 2. flex 布局 3. LESS 4. rem 屏幕适配 5. echarts5.0 项目分辨率响应式创建 对插件…

centos 8 配置LVS+ keepalived 高可用

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a;小刘主页 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有收获&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的绽放&#xff0…

3105—IIS部署

一、部署子站点 1—父站点web.config配置 新增并设定location段落 <configuration><location path"." allowOverride"false" inheritInChildApplications"false"><system.webServer><handlers><add name"aspNe…

【Matlab】基于紧格式动态线性化的无模型自适应控制

例题来源&#xff1a;侯忠生教授的《无模型自适应控制&#xff1a;理论与应用》&#xff08;2013年科学出版社&#xff09;。 对应书本 4.2 单输入单输出系统(SISO)紧格式动态线性化(CFDL)的无模型自适应控制(MFAC) 例题4.1 题目要求 matlab代码 clc; clear all;%% 期望轨迹…

neo4j jdk安装版本搭配

jdk下载版本为jdk11 neo4j 为neo4j-community-4.3.15 可使用 非常流畅 没有毛病&#xff01;&#xff01;&#xff01; 这里直接给出结论&#xff0c;对于想知道这两个版本为什么适配的小伙伴可以继续往下看 出现这个界面后在网页打开browser 输入账号和密码后就可以登录了&…

【架构设计】什么是CAP理论?

1、理论 CAP理论是指计算机分布式系统的三个核心特性&#xff1a;一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;和分区容错性&#xff08;Partition Tolerance&#xff09;。 在CAP理论中&#xff0c;一致性指的是多个节点上的数据…

Vector - CAPL - CANoe硬件配置函数 - 01

CAN ACK自应答 在测试CAN&CANFD通信或者网络管理的时候&#xff0c;我们经常遇到使用报文&#xff08;网络管理报文或者通信报文&#xff09;唤醒被测件这个测试点&#xff0c;如果测试比较多的情况下&#xff0c;我们就会发现&#xff0c;如果CANoe没有接被测件或者被测件…

Python标准数据类型-Number(数字)

✅作者简介&#xff1a;CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1 &#x1f4c3;个人主页&#xff1a;hacker707的csdn博客 &#x1f525;系列专栏&#xff1a;零基础入门篇 &#x1f4ac;个人格言&#xff1a;不断的翻越一座又一座的高山…

《Java集合》ConcurrentSkipListMap

目录 数据结构findPredecessordoGetdoRemovedoPut新值插入底层创建新值的索引连接索引 数据结构 java源码中对ConcurrentSkipListMap的描述如下&#xff1a; 图中&#xff0c;第0层为具体的数据&#xff0c;第1层的每一个node都有两个子node&#xff0c;一个指向同层的右边&am…

kong(3):动态负载均衡实现

nginx下负载均衡配置 upstream tulingmall-product-upstream {server 192.168.65.190:8866 weight100;server 192.168.65.190:8867 weight100; } server {listen 80;location /pms/ {proxy_pass http://tulingmall-product-upstream;} } 通过 Kong Admin API 进行上述的负载均…

srm采购管理系统有那些功能

srm采购管理系统&#xff0c;是通过系统的手段对采购过程进行管理和控制&#xff0c;实现降低成本、提高效益、提高企业核心竞争力的目的。那么 srm采购管理系统有哪些功能呢&#xff1f; 计划管理 srm采购管理系统提供了各种物料需求计划的功能&#xff0c;以帮助企业制定并控…

前端项目实战:网易云静态页面——导航栏

文章目录 一、实现目标二、顶部实现&#xff08;背景为黑色部分&#xff09;1. 内容布局2. 左边部分网易云logo左边的列表列表元素高亮指向每个列表元素的小红色三角“下载客户端”后的hot标志 3. 右边部分登陆创作者中心搜索 三、底部实现&#xff08;背景为红色部分&#xff…

Echarts 项目演练(上)整体页面结构的构建

项目分辨率响应式创建 项目顶部信息条创建 页面主体创建 接项目搭建与初始化之后继续对项目进行部署工作 项目展示&#xff1a; 技术栈&#xff1a; 1. vue3.0vue-router4.0axios 2. flex 布局 3. LESS 4. rem 屏幕适配 5. echarts5.0 项目分辨率响应式创建 对插件…

arduino esp-01s开发环境配置(备忘)

很久没玩arduion了&#xff0c;前天一个网友提了一个问题要我帮忙&#xff0c;结果电脑重新做了系统&#xff0c;又要重新设置环境&#xff0c;结果忘记了&#xff0c;做个备忘&#xff0c;省得以后又要重新研究。 1、附加开发板管理器网址&#xff1a;http://arduino.esp8266…

L1-002 打印沙漏

L1-002 打印沙漏 分数 20 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”&#xff0c;要求按下列格式打印 ************ *****所谓“沙漏形状”&#xff0c;是指每行输出奇数个符号&#xff1b;各行符号中…

机器学习——为什么逻辑斯特回归(logistic regression)是线性模型

问&#xff1a;逻辑斯蒂回归是一种典型的线性回归模型。 答&#xff1a;正确。逻辑斯蒂回归是一种典型的线性回归模型。它通过将线性回归模型的输出结果映射到[0,1]区间内&#xff0c;表示某个事物发生的概率&#xff0c;从而适用于二分类问题。具体地说&#xff0c;它使用sig…

Flink CDC 在易车的应用实践

摘要&#xff1a;本文整理自易车数据平台负责人王林红&#xff0c;在 Flink Forward Asia 2022 数据集成专场的分享。本篇内容主要分为四个部分&#xff1a; Flink 应用场景DTS 平台建设Flink CDC Hudi 应用实践未来规划 点击查看直播回放和演讲 PPT 一、Flink 应用场景 Flink…

Mybatis-Plus详解(新建maven项目、查询所有信息、打印SQL日志、实现CRUD(增删改查)、分页、条件查询且分页,前后端分离式开发)

Mybatis-Plus详解(新建maven项目、查询所有信息、打印SQL日志、实现CRUD(增删改查)、分页、条件查询且分页&#xff0c;前后端分离式开发) MyBatis-Plus(opens new window) (简称MP) 是一个MyBatis(opens new window)的增强工具&#xff0c;在MyBatis的基础上只做增强不做改变…

【牛客网】最难的问题与因子个数

目录 一、编程题 1.最难的问题 2.因子个数 一、编程题 1.最难的问题 链接&#xff1a;最难的问题__牛客网 (nowcoder.com) NowCoder生活在充满危险和阴谋的年代。为了生存&#xff0c;他首次发明了密码&#xff0c;用于军队的消息传递。假设你是军团中的一名军官&#xff…

Linux网络服务之yum仓库

目录 一、yum仓库简介二. ftp搭建yum源三. 搭建国内在线源四. 本地源和在线yum同时使用五. 通过缓存的方式保存所下载的软件包六 . 制作yum仓库 一、yum仓库简介 yum是一个基于RPM包&#xff08;是Red-Hat Package Manager红帽软件包管理器的缩写&#xff09;构建的软件更新机…