编写Spark独立应用程序

执行本文之前,先搭建好spark的开发环境,我目前只搭建了standalone模式,参考链接 : Spark Standalone模式部署-CSDN博客

1. 安装sbt

1)下载sbt

        网址:https://www.scala-sbt.org/download.html ,下载sbt-1.8.3.tgz。

2)将下载好的安装包拷贝到共享文件夹,

        cd /mnt/hgfs/Ubuntu_share

3)解压到/usr/local

        sudo tar -zxvf  sbt-1.8.3.tgz -C /usr/local

4)修改权限

        sudo chown -R wang:wang /usr/local/sbt

5)将bin目录下的sbt-launch.jar复制到sbt的安装目录下

        cd /usr/local/sbt

        sudo cp ./bin/sbt-launch.jar ./

6) 创建脚本/usr/local/sbt/sbt,添加如下内容:

        sudo vim /usr/local/sbt/sbt

#!/bin/bash
SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"
java $SBT_OPTS -jar `dirname $0`/sbt-launch.jar "$@"

7) 修改权限

        sudo chmod u+x /usr/local/sbt/sbt

8) 检验 sbt 是否可用

        sudo ./sbt sbtVersion

出现如下画面,则sbt安装成功。

2. 编写scala应用程序

1)创建应用程序根目录

        mkdir ~/sparkcode
        cd ~/sparkcode/
        mkdir -p ./src/main/scala

2)新建测试程序
        cd src/main/scala/
        vim SimpleApp.scala

输入如下内容,该程序计算 testspark.txt 文件中包含 "a" 的行数 和包含 "b" 的行数。

/* SimpleApp.scala */
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
object SimpleApp {def main(args: Array[String]) {val logFile = "file:///usr/local/testspark.txt" // Should be some file on your systemval conf = new SparkConf().setAppName("Simple Application")val sc = new SparkContext(conf)val logData = sc.textFile(logFile, 2).cache()val numAs = logData.filter(line => line.contains("a")).count()val numBs = logData.filter(line => line.contains("b")).count()println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))}
}

3. 使用 sbt 打包 Scala 程序

1)新建文件simple.sbt

        vim ~/sparkcode/simple.sbt

2)添加内容如下

name := "Simple Project"
version := "1.0"
scalaVersion := "2.12.17"
libraryDependencies += "org.apache.spark" %% "spark-core" % "3.3.0"

3)将整个应用程序打包成 JAR:

        sudo /usr/local/sbt/sbt package

出现如下内容,打包成功。

jar包路径:~/sparkcode/target/scala-2.12/simple-project_2.12-1.0.jar  

4)通过 spark-submit 运行程序

/usr/local/spark-3.3.0-bin-hadoop3/bin/spark-submit --class "SimpleApp" ~/sparkcode/target/scala-2.12/simple-project_2.12-1.0.jar
/usr/local/spark-3.3.0-bin-hadoop3/bin/spark-submit --class "SimpleApp" ~/sparkcode/target/scala-2.12/simple-project_2.12-1.0.jar 2>&1 | grep "Lines with a:"

第二条可以过滤信息,最终得到结果:      ​​​​​

5)在浏览器中可查看运行状态

我运行了多次,故出现了很多个SimpleApp。

4. 遇到的问题

执行/usr/local/spark-3.3.0-bin-hadoop3/bin/spark-submit --class "SimpleApp" ~/sparkcode/target/scala-2.12/simple-project_2.12-1.0.jar

第一次执行成功了,在执行报了一堆错误,筛选了一下,主要是如下错误

Job aborted due to stage failure: Task 1 in stage 0.0 failed 4 times, most recent failure: Lost task 1.3 in stage 0.0 (TID 7) (192.168.50.40 executor 0): java.io.FileNotFoundException: File file:/usr/local/testspark.txt does not exist
这个文件在master中是存在的,192.168.50.40是slave1的地址,猜想应该是slave1缺少该文件,遂在slave1新建/usr/local/testspark.txt。

再次执行,错误变成下面

