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

这篇具有很好参考价值的文章主要介绍了【李老师云计算】实验二:Spark集群的搭建与求解最大值。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

直接进入正题吧。
在验收之后又做了一些修改,希望能有所帮助……

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

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

1. Spark部署

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

1.1 下载Spark

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

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

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目录了。

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

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 进入修改文件,后面添加上两个从机的主机名(根据自己的改!)

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

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可以看到至少以下两个进程:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2.1 下载Scala IDE

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

2.2 解压Scala IDE

拖到usr/local

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

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

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

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

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

【李老师云计算】实验二:Spark集群的搭建与求解最大值
如果打不开可以参考2.10的解决方法

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

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

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

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

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

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

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

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

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

2.5 创建Scala项目

打开Scala IDE

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

创建一个Scala项目,

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

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

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

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

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

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

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

2.6 配置Scala项目

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

2.6.1 设置Maven

两个地方要改。

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

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

添加了以后记得选上,

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

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

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

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>

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

2.6.3 设置Scala Complier

右键项目,打开Properties

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

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

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

2.6.4 添加Spark的jar包

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

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

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

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

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

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

2.7 创建代码(Object)

右键src -> new ->Scala Object,名字随便起。两个代码一个Random一个Max。
【李老师云计算】实验二:Spark集群的搭建与求解最大值

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(50)(scala.util.Random.nextInt(10000)+1))
    
    // 输出到控制台
    randoms.collect().foreach(println)
    
    // 将随机数和最大值保存到 HDFS 目录
    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 filePath = "hdfs://192.168.64.60:9000/tmp/maxnumber/word_060.txt"
    val conf = new SparkConf().setAppName("Max").setMaster("local")
    val sc = new SparkContext(conf)
    val randoms = sc.textFile(filePath) 
    
    val nums = randoms.map(_.toInt).cache()
    
    val max = nums.max()  
    println(s"The maximum number is: $max")

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

    sc.stop()
  }
}

2.8 运行程序

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

Run As ->Scala Application
先运行Random生成随机数输出到控制台,并且保存。
【李老师云计算】实验二:Spark集群的搭建与求解最大值
运行成功之后,再运行第二个Max程序。

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

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

进去以后打开tmp文件,

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

进入到tmp/maxnumber看一下,
【李老师云计算】实验二:Spark集群的搭建与求解最大值

具体怎么看用max演示一下,
【李老师云计算】实验二:Spark集群的搭建与求解最大值

OK!到此结束。

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

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

Run ConfigurationsArgumentsVM arguments里添加一句:

-Xmx512m

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

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

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

2.10 ★解决打不开Scala IDE(Eclipse)

如果出现以下错误,
【李老师云计算】实验二:Spark集群的搭建与求解最大值
可以尝试更换一下工作目录,修改为其他的如/root/work之类的随便改。

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

2.11 ★解决找不到jar包,一直爆红

大概率是maven仓库的问题把仓库删了就行了。
在终端输入下面指令删除仓库rm -rf ~/.m2/repository
这个.m2仓库是隐藏的,打开显示隐藏文件也能看到。
删了之后重新创建项目然后操作会自动加载新的仓库大概率问题就解决了。

3. 对实验的一些解释

仅供参考仅供参考仅供参考,心酸。

3.1 Spark主从架构设计

主节点:主机(ip或主机名)
从节点:从机(ip或主机名)

3.2 对代码的解释(创建RDD,转换,持久化)

以Max的代码为例:

  1. 读入外部文件创建RDD
    val conf = new SparkConf().setAppName("Max").setMaster("local")
    val sc = new SparkContext(conf) // 创建RDD
    val randoms = sc.textFile(filePath) // 读入外部文件
  1. 转换操作
val nums = randoms.map(_.toInt).cache() // 将randoms RDD内的数据转换为整数类型
  1. 持久化与行动操作
	val max = nums.max()  // 行动求最大值
    val outputPath = "hdfs://192.168.64.60:9000/tmp/maxnumber/maxnumber_060"
    sc.parallelize(Seq(max)).saveAsTextFile(outputPath) // 持久化保存到HDFS目录中

3.3 构建DAG图

报告中写的是AG,实际上是DAG,但是!似乎真正要的不是DAG而是课本上的某一种图,大概在宽窄依赖上面类似于这样的图。
【李老师云计算】实验二:Spark集群的搭建与求解最大值

3.4 宽窄依赖

窄依赖
textFile方法创建的输入数据的RDD与map方法创建的转换后的RDD之间存在窄依赖关系,因为每个输入数据的分区只会被一个转换后的分区所依赖。map方法创建的转换后的RDD与cache方法创建的持久化的RDD之间也存在窄依赖关系,因为每个转换后的分区只会被一个持久化的分区所依赖。cache方法创建的持久化的RDD与max方法创建的操作后的RDD之间也存在窄依赖关系,因为每个持久化的分区只会被一个操作后的分区所依赖。

