【李老师云计算】Spark配置及Scala实现100个随机数找最大值

news2024/11/21 1:44:19

索引

    • 前言
    • 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 Object代码
        • 2.6.2 pom.xml添加依赖
        • 2.6.3 设置Scala Complier
        • 2.6.4 设置Maven
        • 2.6.5 添加Spark的jar包
      • 2.7 运行程序
      • 2.8 ★解决内存问题、其他问题

前言

直接进入正题吧。

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

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

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

然后右键src -> new ->Scala Object,名字随便起。

image-20230423165807424

2.6 完成Scala项目(最大值)

2.6.1 Object代码

把主机名全改了!

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

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

    val randoms = sc.parallelize(Seq.fill(100)(scala.util.Random.nextInt()))
    val max = randoms.max()

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

    // 将随机数和最大值保存到 HDFS 目录
    val outputPath = "hdfs://192.168.64.60:9000/tmp/maxnumber"
    randoms.saveAsTextFile(outputPath + "/randoms")
    sc.parallelize(Seq(max)).saveAsTextFile(outputPath + "/max")

    sc.stop()
  }
}

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 设置Maven

两个地方要改。

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

image.png

添加了以后记得选上,

image.png

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

vmware_9SI6iC7MSj.png

2.6.5 添加Spark的jar包

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

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

vmware_6rVECoIL55.png

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

vmware_dLUUvt4C1r.png

2.7 运行程序

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

Run As ->Scala Application

image.png

分析一下代码,

image.png

运行成功之后,

vmware_JgsR6rurhc.png

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

image.png

进去以后打开tmp文件,

image.png

进入到tmp/maxnumber看一下,

image.png

具体怎么看用max演示一下,

image.png

OK!到此结束。

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

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

Run ConfigurationsArgumentsVM arguments里添加一句:

-Xmx512m

image.png

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

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

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

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

相关文章

rk3568 适配摄像头 (mipi 单摄)

rk3568 适配摄像头 (mipi 单摄) MIPI CSI&#xff08;Mobile Industry Processor Interface Camera Serial Interface&#xff09;是一种用于移动设备的高速串行接口标准&#xff0c;用于连接图像传感器和图像处理器。MIPI CSI接口使用差分信号传输技术&#xff0c;将数据分为…

C/C++ 高精度(加减乘除)算法二进制优化

高级精度算法系列 第一章 简单实现 第二章 压位优化 第三章 二进制优化(本章) 文章目录 高级精度算法系列前言一、基本原理1、存储方式2、计算方式 二、关键实现1、整型转高精度数组&#xff08;二进制&#xff09;2、字符串转高精度数组&#xff08;二进制&#xff09;3、高精…

小程序进阶

1.1组件基础 自定义组件的结构与页面是一致的&#xff0c;即也包含有4个部分&#xff0c;分别为: .wxml 组件的布局结构 .js 组件的处理逻辑 .json 组件的配置文件 .wxstngs 组件的布局样式 1.1.1创建组件 通常将组件放到独立的目录components当中这个目录需要手动创建 …

Spring Boot的配置文件

目录 配置文件的作用 配置文件的格式 properties配置文件 格式 注释乱码问题 读取配置文件 properties的优缺点分析 YAML yml基本语法 yml配置的读取 注意事项:value的值加单双引号 配置对象 yml优点分析 properties和yml的区别 设置不同环境的配置文件 配置文件的…

Linux-搭建web服务器

综合练习&#xff1a;请给openlab搭建web网站 ​ 网站需求&#xff1a; ​ 1.基于域名[www.openlab.com](http://www.openlab.com)可以访问网站内容为 welcome to openlab!!! ​ 2.给该公司创建三个子界面分别显示学生信息&#xff0c;教学资料和缴费网站&#xff0c;基于[www.…

SpringCloud --- Ribbon负载均衡

一、负载均衡原理 SpringCloud底层其实是利用了一个名为Ribbon的组件&#xff0c;来实现负载均衡功能的。 那么我们发出的请求明明是http://userservice/user/1&#xff0c;怎么变成了http://localhost:8081的呢&#xff1f; 二、源码跟踪 为什么我们只输入了service名称就…

浅谈: 计算机—JVM—Java线程—池

计算机的基本组成 计算机的基本组成 计算机存储模型(CPU、寄存器、高速缓存、内存、外存) 现代计算机系统CPU和内存之间其实是有一个cache的层级结构的。比内存速度更快的存储介质(SRAM)&#xff0c;普通内存一般是DRAM&#xff0c;这种读写速度更快的介质充当CPU和内存之间的…

3 连续模块(二)

3.5 零极点增益模块 在控制系统设计和分析中&#xff0c;常用的函数包括 传递函数&#xff08;tf&#xff09;、零极点&#xff08;zpk&#xff09;和状态空间&#xff08;ss&#xff09;函数 传递函数&#xff08;tf&#xff09;&#xff1a;用于表示线性时不变系统的输入输出…