ResultStage 0 (count at SimpleApp.scala:11) failed in 3.144 s due to Job aborted due to stage failure: Task 1 in stage 0.0 failed 4 times, most recent failure: Lost task 1.3 in stage 0.0 (TID 4) (192.168.50.40 executor 0): java.io.EOFException: Cannot seek after EOF

百度查到应该是master和slave1的testspark.txt数据不一致引起的,于是将master的testspark.txt发送到slave1,再执行,成功。

以上问题虽然解决,但感觉这样必须所有节点都保存一份testsparl.txt,不应该是这么处理。参考文章spark读取不了本地文件_spark 无法读取读取本地文件-CSDN博客,决定将该文件上传到hdfs中

文章地址:上传文件到HDFS-CSDN博客

上传成功后更改SimpleApp.scala中的内容如下,

再次按上文流程,打包运行程序,成功。

文章参考:Spark安装和使用_厦大数据库实验室博客 (xmu.edu.cn)

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

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

相关文章

设计模式——终止模式之两阶段终止模式

文章目录 1. 错误思路2. 两阶段终止模式2.1 利用 isInterrupted2.2 利用停止标记interrupt-打断park Two Phase Termination 在一个线程 T1 中如何“优雅”终止线程 T2?这里的【优雅】指的是给 T2 一个料理后事的机会。 1. 错误思路 使用线程对象的 stop() 方法停…

论文解读-面向高效生成大语言模型服务:从算法到系统综述

一、简要介绍 在快速发展的人工智能(AI)领域中,生成式大型语言模型(llm)站在了最前沿,彻底改变了论文与数据交互的方式。然而,部署这些模型的计算强度和内存消耗在服务效率方面带来了重大挑战&a…

Xinlinx FPGA内的存储器BRAM全解

目录 一、总体概述1.7系列FPGA的BRAM特点2.资源情况 二、BRAM分类1.单端口RAM2.简单双端口RAM3.真双端口RAM 三、BRAM的读写1、Primitives Output Registers读操作注意事项2.三种写数据模式(1)Write_First(2)Read_First&#xff0…

【iconv】Linux c++ 中文字符串转十六进制 GBK 编码/内码

文章目录 问题描述c 代码CMakeLists.txt参考链接 问题描述 Linux 系统默认使用的是 UTF-8 编码,并且 c 中没有标准库可以直接将中文字符转为 GBK 编码/内码。因此需要借助 iconv 库来实现。 在实现代码之前,可以在一下在线工具网站进行中文字符到各个编…

mac上安装Tomcat

1. 简介 Tomcat 是一个开源的 Java 服务器,它实现了 Java Servlet、JavaServer Pages(JSP)和Java WebSocket 技术。Tomcat 是 Apache 软件基金会的一个项目,是一个轻量级、高性能的 Web 容器。作为一个 Web 服务器,To…

前端工程化Vue使用Node.js设置国内高速npm镜像源(踩坑记录版)

前端工程化Vue使用Node.js设置国内高速npm镜像源(踩坑记录版) 此篇仅为踩坑记录,并未成功更换高速镜像源,实际解决方法见文末跳转链接。 1.自身源镜像 自身镜像源创建Vue项目下载速度感人 2.更改镜像源 2.1 通过命令行配置 前提…

常见的排序算法

前言 算法对于我们普通的工程师来说可算得上陌生又熟悉,因为在平时的业务代码中可能见到他的身影比较少,但在底层的代码中我们可能会经常发现排序算法的影子,如数据库索引,操作系统的进程调度。因此,掌握这种算法中的…

打造智能语音机器人-用语音控制机器人

人工智能现已成为国家发展重大战略,智能语音技术作为人工智能产业链上的关键一环,AI应用成熟的技术之一,人工智能的发展也进入了一个崭新的阶段。那么打造智能语音机器人怎样实现用语音控制机器人呢?和小编一起来看看。 选择合适的…

Xcode for Mac:强大易用的集成开发环境