3.5 划分阶段

读入外部文件创建RDD (textFile)-转换操作 (map)-持久化 (cache)-行动操作 (max)-转换操作 (parallelize)-持久化 (saveAsTextFile)-释放资源(stop)文章来源地址https://www.toymoban.com/news/detail-427624.html

到了这里,关于【李老师云计算】实验二:Spark集群的搭建与求解最大值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【独家】华为OD机试 - 矩阵最值,计算二位矩阵的最大值(C 语言解题)

    最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单 华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典 【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南 华为od机试,独家整理 已参加机试人员的实战技巧 给定一个仅包含 0 和 1 的 n*n 二维矩阵

    2023年04月25日
    浏览(76)
  • Spark集群搭建记录 | 云计算[CentOS7] | Scala Maven项目访问Spark(local模式)实现单词计数

    本系列文章索引以及一些默认好的条件在 传送门 要想完成Spark的配置,首先需要完成HadoopSpark的配置 Hadoop配置教程:链接 若未进行明确说明,均按照root用户操作 本来在Eclipse的Marketplace便可以下载,可是现在官网都寄了 所以说只好找到之前的版本凑合来用 下载链接 这个软件

    2024年02月05日
    浏览(52)
  • 三台虚拟机搭建Hadoop集群(云计算实验新)

    本文将介绍利用三台虚拟机实现互相免密访问并搭建Hadoop集群。 1. 下载操作系统镜像源 本文利用Centos7.9版本,下载地址,需要其他版本可在阿里镜像源下载。 2. 下载虚拟机软件VMware VMware官网链接,VMware下载指南 3. 配置三台Centos虚拟机 VMware中创建虚拟机教程,创建完成一个

    2024年02月10日
    浏览(49)
  • 实验三---读取iris数据集中鸢尾花的萼片,花瓣长度,并对其进行排序、去重、并求出和,累计和,均值,标准差、方差、最大值和最小值。

    1)读取iris数据集中鸢尾花的萼片,花瓣长度 2)对鸢尾花的萼片,花瓣长度进行排序; 3)对鸢尾花的萼片,花瓣长度进行去重; 4)求鸢尾花的萼片,花瓣长度的和,以及累计和; 5)求鸢尾花的萼片,花瓣长度的均值; 6)求鸢尾花的萼片,花瓣长度的标准差、方差; 7)

    2024年02月08日
    浏览(60)
  • 云计算集群搭建记录[Hadoop|Zookeeper|Hbase|Spark | Docker |OpenStack]更新索引 |动态更新

    为了能够更好的查看所更新的文章,讲该博文设为索引 为了解决在编辑文件等操作的过程中的权限问题,博主一律 默认采用 root 账户登录 对于初次安装的用户可以采用如下命令行: 另外推荐一款终端工具:Tabby,既能够连接自己的服务器,也能够连接自己本地的虚拟机,还

    2023年04月13日
    浏览(56)
  • 【大数据与云计算】实验三:云计算环境下Web集群搭建与反向代理配置

    使用命令查看所有的镜像  启动docker的用法 启动nginx的命令 首先是拉取nginx 然后进行端口映射 命令如下 保证你的镜像没有nginx,一开始 删除所有镜像和容器的而命令如下   3、拉去mariadb镜像 docker pull mariadb 4、启动mariadb容巉 docker run -itd --name dbmysql   启动mariadb使用 命令查看

    2024年02月02日
    浏览(40)
  • hadoop集群搭建、spark集群搭建、pyspark搭建(linux+window)

    本文记录学习过程中Hadoop、zookeeper、spark集群搭建,主要为pyspark库服务(具体为window上pyspark环境和pyspark库,linux上spark框架、pyspark应用程序、pyspark环境和pyspark库)。pyspark环境是用anaconda3搭建的环境。pyspark应用程序,是安装spark集群里面自带的,提供一个python解释器环境来执

    2024年01月22日
    浏览(47)
  • Spark---集群搭建

    Standalone集群是Spark自带的资源调度框架,支持分布式搭建,这里建议搭建Standalone节点数为3台,1台master节点,2台worker节点,这虚拟机中每台节点的内存至少给2G和2个core,这样才能保证后期Spark基于Standalone的正常运行。搭建Standalone集群的步骤如下: 1)、下载安装包,解压 登

    2024年02月04日
    浏览(31)
  • 剑指 Offer 59 - I. 滑动窗口的最大值 / LeetCode 239. 滑动窗口最大值(优先队列 / 单调队列)

    链接:剑指 Offer 59 - I. 滑动窗口的最大值;LeetCode 239. 滑动窗口最大值 难度:困难 下一篇:剑指 Offer 59 - II. 队列的最大值(单调队列) 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗

    2024年02月15日
    浏览(41)
  • 239. 滑动窗口最大值

    力扣题目链接   (opens new window) 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。 进阶: 你能在线性时间复杂度内解决此题吗? 提示:

    2024年02月15日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包