SQL Compliance Manager Crack

SQL Compliance Manager Crack 新的SQL CM云代理-扩展了当前SQL CM代理的功能&#xff0c;以支持EC2上Microsoft SQL服务器的远程审核。允许用户添加在共享网络位置上活动的SQL Server&#xff0c;以写入/读取数据并支持DBaaS SQL Server实例。云代理包含与当前SQL代理相同的行…

VS code 插件之中英文间自动添加空格

前言 不知道大家在开发过程中是不是会遇到写代码注释或者文本内容时中英文之间没有空格的情况&#xff0c;很多时候在写代码尤其是写注释的时候容易忘记加空格&#xff0c;但回过头来看又难以忍受&#xff0c;于是我就想着自己写一个 vscode 插件来解决这个问题&#xff0c;希…

跟我一起开启 linux 的学习吧

跟我学 CentOS 的安装 一、安装 VMware二、创建虚拟机三、安装 CentOS 7四、linux 的登录 一、安装 VMware VMware 计算机虚拟化软件 从官网 https://www.vmware.com/cn.html 下载并安装 这里就不再展示安装过程啦&#xff01; 有需要的可以 点击这里 →→→ VMware 下载安装过…

postgresql 源码结构分析

专栏内容&#xff1a;postgresql内核源码分析个人主页&#xff1a;我的主页座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物&#xff0e; 目录 前言 源码下载 源码结构 核心代码目录 结尾 前言 本文对postgresql源码目…

进销存管理系统和ERP的工作原理和实现方式有何不同?

一、ERP是什么&#xff1f; ERP即企业资源规划&#xff08;Enterprise Resource Planning&#xff09;&#xff0c;是一种集成管理软件系统。它的目的是整合和规划各种企业资源和业务流程&#xff0c;包括财务、物流、采购、生产、销售等&#xff0c;以提高企业的管理效率和业…

Java -- IO流

IO流 主要用于读写数据 IO流按照流的方向可以分为以下两种&#xff1a; 输入流输出流 IO流按照操作文件类型可以分为以下两种&#xff1a; 字节流字符流 字节流可以操作所有类型的文件&#xff0c;而字符流只可以操作纯文本文件 #mermaid-svg-tfFZjSluOmEFUpyc {font-fam…

SVM-老师讲的真的很好!

支持向量机(Support Vector Machine) 如同逻辑回归一样,SVM是一个分类模型 目标 SVM解决分类模型的基本思路:什么是一个好的分类边界? SVM认为,好的分类决策边界应当是:类别边界的距离应当尽可能的远 目标函数 拉格朗日乘子法 那么我们的公式就可以写为

SIP协议之通话转接

一、介绍 在SIP协议应用中&#xff0c;有一个常用的功能叫通话转接&#xff0c;用于将接通后的通话转给第三方接听处理。 二、原理及流程 转接是通过SIP协议的一个扩展请求方法REFER实现的。呼叫转接由RFC5589(Session Initiation Protocol (SIP) Call Control - Transfer)定义…

(数字图像处理MATLAB+Python)第六章图像平滑-第一节:图像平滑概述和空间域平滑滤波

文章目录 一&#xff1a;图像中的噪声&#xff08;1&#xff09;图像噪声分类&#xff08;2&#xff09;图像噪声的数学模型&#xff08;3&#xff09;程序 二&#xff1a;空间域平滑滤波&#xff08;1&#xff09;均值滤波A&#xff1a;均值滤波原理B&#xff1a;示例C&#x…

203、【栈与队列】leetcode ——剑指 Offer II 040. 矩阵中最大的矩形 / 85. 最大矩形:暴力+单调栈(C++/Pyhont版本)

题目描述 Problem: 剑指 Offer II 040. 矩阵中最大的矩形 文章目录 题目描述解法一&#xff1a;暴力解法思路解题方法复杂度Code 解法二&#xff1a;单调栈解法 解法一&#xff1a;暴力解法 思路 首先&#xff0c; 按行获取到达某一元素位置时&#xff0c;之前与当前连续1的个…

【JUC高并发编程】—— 初见JUC

一、JUC 概述 什么是JUC JUC 是 Java并发编程的缩写&#xff0c;指的是 Java.util.concurrent 即Java工具集下的并发编程库 【说白了就是处理线程的工具包】 JUC提供了一套并发编程工具&#xff0c;这些工具是Java 5以后引入的&#xff0c;使得Java开发者可以更加方便地编写…

86页2023年新型智慧城市顶层设计规划解决方案(ppt可编辑)

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除 整体架构 智慧城市建设从顶层设计入手&#xff0c;结合软硬件资源整合能力&#xff0c;为公众提供全生命周期一站式服务管理。智慧城市的整体框架分为发展战略层、技术实施层…