Xcode for Mac是一款专为苹果开发者打造的集成开发环境(IDE),它集成了代码编辑器、编译器、调试器等一系列开发工具,让开发者能够在同一界面内完成应用的开发、测试和调试工作。 Xcode for Mac v15.2正式版下载 Xcode支持多种编程…

如何将web content项目导入idea并部署到tomcat

将Web Content项目导入IntelliJ IDEA并部署到Tomcat主要涉及以下几个步骤: 1. 导入Web Content项目 打开IntelliJ IDEA。选择“File” -> “New” -> “Project from Existing Sources…”。浏览到你的Web Content项目的文件夹,并选择它。Intell…

1.C++入门(上)

目录 1.C关键字 2.命名空间 作用域方面的优化 a.命名空间定义 b.命名空间使用 3.C 输入&输出 1.C关键字 C有63个关键字,C语言有32个关键字,存在重叠如荧光笔标出 2.命名空间 作用域方面的优化 如果变量,函数和类的名称都存在于全…

Hive服务详解

Hive服务 HiveServer2、Hive Metastore 服务服务共同构成了 Hive 生态系统中的核心功能,分别负责管理元数据和提供数据查询服务,为用户提供了一个方便、高效的方式来访问和操作存储在 Hive 中的数据。 1. Hive 查询服务(HiveServer2&#xf…

STM32自己从零开始实操01:原理图

在听完老师关于 STM32 物联网项目的所有硬件课程之后,就是感觉自己云里雾里,明明课程都认真听完了,笔记也认真记录,但是就是感觉学到的知识还不是自己。 遂决定站在老师的肩膀上自己开始设计项目,将知识变成自己的&am…

沉浸式推理乐趣:体验线上剧本杀小程序的魅力

在这个信息爆炸的时代,人们的娱乐方式也在不断地推陈出新。其中,线上剧本杀小程序以其独特的沉浸式推理乐趣,成为了许多人的新宠。它不仅让我们在闲暇之余享受到了推理的快乐,更让我们在虚拟的世界里感受到了人性的复杂与多彩。 线…

【Linux网络编程】数据链路层

数据链路层 1.以太网帧格式2.重谈局域网转发的原理(基于协议)3.认识MTU3.1MTU对IP协议的影响3.2MTU对UDP协议的影响3.3MTU对于TCP协议的影响 4.ARP协议 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励…

Windows系统下将MySQL数据库表内的数据全量导入Elasticsearch

目录 下载安装Logstash 配置Logstash配置文件 运行配置文件 查看导入结果 使用Logstash将sql数据导入Elasticsearch 下载安装Logstash 官网地址 选择Windows系统,需下载与安装的Elasticsearch相同版本的,下载完成后解压安装包。 配置Logstash配…

浏览器的同源策略与解决跨域

同源策略(协议、域名、端口) 同源策略(Same-Origin Policy)是一个在浏览器安全模型中被实施的重要安全机制。它是基于域名、协议和端口号的限制,用于防止不同源的网页间的恶意行为和信息泄露。 根据同源策略&#xf…

C语言笔试题之重排链表

重排链表 实例要求 1、给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln - 1 → Ln2、请将其重新排列后变为: L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …3、不能只是单纯的改变节点内部的值,而是…

“AI技能,新的职场通行证?揭秘阿里最新职业趋势报告“

随着“五一”劳动节的临近,阿里巴巴发布了一份引人注目的报告——《“AI”职业趋势报告》。这份报告不仅揭示了人工智能(AI)在各行各业中的关键作用,也预示了一个全新的工作时代正在加速到来。 报告中明确指出,AI的应用…

mysql8.0免安装版windows

1.下载 MySQL下载链接 2.解压与新建my.ini文件 解压的路径最好不要有中文路径在\mysql-8.0.36-winx64文件夹下新建my.ini文件,不建data文件夹(会自动生成) [mysqld] # 设置3306端口 port3306 # 设置mysql的安装目录(尽量用双斜杠\\,单斜杠\可能会报错) basedirD:\…